我目前正在开发一个涉及发送事务的DApp。我使用BlockCypher发送事务,因为API相当直接。我发现的一个问题是,当我在本地运行API并调用方法时,我接收到了事务哈希,我能够在Etherscan上检查它,事务就会继续进行。
当然,下一步是部署API,然后测试它,当我这样做并使用完全相同的参数到达API端点时。我收到以下错误:Error validating transaction: Account nonce 68 too far behind transaction 0xad50ba948fc3fe266fb19c4aa3f3a81928ff114b3fadf597a620ec86eada7cf0:。问题中的事务甚至不存在(从Etherscan上搜索它),因此,我的这个帐户的现在似乎与它应该是不同步的。这可能吗?解决这个问题的方法是什么?
事实证明,我发现这个帐户应该有超过200个的时间,而函数web3.eth.getTransactionCount(ADDR)似乎只返回68。下面是我如何构造事务:
var count = web3.eth.getTransactionCount(FROM_ADDR);
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
};奇怪的是,当我更改地址时,事务将再次正确地在本地机器和服务器上发送。我给BlockCypher留了一封电子邮件,看看他们是否能帮上忙。
提前谢谢你,
发布于 2018-02-23 13:08:17
当使用完整事务对象创建事务时,可以执行不同的操作,包括放置不同的nonce。只需查看任何挂起的事务,查看它的外观,并根据以下内容构建您的事务:
[{
blockHash: null,
blockNumber: null,
from: "0x010...",
gas: 90000,
gasPrice: 100000000000,
hash: "0xe483aec6b05342eeedf3017314a2838180d66ee78a5ef21642c9f81b7b222dce",
input: "0x",
nonce: 269,
r: "0x9927c6c3856b35ca4ef1155840a4dbd83b79daa5a581b58a23563880bd9838b1",
s: "0x20bb0b13e8c87cff5677cfbb9c720b75104708e36cd08df5e844d5f1d359ebc5",
to: "0x020...",
transactionIndex: 0,
v: "0xa95",
value: 1000000000000000000
}]因此,您可以尝试这样的方法:
web3.eth.sendTransaction( { from : me , to : _to, value: web3.toWei(1), /*gas: 90000, gasPrice: 100000000000,*/ nonce: 269 } )或者,您可以尝试签署和发送大量事务,直到您得到您需要的。
https://ethereum.stackexchange.com/questions/40659
复制相似问题