Skip to main content

新しいトークンのデプロイ

このチュートリアルでは、独自のトークンを IC にデプロイし、Rosetta を接続する方法を順を追って説明します。

台帳のデプロイ

  1. 台帳イメージ、プライベート台帳インターフェース、パブリック台帳インターフェースがあることを確認します。それらがない場合は、台帳のローカルセットアップ の手順に従います。

  2. DFX の最新バージョンを使用していることを確認します。DFX がインストールされていない場合は、SDKのインストール の手順に従ってインストールを行います。

  3. プロジェクト内の dfx.json ファイルに、以下の Canisters に定義を追加します:

    {
    "canisters": {
    "custom-ledger": {
    "type": "custom",
    "wasm": "ledger.wasm",
    "candid": "ledger.private.did"
    }
    }
    }
  4. IC に台帳 Canister をデプロイします:

    # メインネットに台帳をデプロイする場合は変数を "ic "に変更します。
    export NETWORK=local

    # (環境)変数をトークンのミントとバーンが可能なアカウントに変更します。
    export MINT_ACC=$(dfx ledger account-id)

    # アーカイブ Canister を制御する Principal に(環境)変数を変更します。
    export ARCHIVE_CONTROLLER=$(dfx identity get-principal)

    export TOKEN_NAME="My Token"
    export TOKEN_SYMBOL=XMTK

    dfx deploy --network ${NETWORK} custom-ledger --argument '(record {
    name = "'${TOKEN_NAME}'";
    symbol = "'${TOKEN_SYMBOL}'";
    minting_account = "'${MINT_ACC}'";
    initial_values = vec {};
    send_whitelist = vec {};
    archive_options = opt record {
    trigger_threshold = 2000;
    num_blocks_to_archive = 1000;
    controller_id = principal "'${ARCHIVE_CONTROLLER}'";
    cycles_for_archive_creation = opt 10_000_000_000_000
    }
    })'

    それぞれの単語の説明です。

    • NETWORK は、台帳を配置するレプリカの URL または名前です (例: メインネットには ic を使用します)。

    • TOKEN_NAME は新しいトークンで可読性を高くした名前です。

    • TOKEN_SYMBOL は新しいトークンのシンボルです。

    • MINT_ACC はトークンのミントとバーンを担当する Principal のアカウントです ( ICP 台帳を参照してください)。

    • ARCHIVE_CONTROLLER はアーカイブ Canister の controller Principal です。

      メインネットにデプロイする場合:

    • 常に archive_options フィールドを設定してください。アーカイブを無効にすると、台帳の容量が Canister ひとつ分のメモリに制限されます。

    • 台帳 Canister に十分な Cycle があることを確認してください。Canister は必要に応じてアーカイブ Canister の新しいインスタンスを生成するために Cycle を必要とします。create_canister メッセージに付けられる正確な Cycle 数は、 cycles_for_archive_creation オプションで制御します。

  5. dfx.jsonファイルの Canister の定義を更新して、public Candid インターフェイスを使用するようにします:

     {
    "canisters": {
    "ledger": {
    "type": "custom",
    "wasm": "ledger.wasm",
    - "candid": "ledger.private.did"
    + "candid": "ledger.public.did"
    }
    }
    }
  6. 台帳 Canister が正常に動作していることを確認します。以下のコマンドを実行します:

    dfx canister --network ${NETWORK} call ledger symbol

    以下のような出力になるはずです:

    (record { symbol = "XMTK" })

新しいトークンがデプロイされ、すぐに使用できるようになりました。

Rosetta にコネクトする

Rosetta は、台帳 Canister に接続し、Rosetta API を公開するアプリケーションです。その主な目的は、取引所との統合を容易にすることです。Rosetta の詳細については、次のセクションで説明します。

それでは、Rosetta を既存の台帳 Canister に接続してみましょう。

  1. 台帳トークン・シンボルの取得します:

    dfx canister call <ledger_canister_id> symbol

    以下のような出力になるはずです:

    (record { symbol = <token_symbol> })
  2. rosetta-api を実行します:

    docker run \
    --interactive \
    --tty \
    --publish 8081:8080 \
    --rm \
    dfinity/rosetta-api:v1.3.0 \
    --canister-id <ledger_canister_id> \
    --ic-url <replica> \
    -t <token_symbol>

    出力には次の行が含まれるはずです:

    16:31:45.472550 INFO [main] ic_rosetta_api::rosetta_server - Starting Rosetta API server
    16:31:45.506905 INFO [main] ic_rosetta_api::ledger_client - You are all caught up to block <x>

    上記の <x> は、台帳ブロックチェーンの最後のブロックインデックスを表しています。

rosetta-api はあなたの台帳インスタンスに接続され、使用する準備ができました。Rosetta トークンの転送操作については、Transfers tokens の記事をお読みください。