web-dev-qa-db-ja.com

Rinkeby:「交換取引が低価格」

しばらくの間正常に機能していたローカルのRinkebyノードを(WebSocketイベントを使用するために)実行していましたが、突然「返されたエラー:交換トランザクションが低価格」になりました。 平均ガス価格 の10倍を送信していますが、まだこのエラーが発生しています。これが私の計算です:

gwei = 1000000000
gas = 47000
gasPrice = gwei * 20

ガス価格を(gwei * 2000)に上げた場合にのみ、トランザクション(0.9エーテル)を行うことができます。これにより、私はすぐにエーテルを使い果たし、開発が非常に困難になります。

例tx:

{
  "nonce": "0x23",
  "chainId": 4,
  "to": "0xB92427792629A23E0b2deE37b3F92Ce4D4cB794c",
  "value": 0,
  "gas": "0xb798",
  "gasPrice": "0x4a817c800",
  "data": "0xce07c1787465737400000000000000000000000000000000000000000000000000000000"
}

どんな助けでも大いに感謝します!

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
9
M1Reeder

概要nonceフィールドを削除します

この回答は、 保留中のトランザクションを置き換える ではなく、新しいトランザクションを発行することを前提としています。

エラーはどういう意味ですか?

「返されたエラー:交換トランザクションの価格が安い」

エラーは次のことを意味します。

  1. イーサリアムクライアントのアカウントから保留中のトランザクションがあります
  2. 送信する新しいトランザクションには、保留中のトランザクションと同じナンスがあります
  3. 送信した新しいトランザクションのガス価格が小さすぎて、保留中のトランザクションを置き換えることができません

gethの場合、交換トランザクションのガス価格は、保留中のトランザクションのガス価格の1 10% より大きくなければなりません。*

既存の保留中のトランザクションを置き換えるのではなく、新しいトランザクションを発行したいとします。 nonceフィールドを削除することで、問題を解決できます。イーサリアムクライアントが自動的にナンスを管理します。

*この交換価格はプロトコルで指定されていません。異なるクライアント(そして最も重要なのはマイナー)は、異なる置換ルールを適用する場合があります。

ナンスフィールドを指定する必要があるもう1つの理由があります

その後、新しいトランザクションを発行するたびに1ずつインクリメントします。これは、イーサリアムクライアントに接続されている他のプロセスではうまく機能せず、それらを置き換えようとします。

9
carver