调用合约方法却得到以下的错误信息:
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
不熟,可以参见:
觉得有帮助的话,不妨考虑购买付费文章来支持我们 🙂 :
付费文章