メインコンテンツにスキップ

コントラクトをパブリッシュする

いよいよカウンターコントラクトをDevnetにデプロイします。難しくありません。コンパイルしてパブリッシュするだけで、PackageIDを取得すれば完了です。


前提条件


パブリッシュとは?

「パブリッシュ(publish)」とは、ローカルで書いたMoveコントラクトをSuiブロックチェーンに登録する操作です。パブリッシュすると:

  • コントラクトが Package としてチェーン上に保存される
  • PackageID という一意のアドレスが発行される
  • PackageIDを使ってパッケージをチェーン上で参照できるようになる。public 関数や entry 関数は誰でも呼び出せるが、各関数の引数・アクセス要件は引き続き適用される

ローカルのテストでは仮のコンテキストを使いましたが、パブリッシュ後は本物のトランザクションになります。


試してみよう

2つの方法から好きな方を選んでください。

Option A: Move Playground

ローカル環境不要。Playgroundに完成済みのカウンターコードが入っています。CompilePublish の順でクリックするだけでDevnetにデプロイできます。

CLIとの大きな違いは、ブラウザウォレットの承認ポップアップが表示される点です。CLIはローカルのキーストアで自動署名しますが、Playgroundはウォレットアプリが署名の確認を求めます。

ウォレットに接続しているアドレスに SUIテストトークンが必要です。まだ取得していない場合はこちらから入手してください。

手順:

  1. ページ右上の Connect Wallet からウォレットを接続する
  2. ウォレットでDevnetに切り替える(切り替え方法はこちら
  3. Compile ボタンをクリックしてビルドが成功するのを待つ
  4. Publish ボタンをクリックする(Compileが完了するまで無効です)
  5. ウォレットの承認ポップアップで確認する
  6. 完了後、PlaygroundにPackage IDが表示される
my_first_package
Move.toml
sources
my_first_package.move
Move.toml
README.md
Console
Build ready.
情報

Playgroundに表示された Package ID をメモしておきましょう(次のレッスンで使います)。


Option B: VSCode + CLI

Move.toml があるプロジェクトのルートディレクトリで以下のコマンドを実行します。

cd ~/sui-projects/my_first_package
sui client publish

コマンドを実行すると、CLIがローカルのキーストアにある有効なアドレスで自動的に署名し、トランザクションをDevnetに送信します。外部ウォレットへのポップアップは表示されません。

出力を読もう

成功すると、ターミナルに大量の出力が表示されます。すべてを読む必要はありません。重要な箇所だけ確認します。

Transaction Effects セクションに Status: Success と表示されていれば成功です。

出力の中の Object Changes セクションを探します。Published Objects という項目に PackageID が書いてあります。

╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Object Changes │
├──────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Created Objects: │
│ ┌── │
│ │ ObjectID: 0x38791b4f7e7e7dcd9816c0cfd80cc200e3498c33d6c5ea5b96e3e4c0f60e0a63 │
│ │ Sender: 0xabcd... │
│ │ Owner: Account Address ( 0xabcd... ) │
│ │ ObjectType: 0x2::package::UpgradeCap │
│ │ Version: 4 │
│ │ Digest: AbCdEfGhIjKl... │
│ └── │
│ Published Objects: │
│ ┌── │
│ │ PackageID: 0x1234abcd5678ef901234abcd5678ef901234abcd5678ef901234abcd5678ef90 │
│ │ Version: 1 │
│ │ Digest: AbCdEfGhIjKl... │
│ │ Modules: counter │
│ └── │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
情報

PackageID: 0x... の値をメモしておきましょう(次のレッスンで使います)。

Created Objects セクションに表示されている UpgradeCap は、コントラクトの将来のアップグレードを管理するオブジェクトです。

出力の先頭または末尾あたりには Transaction Digest も表示されます。Sui Explorerでの確認に使えます。


Sui Explorerで確認しよう

ブラウザで Sui Explorer (Devnet) を開き、PackageIDまたはトランザクションダイジェストを検索ボックスに貼り付けてください。

表示されたページで、パブリッシュが成功したことを確認できます。


エラーが出たら

InsufficientGas / No valid gas coins found for the transaction / ガス不足

テストトークンが不足しています。Faucetでテストトークンを取得してから再試行してください。

sui client gas

でSUIの残高を確認できます。

Unresolved dependencies / 依存関係エラー

Move.toml[environments] 設定が不足しています。L14を参照して、devnetのチェーンIDを追加してください。

Build failed / ビルドエラー

コントラクトのコードに問題があります。まず sui move build でビルドエラーを確認してから、再度パブリッシュを試みてください。


成功の確認

以下ができれば、このレッスンは完了です:

  • コントラクトをコンパイルしてパブリッシュできた(Playground または sui client publish
  • PackageID を取得した
  • Sui ExplorerでPackageを確認した

このレッスンでやったこと

  • カウンターコントラクトをDevnetにパブリッシュした(Playground または CLI)
  • PackageID を取得した
  • Sui ExplorerでデプロイされたPackageを確認した