与智能合约交互

调用Constant方法

Constant方法不会改变任何的链上状态,最常见的Constant方法即各种查询。
在Solidity中,被viewpure修饰的方法即为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。请参照资源模型