建设和部署¶
使用deploy方法构建和部署智能合约:
YourSmartContract contract = YourSmartContract.deploy(
<web3j>, <credentials>, GAS_PRICE, GAS_LIMIT,
[<initialValue>,]
<param1>, ..., <paramN>).send();
这将使用提供的凭证和构造函数参数值在以太坊区块链上创建智能合约的新实例。
参数仅在您的智能合约在构建时接受 Ether 时才需要。这需要在合同中出现Solidity应付修改器。
它返回一个新的智能合约包装实例,其中包含智能合约的底层地址。如果您希望使用现有智能合约构建智能合约包装器的实例,只需传入它的地址:
YourSmartContract contract = YourSmartContract.load(
"0x<address>|<ensName>", web3j, credentials, GAS_PRICE, GAS_LIMIT);
部署智能合约并与之交互¶
如果您想避免使用智能合约的底层实现细节,Web3j 提供了 Solidity智能合约包装器,使您能够通过生成的包装器对象直接与智能合约的所有方法进行交互。
或者,如果您希望发送常规交易或更好地控制您与智能合约的交互,请参阅Solidity 智能合约包装器、与智能合约进行交易和查询智能合约状态以了解详细信息。
Solidity 智能合约包装器¶
Web3j 支持从 Solidity ABI 文件自动生成 Java 中的智能合约函数包装器。
Web3j命令行工具工具附带一个命令行实用程序,用于生成智能合约函数包装器:
$ web3j generate solidity [-hV] [-jt] [-st] -a=<abiFile> [-b=<binFile>] -o=<destinationFileDir> -p=<packageName>
-h, --help Show this help message and exit.
-V, --version Print version information and exit.
-jt, --javaTypes use native java types. Default: true
-st, --solidityTypes use solidity types.
-a, --abiFile=<abiFile> abi file with contract definition.
-b, --binFile=<binFile> optional bin file with contract compiled code in order to generate deploy methods.
-o, --outputDir=<destinationFileDir> destination base directory.
-p, --package=<packageName> base package name.
是合同有效性所必需的
在 Web3j 3.x 之前的版本中,生成的智能合约包装器使用原生 Solidity 类型。从 Web3j 3.x 开始,Java 类型是默认创建的。您可以使用–solidityTypes命令行参数创建 Solidity 类型。
从 Web3j 版本 4.6.x 开始,生成器支持 ABIv2 用于使用 Solidity 编译器版本 0.6.x 编译的合约。这意味着您可以在智能合约中将结构作为输入/输出/事件参数。
您还可以通过直接调用 Java 类来生成包装器:
org.web3j.codegen.SolidityFunctionWrapperGenerator -b /path/to/<smart-contract>.bin -a /path/to/<smart-contract>.abi -o /path/to/src/main/java -p com.your.organisation.name
根据编译 Solidity 源代码获得bin和abi的位置
使用的本机 Java 到 Solidity 类型转换在应用程序二进制接口部分中有详细说明。
智能合约包装器支持使用智能合约的所有常见操作:
建设和部署
调用事务和事件
调用常量方法
合同有效期
任何需要进行底层 JSON-RPC 调用的方法调用都将返回 Future 以避免阻塞。
Web3j 还支持通过命令行工具实用程序直接从Truffle 的 Contract Schema生成 Java 智能合约函数包装器。
$ web3j generate truffle [--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
以这种方式生成的包装器被“增强”以公开合约的每个网络部署的地址。这些地址来自生成包装器时的松露部署。