星云链neb.java调用智能合约

星云链neb.java调用智能合约,因为官方例子中只有AccountExample,和TransactionExample,只有rpc的调用方式,如果想使用http的方式调用合约,官方的单元测试用例中可以进行参考,基于官方单元测试中例子太少,自己尝试了http调用方式,留下走过的坑。

1.调用合约的方法,不需要数据挂载到链上,只是http方式调用方法获取结果。

官方单元测试用例中testCall

Response<CallResult> response =
                nebulasClient.call(new CallRequest("n1Z6SbjLuAEXfhX1UJvXT6BB5osWYxVg3F3", "n1mL2WCZyRi1oELEugfCZoNAW3dt8QpHtJw", "0", 3l, "1000000", "2000000", new Contract().setFunction("transferValue").setArgs("[500]")));
        System.out.println(response.getResult().getResult());
        System.out.println(response.getResult().getEstimateGas());

传入自己地址,合约地址,配置参数,设置调用方法和方法参数,可以直接执行合约方法,获得结果,但是这种是无法往链上保持数据的,可以获取当前合约的各种状态。

2.调用合约,数据挂载到链上。

官方单元测试用例中调用方式。testSendRawTransaction

Response<RawTransaction> response = nebulasClient.sendRawTransaction(new SendRawTransactionRequest().setData("CiCrHtxyyIJks2/RErvBBA862D6iwAaGQ9OK1NisSGAuTBIYGiY1R9Fnx0z0uPkWbPokTeBIHFFKRaosGhgzPLPtjEF5cYRTgu3jz2egqWJwwF/i9wAiEAAAAAAAAAAADeC2s6dkAAAoAjDd/5jSBToICgZiaW5hcnlAZEoQAAAAAAAAAAAAAAAAAA9CQFIQAAAAAAAAAAAAAAAAAABOIFgBYkGLnnvGZEDSlocc202ZRWtUlbl2RHfGNdBY5eajFiHKThfgXIwGixh17LpnZGnYHlmfiGe2zqnFHdj7G8b2XIP2AQ=="));
        System.out.println(response);

其中setData中的数据是签名后的数据,签名时,需要使用AccountManager进行签名,签名方式AccountManager.signTransaction()方法进行,当然,AccountManager需要钱配置好自己的密码,和key文件。配置方式AccountManager.load(keydata.getBytes(), passphrase.getBytes());配置好之后,就可以进行签名,签名的对象Transaction,Transaction自己可以进行创建new Transaction(chainID, from, to, BigInteger.valueOf(0), response.getResult().getNonce()+1, PayloadType.CALL, payload, BigInteger.valueOf(1000000), BigInteger.valueOf(2000000));

其中的payload中放置自己调用合约的方法和参数byte[] payload = new TransactionCallPayload("方法", "[参数]").toBytes();

然后就可以通过AccountManager.signTransaction(Transaction,“密码”);进行签名

然后通过byte[] txdata = Transaction.toProto();获取签名后数据然后进行base64,ByteUtils.Base64ToString(txdata ),base64后,获取的数据就可以使用nebulasClient.sendRawTransaction的方式进行调用合约,允许通过合约存储数据到链上。

如果有错误,欢迎指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值