Spring Boot 使用 web3j 交互智能合约详解
一、什么是 web3j
web3j 是一个高度模块化、响应式、类型安全的 Java 和 Android 库,用于与智能合约交互,并与 Ethereum 网络的客户端(节点)集成。
二、准备工作
- 新建一个 Spring Boot 项目,在 pom.xml 文件中添加依赖:
<dependency>
<groupId>org.web3j</groupId>
<artifactId>web3j-spring-boot-starter</artifactId>
<version>1.6.0</version>
</dependency>
- 打开以太坊客户端(如果有可以直接连接的客户端,可以忽略此步骤)。注意:打开客户端时需要加上
--rpc参数,否则无法调用。
geth --rpc --datadir "./chain" --nodiscover console 2>>output.log
miner.start()
- 生成智能合约的封装器 (1) 下载 web3j 的 Command Line Tool:
brew tap web3j/web3j
brew install web3j
或下载 zip 文件解压后进入目录。
(2) 生成封装器
需先用 solc 编译生成 .bin 和 .abi 文件。
solc 安装命令:npm install -g solc
编译命令:
solcjs <Solidity 文件地址>.sol --bin --abi --optimize -o <输出文件夹路径>/
实例(以 Compute.sol 为例):
solcjs Compute.sol --abi --bin -o ./
会生成四个文件。由于 Compute 函数继承了 Owner 函数的方法,实际上只需要用到 Compute_sol_Compute.abi 和 Compute_sol_Compute.bin 这两个文件。
用 web3j 生成 Java 封装器:
web3j solidity generate --solidityTypes <智能合约编译之后的.bin 文件的地址>.bin <智能合约编译之后的.abi 文件的地址>.abi -o /path/to/src/main/java -p com.your.organisation.name
-o 后接生成的 Java 文件放置的位置,-p 后接包名。注意:.bin 和 文件顺序不能反,否则会报错。


