trident-java允许你使用合约的ABI和bytecode进行部署。
编译合约
通过Solidity编译器solc
可以将智能合约编译成bytecode。
通过以下命令进行编译:
$ solc <contract>.sol --bin --abi --optimize -o <output-dir>/
要通过trident-java部署合约,--bin
和--abi
两个参数在编译时是必须的。
部署合约
得到了ABI和bytecode之后,可以开始部署合约:
ApiWrapper wrapper = ApiWrapper.ofMainnet("hex private key");
String byteCode = "bytecode";
String abi = "ABI";
Contract cntr = new Contract.Builder()
.setOwnerAddr(c.parseAddress("address"))
.setOriginAddr(c.parseAddress("address"))
.setBytecode(ByteString.copyFrom(Numeric.hexStringToByteArray(bytecode)))
.setAbi(abi)
// .setCallValue()
// .setName()
// .setConsumeUserResourcePercent()
// .setOriginEnergyLimit()
.build();
cntr.setWrapper(c);
TransactionBuilder builder = cntr.deploy();
Call value
如果合约没有标注为payable的构造函数,传递非0的callValue会产生错误。
用参数部署合约
以下面这个简单的合约为例:
//SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
contract test {
uint256 public param;
constructor (uint256 p) {
param = p;
}
function t () public returns (uint256) {
param += 1;
return param;
}
}
为全局变量param
指定一个初始值:
List params = new ArrayList<Type>();
params.add(new Uint256(15));
//deploy with param
cntr.deploy(params);
在广播成功之后,会返回交易哈希。