Skip to main content

ICP 台帳

Internet Computer プロトコル(ICP)は、ユーティリティ・トークン(ティッカー “ICP")の管理を、台帳 Canister と呼ばれる特殊な Canister を使って行います。これは Internet Computer の特別なサブネット(NNS サブネット)上で他の Canister と一緒に動作する一つの Canister です。台帳 Canister は、アカウントトランザクションを保持するスマートコントラクトです。トランザクションは、アカウントに ICP トークンをミントするか、あるアカウントから別のアカウントに ICP トークンを送金するか、ICP トークンを Cycle に変換する等で存在を消す ICPトークンをバーンするかのいずれかです。台帳 Canister は、genesis 時のステート(初期のステート)から始まる全ての取引を追跡可能な履歴として維持しています。

このセクションの構成は以下の通りです:

  • このページでは、ICP と台帳の基本を紹介します。台帳 Canister の完全な公開インターフェースについてのより詳しい説明は、 references sectionThe Ledger canister をご覧ください。
  • ICP 台帳との連携 には、コマンドライン、JavaScript アプリケーション、 Canister から ICP 台帳を操作するための実践的なチュートリアルが用意されています。
  • 台帳のローカルセットアップ は、開発用にローカルレプリカに台帳 Canister をデプロイする手順を説明します。
  • 新しいトークンのデプロイ では、カスタム台帳 Canister をデプロイして独自のトークンを作成し、それを Rosetta API を介して取引所で利用できるようにする方法を説明しています。

基礎

アカウント

アカウントは、Internet Computer(IC)Principal を保持しているアカウント所有者に属し、その所有者によって管理されます。2人以上の IC Principal によってアカウントが所有されることはありません(ジョイントアカウントはないということ)。しかし、Principal は Canister と同様に外部ユーザーを参照することができるため、ジョイントアカウントは Canister として実装することができます。

アカウント所有者は、複数のアカウントを管理することができます。この場合、各アカウントはペア (account_owner, sub_account) に対応します。サブアカウントはオプションのビット文字列で、同じ所有者の異なるサブアカウントを区別するのに役立ちます。

台帳上のアカウントはアドレスで識別され、そのアドレスは Principal ID とサブアカウント識別子から導かれます。

この文脈では、Principal ID は、ビットコインやイーサリアムのユーザーの公開鍵のハッシュと大まかに等しいと考えることができます。ユーザーは対応する秘密鍵を使ってメッセージに署名し、その結果、台帳 Canister を認証して Principal のアカウントで操作することになります。Canister は、台帳 Canister にアカウントを持つこともでき、その場合のアドレスは Canister の Principal に由来します。

台帳 Canister は、Internet Computer 内部の管理操作を使用して初期化されます。初期化プロセスの一部として、アカウントと関連する ICP トークン残高のセットで Canister が作成されます。

なぜ台帳は Principal ID だけでなく、Account ID を使用するのですか?

アカウント導入の主な理由は、Principal が複数のアカウントを制御できるようにするためです。ユーザーはウォレットソフトウェアを利用することで複数アカウントの制御を行うことができますが、Canister は同様のことを行うことができません。

トランザクションタイプ

台帳 Canister の内部ステートを変更する操作には、次の3つがあります:

  • ICP トークンのアカウントでのミント

  • ICP トークンのアカウント間の送金

  • ICP トークンのバーン

すべての操作は、台帳 Canister にトランザクションとして記録されます。

台帳は、ハッシュ化されたブロックチェーン、すなわち Canister スマートコントラクト(台帳 Canister)の内部で稼働するブロックチェーンとして取引を管理し、それが NNS サブネットブロックチェーン上で稼働しています。

ステートの変化が記録されると、それぞれの新しいトランザクションがブロックに配置され、一意のインデックスが割り当てられます。チェーン全体は、最新の(ブロック)チェーンのリンクに署名することで定期的に認証されます。チェーンを認証するために使用される署名は、Internet Computer のルート公開鍵にアクセスできる任意の第三者によって検証することができます。特定の取引は、台帳を照会することで取得することができます。

ICP ユーティリティ・トークンの基本プロパティ

ICP トークンはビットコインなどの分散型ネットワークを司るユーティリティ・トークンに似ていますが、重要な点で異なるところもあります。

ICP トークンは、以下の点でビットコインと類似しています:

  • 各 ICP トークンは小数点第8位まで単位を持ちます。

  • すべての取引は、genesis の初期状態から始まる台帳に保存されます。

  • トークンは完全にファンジブルです。

  • アカウント識別子は 32バイトで、公開鍵のハッシュとほぼ等しく、オプションで追加のサブアカウント指定子もあります。

ICP トークンはビットコインと以下の点で異なります:

  • ステークされた参加者ノードは、Proof of Work を使うのではなく、閾値 BLS 署名の一種を使い、チェーンの有効なステートに合意します。

  • どんなトランザクションも 8バイトの memo を保管できます。この memo フィールドは Rosetta API によってトランザクションを区別するための nonce を格納するために使用されますが、このフィールドの他の用途も可能です。