林克比:"替代交易被低估"

M1R*_*der 8 ethereum web3js

我一直在运行一个本地的Rinkeby节点(为了使用websocket事件),这个节点工作正常一段时间,但突然间我得到了"返回错误:替换事务价格过低".我发送的平均汽油价格是10倍,我仍然收到这个错误.这是我的计算:

gwei = 1000000000
gas = 47000
gasPrice = gwei * 20
Run Code Online (Sandbox Code Playgroud)

只有当我将汽油价格提高到(gwei*2000)时才能进行交易(0.9以太).这导致我很快耗尽以太,使开发变得非常困难.

示例tx:

{
  "nonce": "0x23",
  "chainId": 4,
  "to": "0xB92427792629A23E0b2deE37b3F92Ce4D4cB794c",
  "value": 0,
  "gas": "0xb798",
  "gasPrice": "0x4a817c800",
  "data": "0xce07c1787465737400000000000000000000000000000000000000000000000000000000"
}
Run Code Online (Sandbox Code Playgroud)

任何帮助都很受欢迎!

Geth Rinkeby Cmd:

geth --rpccorsdomain="*" --rinkeby --ws --wsport=8546 --wsorigins="*" --datadir=$HOME/.rinkeby --cache=512 --rpc --rpcapi="personal,eth,network,net,web3,db"  --rpcport=8545 --fast --bootnodes=enode://a24ac7c5484ef4ed0c5eb2d36620ba4e4aa13b8c84684e1b4aab0cebea2ae45cb4d375b77eab56516d34bfbd3c1a833fc51296ff084b770b94fb9028c4d25ccf@52.169.42.101:30303
Run Code Online (Sandbox Code Playgroud)

car*_*ver 9

摘要:删除该nonce字段

此答案假定您要发布新事务,而不是替换待处理事务.

错误是什么意思?

"退回错误:替代交易低估"

错误意味着:

  1. 您的以太坊客户端中的帐户中有待处理的待处理交易
  2. 您发送的新事务与该待处理事务具有相同的nonce
  3. 您发送的新交易的天然气价格太小,无法替换待处理的交易

因此geth,更换交易的天然气价格必须高于待处理交易的天然气价格的110 %.*

我假设您要发布一个新事务,而不是替换现有的待处理事务.您可以通过删除nonce字段来解决问题.您的以太坊客户端将自动为您管理现时.

*协议中未指定此替换价格.不同的客户(最重要的是矿工)可能会应用不同的替换规则.

我有另一个原因,我需要指定nonce字段

然后每次发出新事务时将其递增1.这与连接到您的以太坊客户端的其他进程无法很好地兼容,并尝试替换它们.

  • @carver WRT“您可以通过删除随机数字段来解决问题。您的以太坊客户端将自动为您管理随机数。” — 您能指出 Geth 项目中处理此问题的哪一行代码吗?我想了解更多相关信息。谢谢。 (2认同)