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

时间:2021-01-18 13:08:40

标签: web3 rsk

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

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

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

1 个答案:

答案 0 :(得分:5)

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

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

BigInteger maxNumberOfTxsPerAddress = BigInteger.valueOf(4);

注意以太坊也有类似的限制, 但是在 geth 中配置的限制是 10。 因此,如果我们已经发送了 4 个尚未被挖掘的交易,并且在下一个区块被挖掘之前发送了第 5 个交易,则会出现 nonce 过高的错误。如果一个区块被挖出并且假设有所有 4 个交易,那么我们最多可以为下一个区块添加 4 个交易。

解决方法

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

(2) 聚合所有调用,然后使用一次执行它们的合约。 这方面的一个例子见于 RNS Batch Client ExecuteRegistrations