智能合约封装包
web3j支持java从ABI文件中自动生成智能合约函数封装包。
web3j还可以使用命令行工具来生成智能合约函数封装包:
$ web3j solidity generate [--javaTypes|--solidityTypes] /path/to/<smart-contract>.bin /path/to/<smart-contract>.abi -o /path/to/src/main/java -p com.your.organisation.name
在web3j的3.x之前的版本中,生成的智能合约封装包使用原生Solidity类型。从web3j 3.x开始,默认会采用Java类型。可以使用–solidityTypes
命令行参数创建solidity类型。
还可以通过直接调用Java类来生成封装包:
org.web3j.codegen.SolidityFunctionWrapperGenerator /path/to/<smart-contract>.bin /path/to/<smart-contract>.abi -o /path/to/src/main/java -p com.your.organisation.name
其中bin和abi是根据本文中编译solidity源代码章节的方法获得的。
在应用程序二进制接口ABI的官方文档中详细说明了原生Java到solidity类型如何转换。
智能合约封装包支持所有与智能合约一起工作的通用操作:
- 构建与部署
- 调用交易和事件
- 调用参数方法
- 确定合约有效性
任何需要底层JSON-RPC调用的方法调用都会有一个返回以避免阻塞。
web3还支持通过命令行工具直接从Tunffle的合约模式生成Java智能合约功能封装包。
$ web3j truffle generate [--javaTypes|--solidityTypes] /path/to/<truffle-smart-contract-output>.json -o /path/to/src/main/java -p com.your.organisation.name
这也可以通过调用Java类来调用:
org.web3j.codegen.TruffleJsonFunctionWrapperGenerator /path/to/<truffle-smart-contract-output>.json -o /path/to/src/main/java -p com.your.organisation.name
以这种方式生成的"增强型"的封装包会暴露合约的每个网络部署地址。这些地址来自于发布Truffle部署时的封装包。