我目前正在研究涉及发送交易的DApp。我正在使用BlockCypher发送事务,因为API非常简单。我发现的一个问题是,当我在本地运行我的API并调用send transaction方法时,我收到了事务哈希,我可以在Etherscan上检查它,并且事务确实会继续。
当然,下一步是部署API然后测试它,当我这样做并使用完全相同的参数命中API端点时。我收到以下错误:验证事务时出错:Account nonce 68 too far behind transaction 0xad50ba948fc3fe266fb19c4aa3f3a81928ff114b3fadf597a620ec86eada7cf0:
。似乎有问题的交易甚至不存在(从在Etherscan上搜索它),因此我的这个帐户的Nonce似乎与它应该是不同步的。这甚至可能吗?什么是克服这个问题的方法?
事实证明,我发现的是该帐户的nonce超过200。 以下是我构建交易的方式:
var count = web3.eth.getTransactionCount(FROM_ADDR);
//console.log(count); //Does actually return over 200 both locally and on the server.
var data = myContractInstance.transfer.getData(to, value, { from: FROM_ADDR });
var gasPrice = "2000000000";
var gasLimit = 90000;
var rawTransaction = {
"from": FROM_ADDR,
"nonce": web3.toHex(count),
"gasPrice": web3.toHex(gasPrice),
"gasLimit": web3.toHex(gasLimit),
"to": to,
"data": data,
"chainId": 0x01
};
console.log(rawTransaction);
//The nonce is still over 200 (Though in hex obviously).
奇怪的是,当我更改地址时,事务在本地计算机和服务器上再次正确发送。我已经给BlockCypher发了一封电子邮件,看看他们是否能够帮助解决这个问题。这似乎是BlockCypher方面的一个问题,可能是他们的节点不同步了吗?
提前致谢,