5. オンチェーンへデプロイ(作業時間:約1分)

5.1 dfx でDapp をオンチェーンにデプロイする(ターミナル B )

Cycle を手に入れ、dfx が Cycle を転送するように設定されたので Hello Dapp をチェーン上にデプロイする準備ができています。

npm install
dfx deploy --network ic --with-cycles 1000000000000

--network オプションを使って Dapp をデプロイするためのネットワークエイリアスまたは URL を指定します。このオプションは Internet Computer のブロックチェーンメインネットにインストールするために必要です。--with-cycles は明示的に dfx に使用する Cycle を指定します。しない場合はデフォルトの3兆 Cycle が指定されます。

成功するとターミナルは以下のように出力されます:

Deploying all canisters.
Creating canisters...
Creating canister "hello"...
"hello" canister created on network "ic" with canister id: "5o6tz-saaaa-aaaaa-qaacq-cai"
Creating canister "hello_assets"...
"hello_assets" canister created on network "ic" with canister id: "5h5yf-eiaaa-aaaaa-qaada-cai"
Building canisters...
Building frontend...
Installing canisters...
Installing code for canister hello, with canister_id 5o6tz-saaaa-aaaaa-qaacq-cai
Installing code for canister hello_assets, with canister_id 5h5yf-eiaaa-aaaaa-qaada-cai
Authorizing our identity (default) to the asset canister...
Uploading assets to asset canister...
  /index.html 1/1 (472 bytes)
  /index.html (gzip) 1/1 (314 bytes)
  /index.js 1/1 (260215 bytes)
  /index.js (gzip) 1/1 (87776 bytes)
  /main.css 1/1 (484 bytes)
  /main.css (gzip) 1/1 (263 bytes)
  /sample-asset.txt 1/1 (24 bytes)
  /logo.png 1/1 (25397 bytes)
  /index.js.map 1/1 (842511 bytes)
  /index.js.map (gzip) 1/1 (228404 bytes)
  /index.js.LICENSE.txt 1/1 (499 bytes)
  /index.js.LICENSE.txt (gzip) 1/1 (285 bytes)
Deployed canisters.
URLs:
  Frontend:
    hello_assets: https://5h5yf-eiaaa-aaaaa-qaada-cai.ic0.app/
  Candid:
    hello: https://a4gq6-oaaaa-aaaab-qaa4q-cai.raw.ic0.app/?id=5o6tz-saaaa-aaaaa-qaacq-cai

メッセージの一番下に URL が返されており、ここからあなたの Canister のフロントエンドがオンチェーンにデプロイされていることを確認できます:https://5h5yf-eiaaa-aaaaa-qaada-cai.ic0.app/

上の例では、2つの Canister で構成される Hello という Dapp を作成しました:

  1. hello Canister 5o6tz-saaaa-aaa-qaacq-cai:バックエンドロジックを構成

  2. hello_assets Canister 5h5yf-eiaaa-aaa-qaada-cai:フロントエンドのアセット(例:HTML、JS、CSS )を構成

5.2 ブラウザを通じてオンチェーンで動作する自分の Dapp を見てみる

https://5h5yf-eiaaa-aaaaa-qaada-cai.ic0.app/ に移動し、名前を入力します。

Dapp がロードされる前に、ブラウザにはすぐに次のようなメッセージが表示されます:Installing "Internet Computer Validating Service Worker"。この service worker は IC から来たもので、ユーザーが見るウェブアプリが正しく、改ざんされていないフロントエンドであることを確認するために使用されます。一度読み込まれるとブラウザはサービスワーカーをキャッシュし、ウェブアプリはより速く読み込まれるようになります。

Hello

サービスワーカーをロードした後 Dapp がロードされます:

Hello

5.3 コマンドライン(ターミナル B )でオンチェーンの Dapp をテストする

Canister には、(パラメータとして文字列を受け取る)greet というメソッドがあるので 、dfx を介してメッセージを送ることができます。

dfx canister --network ic call hello greet '("everyone": text)'

メッセージの構成に注目してください:

  • dfx canister --network ic call は IC 上の Canister を呼び出すための設定です。

  • hello greethello という名前の Canister にメッセージを送信し、その Canister の greet メソッドを呼び出すことを意味します。 hello と Canister id のマッピングがローカルの .dfx/local/canister_ids.json に保存されているため、dfx は呼び出したい hello Canister が(IC 内のたくさんの Canister のうち)どれであるか分かります。

  • '("everyone": text)'greet に送るパラメータです(このパラメータは Text だけを入力として受け取ります)。

結論

これで Dapp をオンチェーンにデプロイできました! チュートリアルの最後まで読むことができました。

本題のチュートリアルに戻ります。 quickstart イントロダクション をご覧ください。

トラブルシューティング

403 エラー

403エラーが表示される場合使用している ID に十分な Cycle がない可能性があります。デバッグのために以下を試してみてください。

1. 利用していると思われる ID を確認する

dfx identity whoami

2. 使用している ID がオンチェーンに十分な Cycle を有していることを確認する

dfx wallet --network ic balance

3. ウォレット経由のプロキシを試す

時々、(特に 0.9.0 より前のバージョンの dfx で Canister を作成した場合)あなたのウォレットが Canister のコントローラーとして設定されていることがあります。ウォレットをデプロイ指示の送信元にするには、デプロイやコールコマンドに --wallet <insert-your-wallet-id-here> というフラグを追加してください。

これがうまくいって自分の Principal をCanister のコントローラーとして追加したい場合(そうすればもう --wallet オプションを使う必要はありません)次のように実行します:

dfx canister --wallet "$(dfx identity get-wallet)" update-settings --all --add-controller "$(dfx identity get-principal)"