メインコンテンツへスキップ
このガイドでは、Injective MainnetにCosmWasmスマートコントラクトをデプロイおよびインスタンス化するためのガバナンスプロセスについて説明します。

コードアップロードプロポーザルの提出

このセクションでは、スマートコントラクトコードプロポーザルの提出方法と投票方法を説明します。 Injectiveネットワーク参加者はスマートコントラクトのデプロイを提案し、ガバナンスで投票して承認できます。wasmdの認可設定はオンチェーンガバナンスによって管理されるため、コントラクトのデプロイは完全にガバナンスによって決定されます。 このため、ガバナンスプロポーザルがInjectiveメインネットにコントラクトをアップロードするための最初のステップとなります。 injectivedを使用してチェーンにコードをアップロードするガバナンスプロポーザルを開始する例:
injectived tx gov submit-proposal wasm-storeコマンドはWasmバイナリプロポーザルを提出します。ガバナンスで承認されるとコードがデプロイされます。 インスタンス化パーミッションを設定する2つの重要なフラグinstantiate-everybodyinstantiate-only-addressについて説明します。デフォルトでは、誰でもコントラクトをインスタンス化できます。

コントラクトのインスタンス化(ガバナンス不要)

ほとんどの場合、インスタンス化のために別のガバナンスプロポーザルを提出する必要はありません。injectived tx wasm instantiateで単にインスタンス化してください。ガバナンスプロポーザルが必要なのはコントラクトのアップロードのみです。 ただし、--instantiate-everybodyフラグがfalseに設定され、かつ--instantiate-only-addressフラグがガバナンスモジュールに設定されている場合を除きます。--instantiate-everybodyのデフォルト値はtrueであり、この場合injectived tx wasm instantiateでパーミッションレスにインスタンス化できます。
injectived tx wasm instantiateの例:

コントラクトのインスタンス化(ガバナンス経由)

前述の通り、メインネットでのコントラクトインスタンス化パーミッションはコードアップロード時に使用されたフラグに依存します。デフォルトではパーミッションレスに設定されており、genesisのwasmd Injectiveセットアップで確認できます:
ただし、--instantiate-everybodyフラグがfalseに設定されている場合、コントラクトのインスタンス化はガバナンスを経由して行う必要があります。
Injectiveテストネットは開発者が容易にコントラクトをデプロイできるよう、デフォルトでパーミッションレスです。

コントラクトインスタンス化プロポーザル

コントラクトマイグレーション

マイグレーションとは、既存のスマートコントラクトのコードを入れ替える、または「アップグレード」するプロセスです。 コントラクトをインスタンス化する際、オプションのadminフィールドを設定できます。空のまま残すとコントラクトは不変になります。adminを設定すると(外部アカウントまたはガバナンスコントラクト)、そのアカウントがマイグレーションを実行できるようになります。adminはadminロールの再割り当てや、コントラクトを完全に不変にすることもできます。ただし、旧コントラクトから新コントラクトへマイグレーションする際には、新コントラクトが以前の状態のエンコード方法を理解している必要があります。 マイグレーションの技術的な詳細については、CosmWasmマイグレーションドキュメントを参照してください。
最終更新日 2026年5月11日