6

我在 RSK 上部署了一个分散的应用程序,并且已经工作了几个月。使用公共节点一切正常,但是很少,我们开始得到一个完全随机的错误:

Unknown Error: { 
  "jsonrpc": "2.0", 
  "id": 2978041344968143, 
  "error": { 
    "code": -32010, 
    "message": "transaction nonce too high" 
  } 
}

没有关于“太高”随机数的信息,但有很多关于“太慢”的线程。我正在使用web3.Contract.method.send().

4

2 回答 2

7

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

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

BigInteger maxNumberOfTxsPerAddress = BigInteger.valueOf(4);

请注意,以太坊也有类似的限制,但在geth中配置的限制是10。因此,如果我们已经发送了 4 笔尚未被挖掘的交易,并且在下一个区块被挖掘之前发送了第 5 笔交易,则会收到 nonce 太高的错误。如果一个区块被开采并且它拥有所有 4 个交易,那么我们将能够为下一个区块添加最多 4 个交易。

解决方法

(1) 从一个地址发送不超过 4 个交易,直到有一个新块。

(2) 聚合所有调用,然后使用一次性执行它们的合约。在RNS Batch ClientExecuteRegistrations中可以看到一个例子 。

于 2021-01-18T13:15:52.463 回答
0

在 Metamask 中,确保您使用的是您的开发/测试帐户,然后:

1 单击右上角的头像圈 2 在菜单中,选择设置 3 单击高级 4 向下滚动一点,确保您再次使用您的测试网帐户,单击重置帐户

于 2022-02-22T02:57:38.017 回答