部署智能合约

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);

在广播成功之后,会返回交易哈希。