DTeam 技术日志

Doer、Delivery、Dream

排错:replacement fee too low

胡键 Posted at — Feb 15, 2022 阅读

症状

调用合约方法却得到以下的错误信息:

Error: replacement fee too low (error={"reason":"processing response error","code":"SERVER_ERROR","body":"{\"jsonrpc\":\"2.0\",\"id\":109,\"error\":{\"code\":-32000,\"message\":\"replacement transaction underpriced\"}}","error":{"code":-32000},"requestBody":"{\"method\":\"eth_sendRawTransaction\",\"params\":[\"...\"],\"id\":109,\"jsonrpc\":\"2.0\"}","requestMethod":"POST","url":"..."}, method="sendTransaction", transaction="...", code=REPLACEMENT_UNDERPRICED, version=providers/5.5.2)
    at Logger.makeError (../node_modules/@ethersproject/logger/lib/index.js:199:1)
    at Logger.throwError (../node_modules/@ethersproject/logger/lib/index.js:208:1)
    at checkError (../node_modules/@ethersproject/providers/lib/json-rpc-provider.js:111:1)
    at InfuraProvider.<anonymous> (../node_modules/@ethersproject/providers/lib/json-rpc-provider.js:659:1)
    at step (../node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:1)
    at Object.throw (../node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:1)
    at rejected (../node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:1)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)

原因

看似混乱的信息中(上面的错误消息已经做过必要的删减,但即使这样也让人看着头晕),其实已经有一个很明确的错误消息:replacement fee too low 。

导致它出现的存在两种可能:

在 ethers 的这个 issue 链接中有对此的详细说明,请自行去了解。或者参见下面参考链接中的《Ethers.js 非权威开发指南(4)》,其中包含了关于 nonce、取消和加速 transaction,以及 gasPrice 的详细说明。

解决

一个简单解决方式就是想办法使之串行化或者降低提交 tx 的速度并设置合适的 gasPrice,等待 tx 完成(见下例)之后再提交下一个 tx。至于具体解法,只能具体情况具体分析了。

const tx = await contract.writeMethod(...);
await tx.wait();

【附】若对 ethers.js 不熟,可以参见:

觉得有帮助的话,不妨考虑购买付费文章来支持我们 🙂 :

付费文章

友情链接


相关文章