メインコンテンツへスキップ
このガイドでは、コンピュータ上で動作するローカルInjectiveネットワークにcw20スマートコントラクトをデプロイする方法を説明します。 CosmWasmの仕様とコントラクトのコレクションからcw20-baseコントラクトを使用します。cw20-basecw20互換コントラクトの基本実装で、カスタムコントラクトにインポートして構築できます。cw20仕様とすべてのExtensionの完全な実装が含まれています。cw20-baseはそのままデプロイするか、他のコントラクトからインポートして使用できます。

前提条件

以下の手順に従ってGo、Rust、その他のCosmWasm依存関係をインストールしてください:
  1. Go
  2. Rust
開始前に、rustupと最新バージョンのrustcおよびcargoがインストールされていることを確認してください。現在、Rust v1.58.1以降でテストしています。 また、wasm32-unknown-unknownターゲットとcargo-generate Rustクレートもインストールする必要があります。 以下のコマンドでバージョンを確認できます:

injectived

injectivedがローカルにインストールされていることを確認してください。injectivedのインストールガイドに従ってinjectivedとその他の前提条件をローカルで実行できるようにしてください。 injectivedをインストールしたら、ローカルチェーンインスタンスを起動してください。

CosmWasmコントラクトのコンパイル

このステップでは、すべてのCW本番テンプレートコントラクトを取得し、CosmWasm Rust OptimizerのDockerイメージ(複数コントラクト用のworkspace-optimizer)を使用してコンパイルします。最新バージョンはこちら(x86)またはこちら(ARM)を確認してください。このプロセスには時間とCPUリソースが必要です。
ARM以外(非Apple Silicon)のデバイス:
Apple Siliconデバイス(M1、M2など)の場合:
Dockerスクリプトはリポジトリ内のすべてのCWコントラクトをビルドおよび最適化し、コンパイル済みコントラクトはartifactsディレクトリに配置されます。これでcw20_base.wasmコントラクト(ARMデバイスでコンパイルした場合はcw20_base-aarch64.wasm)をデプロイできます。

CosmWasmコントラクトのチェーンへのアップロード

出力:
次にtxhashでトランザクションをクエリして、コントラクトが正常にデプロイされたことを確認します。
出力:
出力を詳しく見ると、コントラクトのcode_idが1であることがわかります。 コントラクトコードはアップロードしましたが、まだインスタンス化する必要があります。

コントラクトのインスタンス化

コントラクトをインスタンス化する前に、CW-20コントラクトのinstantiate関数シグネチャを確認しましょう。
特に、トークン名、シンボル、デシマル、その他の詳細を含むInstantiateMsgパラメータに注目してください。
コントラクトのインスタンス化の最初のステップは、初期CW20トークン割り当てを受け取るアドレスを選択することです。この場合、キーがすでにセットアップされているgenesisアドレスを使用できますが、新しいアドレスとキーを生成しても構いません。
選択したアドレスのプライベートキーを持っていることを確認してください。そうでないと、そのアドレスからのトークン転送をテストできません。また、選択したアドレスはチェーン上の有効なアドレス(過去に資金を受け取ったことがある)である必要があり、コントラクト実行時のガス支払い用の残高が必要です。
genesisアドレスを確認するには:
出力:
code_id 1とJSONエンコードされた初期化引数(選択したアドレス付き)およびlabelを指定してCLIコマンドを実行し、コントラクトをインスタンス化します:
インスタンス化されたコントラクトのアドレスはhttp://localhost:10337/swagger/#/Query/ContractsByCodeで取得できます。 コントラクト情報のメタデータはhttp://localhost:10337/swagger/#/Query/ContractInfoまたはCLIクエリで取得できます。
出力:

コントラクトのクエリ

コントラクトの全状態は以下でクエリできます:
出力:
個々のユーザーのトークン残高は以下でクエリできます:
出力:

トークンの転送

残高転送が成功したことを確認します:
出力:
受信者が資金を受け取ったことを確認します:
出力:

テストネット開発

localtestnetの開発/デプロイの主な違いは以下の通りです:
  • Injective Testnet Faucetを使用してテストネット資金をアドレスに取得できます
  • Injective Testnet Explorerを使用してトランザクションをクエリし詳細を確認できます
  • injectived使用時にnodeフラグでテストネットRPCを指定する必要があります:--node=https://testnet.sentry.tm.injective.network:443
  • chainIdとしてinjective-1の代わりにinjective-888を使用します:--chain-id="injective-888"
  • Injective Testnet Explorerを使用して、アップロードされたスマートコントラクトのcodeIdの確認やインスタンス化されたスマートコントラクトの検索ができます
injectivedの使用方法とtestnetに対するクエリ/トランザクション送信については、injectivedの使用ガイドを参照してください。
最終更新日 2026年4月3日