官方文档nervosj开发问题

官方文档给出的
//create a signed transaction
Transaction tx = Transaction.createContractTransaction(BigInteger.valueOf(nonce), this.config.getQuota(), this.currentHeight + 88, 0, chainId, value, this.config.getCode());
tx.sign(this.config.getPrivateKey(), false, false);

//instantiate a Nervosj and send the transaction
Nervosj service = Nervosj.build(new HttpService(“127.0.0.1”));
AppSendTransaction sendTransaction = service.appSendRawTransaction(tx).send();

//get hash of the transaction
String hash = sendTransaction.getHash();

1.按此文档 Transaction 类没有createContractTransaction方法
2.Transaction 改成 RawTransaction 后,此类没有 sign 方法
问题:如何对消息对象进行签名
补充,我所用nervosj版本:0.18

你看下你引用的包是不是org.nervos.appchain.protocol.core.methods.request.Transaction,因为在request和response两个package里都有一个类叫Tranasaction,如果引用的是org.nervos.appchain.protocol.core.methods.response.Transaction,是没有这个方法的。

1 Like

没错是您说的这样,另外还有一个问题
service.appSendRawTransaction(tx).send();
问题
这个地方的参数要求是一个String类型,无法接收一个Transaction的对象类型,该怎么做呢?

下边是自己试出来的代码
Transaction tx = Transaction.createContractTransaction(nonce, quota, validUntilBlock, 0, chainId, “0x3”, “”);
String txStr = tx.sign(privateKey, false, false);

//instantiate a Nervosj and send the transaction
AppSendTransaction sendTransaction = service.appSendRawTransaction(txStr).send();

//get hash of the transaction
String hash = sendTransaction.getSendTransactionResult().getHash();

您看加粗的地方是与官方文档不同的地方,我这样做对吗?

对,你写的是对的,sendRawTransaction(string signedTx)的参数就是Transaction签名以后的数据,签名后的数据是一个String。这个地方文档写错了。

nervosj有文档了吗? 之前我都是看源码的测试用例来调用相关方法的。:joy:

是啊,我们写了一个,nervosj还有一个test,我们关于部署合约,转账和filter写了几个例子,可以看一下。0.18今天晚上刚发布,可以通过maven下载了,适配了cita0.18.

0.17.1升级0.18,有哪些兼容性要注意的吗? 比如接口方面,需要有什么地址注意的吗?

没什么变动,就是改了一些0.17.1的bug,作为开发者并不需要进行什么变动。