アルゴリズムとかオーダーとか

仕事で勉強したことなどをまとめてます

Hardhat IgnitionのThe next nonce for〜 エラーについて

Hardhatを触り始めていきなりつまづいたエラーだったので、解決策と発生の流れについて自分なりに調べたことをまとめておく。
Hardhatの挙動についてはまだまだ浅学なので内容の正しさについてはご注意を。

エラーの内容

コントラクトをデプロイするコマンド実行時に発生。

 npx hardhat ignition deploy ./ignition/modules/GLDToken.js --network sepolia

具体的に発生したエラーは以下。

Error in plugin hardhat-ignition: IGN405: The next nonce for 0x933d069ded97d130a1ff755d85bea2763f5eccbe should be 23, but is 24. Please make sure not to send transactions from 0x933d069ded97d130a1ff755d85bea2763f5eccbe while running this deployment and try again.

内容としては発行しようとしたtransactionのnonceがおかしいよ。というもの。

解決方法

一番手っ取り早い方法

ignition/deployments/chain-xxxx のディレクトリを削除する。xxxxにはデプロイ先のnetworkID(or chainID)。

delete dir

多分きれいな方法

ignition/deployments/chain-xxxx/journal.jsonl ファイルを削除もしくは別のところに移動する。

delete journal.jsonl

発生手順

1. sepoliaなどのlocal以外のネットワークにデプロイする。
1. デプロイ中にCTL+Cでデプロイを中断。(もしくはエラーが発生等)
1. デプロイするmoduleファイルのmodule名を書き換える。
1. 再度デプロイする

原因

以前のデプロイを中断したため、hardhatが内部で記録しているtx nonceの値と実際のブロックチェーン上のアカウントが持つnonceの値がずれてしまうことが原因。
そのため、hardhatが内部的に保持しているnonceの値をクリアすると解消される。
そのための方法が解決方法で提示したもの。

以下の公式ページにある通り、ignitionではデプロイステータスを管理している。解決方法ではこのデプロイステータスを管理しているファイルを削除して状態をリセットするための方法。
hardhat.org

デプロイ途中でCTL+Cで中断することはほとんどないので、このエラーはレアケースと思われる。
修正も簡単なのでおそらくそのうち対応されるはず。