调用Constant方法
Constant方法不会改变任何的链上状态,最常见的Constant方法即各种查询。
在Solidity中,被view
和pure
修饰的方法即为Constant方法。
要通过trident-java调用一个合约方法,首先需要构造它:
Function name = new Function("name",
Collections.emptyList(), Arrays.asList(new TypeReference<Utf8String>() {}));
//method name, input params, output params
接着,通过ApiWrapper.constantCall
调用这个方法:
TransactionExtention extension = wrapper.constantCall("caller address", "contract address", name);
最后将constant result
中的内容解码成可读的文本:
String result = Numeric.toHexString(txnExt.getConstantResult(0).toByteArray());
(String)FunctionReturnDecoder.decode(result, name.getOutputParameters()).get(0).getValue();
对于USDT来说,以上的调用会获取下面的结果:
> Tether USD
Constant调用
Constant调用都是不消耗资源的交易。
Trigger调用
Trigger调用会更改链上的状态。Trigger调用的前半部分逻辑与Constant调用相同,但它需要签名以及广播。
先构造一个方法:
Function transfer = new Function("transfer",
Arrays.asList(new Address(destAddr),
new Uint256(BigInteger.valueOf(amount).multiply(BigInteger.valueOf(10).pow(decimals)))),
Arrays.asList(new TypeReference<Bool>() {}));
这次,通过ApiWrapper.triggerCall
来调用这个方法:
TransactionBuilder builder = wrapper.triggerCall("caller address", "contract address", transfer);
余下的步骤和普通的交易相同,即签名和广播。参照发送交易章节。
关于fee limit
Trigger调用需要设置fee limit。请参照资源模型。