Product

Hardhat v3 + MultiBaas: 実行に忠実な Ignition 同期モデル

今回の hardhat-multibaas-plugin のリリースでは、Hardhat v3 / Ignition の統合を、Ignition が実際に「何を実行するか」を基準に動作するよう見直しました。目的はシンプルです。MultiBaas はデプロイ結果に存在するものではなく、「Ignition が実行した内容」を正しく反映すべき、という考え方です。

Hardhat v3 は、v2 とは異なるモデルを採用しているため、既存のスクリプトは修正が必要になります。

また、プラグインのバージョニングも Hardhat に合わせ、v1 から v3 へとスキップしました。Hardhat v2 を使い続ける場合は、legacy/hardhat-v2 ブランチをご利用ください。

変更点

  • Ignition のデプロイフローに準拠したプラグイン挙動(プロンプト・リセット・UI を含む)

  • 実行内容ベースの MultiBaas 同期ロジック

  • チェーン ID ミスマッチを防ぐガード機構

  • 既存デプロイを同期可能にするオプトインモード

変更のメリット

Ignition のデプロイ結果には、過去の実行で作られたコントラクトが含まれることがあります。この結果をそのまま同期すると、MultiBaas の状態が Ignition の実際の判断とズレる可能性があります。具体的には以下のようなケースです:

  • ソースコードが変更されても、Ignition が再デプロイ不要と判断した場合

  • 複数の futures のうち一部だけ再実行された場合

  • 他のモジュールを更新しつつ、既存の安定したデプロイは維持したい場合

今回の変更により、デフォルトでは「今回の実行で Ignition が実行した futures のみ」を同期します。これにより、Ignition のリコンシリエーションロジックと整合性が保たれ、不要なコントラクトのバージョン更新を防げます。

新しいオプション

以下の mbConfig フラグが追加されました:

  • syncExisting: true にすると、今回実行されていなくても、Ignition のデプロイ結果に含まれるすべての登録済み futures を同期します。明示的なリコンシリエーションや一括同期に使用します。

  • requireChainIdMatch: true(デフォルト)にすると、Hardhat のネットワークのチェーン ID と MultiBaas 側のチェーン ID を比較し、不一致の場合は即座にエラーにします。

使用方法

MultiBaas に連携したい Hardhat Ignition の futures を、Ignition モジュール内で mb.link を使って登録します。プラグインは、今回の実行内容に基づいたルールでアップロードおよびリンク処理を行います。

設定例

mbConfig: {

 host: configVariable("MB_PLUGIN_HOST"),

 apiKey: configVariable("MB_PLUGIN_API_KEY"),

 allowUpdateAddress: ["development"],

 allowUpdateContract: ["development"],

 syncExisting: false,

 requireChainIdMatch: true

}

テスト

npm test

参考資料

MultiBaas ドキュメントおよび API: