我在 RSK 上部署了一个分散的应用程序,并且已经工作了几个月。使用公共节点一切正常,但很少发生,我们开始收到完全随机的错误:
Unknown Error: {
"jsonrpc": "2.0",
"id": 2978041344968143,
"error": {
"code": -32010,
"message": "transaction nonce too high"
}
}
Run Code Online (Sandbox Code Playgroud)
没有关于“太高”随机数的信息,但有很多关于“太慢”的线程。我正在使用web3.Contract.method.send().
小智 14
在 Metamask 中,确保您使用的是开发/测试帐户,然后:
1 单击右上角的头像圆圈 2 在菜单中,选择“设置” 3 单击“高级” 4 向下滚动一点,再次确保您位于测试网帐户上,单击“重置帐户”
同一地址在交易池中的交易数量是有限制的。
对于 RSK,此限制为4,并TxValidatorNonceRangeValidator
在rskj代码库中定义:
BigInteger maxNumberOfTxsPerAddress = BigInteger.valueOf(4);
Run Code Online (Sandbox Code Playgroud)
请注意,以太坊也有类似的限制,但在geth 中配置的限制是10。因此,如果我们已经发送了 4 个尚未被挖掘的交易,并且在下一个区块被挖掘之前发送了第 5 个交易,则会得到 nonce 太高的错误。如果一个区块被挖出并且假设有所有 4 个交易,那么我们最多可以为下一个区块添加 4 个交易。
解决方法
(1) 从一个地址发送不超过 4 个交易,直到有新区块。
(2) 聚合所有调用,然后使用一次执行它们的合约。在RNS Batch Client 中ExecuteRegistrations可以看到这样的一个例子
。
| 归档时间: |
|
| 查看次数: |
821 次 |
| 最近记录: |