如何处理 RSK 中的“交易随机数过高”错误?

7al*_*lip 5 web3-donotuse rsk

我在 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 向下滚动一点,再次确保您位于测试网帐户上,单击“重置帐户”


Alv*_*aro 5

同一地址在交易池中的交易数量是有限制的。

对于 RSK,此限制为4,并TxValidatorNonceRangeValidatorrskj代码库中定义:

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可以看到这样的一个例子 。