※この記事は Overview of ICP の内容を引用しています
概要
---
インターネット コンピュータ プロトコル (ICP) は、しきい値暗号化、ステート マシン複製、および新しいコンセンサス アルゴリズムに基づくブロックチェーンです。
分散実行のセキュリティを維持しながら、スマート コントラクトにネイティブに近いパフォーマンスとスケーラビリティを提供するように慎重に設計されました。台帳や取引所などの従来の DeFi スマート コントラクトに加えて、ICP は、画像分類などの計算とストレージを多用するアプリケーションを完全にオンチェーンで実行できます。
ICP のもう 1 つの重要な設計面は、既存のエコシステムとのシームレスで安全な統合です。ICP 上のスマート コントラクトは Web アセットをホストし、ユーザーからの HTTP リクエストに対応できるため、Web3 の約束を果たします。また、安全な HTTP リクエストを介して、他のブロックチェーンの RPC ノードや Web2 サーバーと対話することもできます。これらの機能としきい値署名を組み合わせることで、スマート コントラクトは Bitcoin や Ethereum などの他のブロックチェーン上でアセットを保持し、トランザクションを実行できるようになります。
これらの機能がどのように実現されるかについては、以下をお読みください。
---
ブロックチェーンは、単一のノードと同じ速度で実行でき、同じ量のリソースしか提供できません。この制限を克服するための鍵の 1 つは、シャーディングです。ICP は、スマート コントラクトをブロックチェーンの複数のインスタンスにシャーディングします。各インスタンスはサブネットと呼ばれ、独自の分散ノード セットを持ち、それらの間でコンセンサス アルゴリズムを実行し、独自のブロック チェーンを構築し、スマート コントラクトを実行します。各サブネットは、他のサブネットと並行して実行されます。1 つのサブネット上のスマート コントラクトは、メッセージを送信することで、別のサブネット上の別のスマート コントラクトと通信できます。ユーザーもスマート コントラクトにメッセージを送信できます。次の図は、ICP 上のメッセージの流れを示しています。
メッセージは境界ノード (RPC ノード) の 1 つに送信されます。
境界ノードは、ターゲットのスマート コントラクトをホストするサブネットにメッセージをルーティングします。
そのサブネットのコンセンサス アルゴリズムは、メッセージをサブネットのブロックチェーン内の新しいブロックに追加します。
メッセージは、ターゲットのスマート コントラクトの入力キューに追加されます。
スマート コントラクトはメッセージを実行します。
ステップ 3 ~ 5 は非同期であり、互いに分離されていることに注意してください。これは、ブロックに追加されるときに実行される Ethereum スタイルのアトミック トランザクションに慣れている開発者にとっては珍しいことかもしれません。この設計の目的は、スケーラビリティです。
サブネットにはさまざまなサイズ (つまりレプリケーション係数) があり、これによってそのサブネット上でスマート コントラクトを実行するコストが決まります。また、ファイナリティとセキュリティまでの時間にも影響します。
しきい値署名
---
各 ICP サブネットには固定の公開鍵があります。対応する秘密鍵は単一のノードに保存されず、どのノードでも使用できません。代わりに、複数の秘密共有に分割され、しきい値暗号化を使用してすべてのノードに配布されます。ノードは、これらの秘密共有を使用して、ユーザーや他のサブネットへのメッセージにまとめて署名できます。これにより、ユーザーは、ブロックチェーンのブロックをダウンロードして検証することなく、固定の公開鍵に対してデジタル署名を検証するだけでよいため、状態と結果の検証が簡単になります。
この機能には大きな意味と使用例があります。
ブロックチェーン内のブロックを永久に利用可能にしておく必要はありません。これはスケーラビリティのボトルネックになります。実際、ICP は古いブロックを積極的にガベージ コレクションして、ストレージ使用量を制限します。
スマート コントラクトは独自の秘密鍵を持つことができ、ビットコインやイーサリアムなどの他のブロックチェーンのトランザクションに署名できます。これにより、それらのブロックチェーンとの信頼のないやり取りが可能になります。
※この機能は、ICP ではチェーンキー暗号化と呼ばれます。
スマートコントラクト
---
ICP は、スマート コントラクトを実行するための仮想マシンとしてWebAssemblyを使用します。つまり、開発者は JavaScript、TypeScript、Rust、Python、ICP 専用に設計された Motoko などの一般的なプログラミング言語でスマート コントラクトを記述できます。
さらに、ICP 上の単一のスマート コントラクトは、Ethereum 仮想マシン (EVM) 全体をホストできるほど強力です。これにより、Solidity で記述された EVM スマート コントラクトを展開できます。
ICP のユニークな特徴は、スマート コントラクトが HTTP リクエストを処理し、HTML、JS、CSS などの Web アセットを提供できることです。つまり、バックエンドとフロントエンドの両方が完全にオンチェーンでホストされる Web3 アプリケーションを作成できます。スマート コントラクトは、ICP 外部の他の Web2 サービスにリクエストを行うこともできます。
Ethereum 開発者は、スマート コントラクトがアトミック トランザクション内で順次実行されるという概念に慣れているかもしれません。ICP はスケーラビリティを採用し、スマート コントラクトを並列で実行します。その点では、スマート コントラクトは従来のプログラミングのプロセスやマイクロサービスに似ています。スマート コントラクトは完全に自律的であり、ユーザーのメッセージ送信に依存せずにタイマーを使用して実行をスケジュールできます。
ストレージに関しては、スマート コントラクトは WebAssembly メモリに任意のデータを保存できます。さらに、スマート コントラクトはより大きな安定メモリを使用できます。アップグレード可能なスマート コントラクトでは、2 つのメモリの違いが重要です。WebAssembly メモリはアップグレード時にクリアされますが、安定メモリは保持されます (「安定」という名前が付けられているのはこのためです)。不変のスマート コントラクトの場合、サイズとアクセスする関数を除いて、2 つのメモリの間に目に見える違いはありません。
※ICP のコンテキストでは、スマート コントラクトはキャニスターと呼ばれます。
アカウントとキー
---
ICP は、ユーザーの公開キーをハッシュしてユーザー アカウントのアドレスを導出します。
アドレスのテキスト エンコーディングには、次のようなチェックサムが含まれます。
mh4eq-xsi7l-lgz7s-gmxoh-stiey-277n4-lev4o-q6hah-22sk6-ahlhm-qae
ICP は複数の種類のキー (ECDSA、Ed25519、BLS) をサポートしています。開発者ツールは通常、PEM 形式でキーを生成し、受け入れます。
スマート コントラクトは、ユーザー アカウントをサービスとして提供できます。インターネット アイデンティティは、Web2 ユーザーがユーザー認証を利用してユーザーをアイデンティティにマッピングし、依存当事者に委任を提供するブロックチェーン アカウントを持つことを可能にするスマート コントラクトの例です。
ハードウェアウォレットやブラウザ拡張ウォレットも使用できます。
※ICP のコンテキストでは、アドレスはプリンシパルと呼ばれます。
---
ICP のアカウントには残高が組み込まれていません。これは、Ethereum などの他のチェーンと比較した場合の大きな設計上の違いです。すべてのトークンはスマート コントラクトによって実装されます。ICP には、ERC-20 標準に相当するICRC-2があります。スマート コントラクトが ICRC-2 を実装する場合、代替可能なトークンが実装され、そのための元帳があります。
---
ICP のプログラミング モデルは、トランザクションではなくメッセージを送信することで呼び出しが行われる アクターモデル に似ています。トランザクションとメッセージの違いは、スマート コントラクトが他のスマート コントラクトを呼び出すときにのみ明らかになります。トランザクションは、呼び出しのいずれかが失敗した場合にすべての状態変更をロールバックするという意味でアトミックです。メッセージには、呼び出し間でのこのようなアトミック性の保証はありません。ICP でのプログラミングは、Ethereum と比較して非同期です。スマート コントラクトが呼び出しを行わない場合、メッセージはトランザクションとまったく同じように動作します。
---
イーサリアムなどの他のブロックチェーンでは、ユーザーは現在のガス価格に応じて、トランザクションの送信と実行に対して変動料金を支払います。Web3 アプリケーションを閲覧するユーザーのエクスペリエンスを簡素化するために、ICP は「リバース ガス モデル」を採用しています。このモデルでは、キャニスターは消費したリソースに対してサイクルを燃焼することで支払います。これはイーサリアムのガスに似ていますが、法定通貨のグループと相関する固定価格になっています。
---
ICP は、Network Nervous System (NNS) と呼ばれる分散型自律組織 (DAO) コミュニティによって管理されています。これは、ICP 自体で実行される一連のスマート コントラクトとして実装されています。コミュニティ メンバーは、ICP トークンをステーキングし、提案に投票することでガバナンスに参加できます。ノードのアップグレードなど、ICP に対するすべての運用上の変更は投票で処理されます。NNS は、投票を通過した提案を自動的に実行します。これにより、ノードが同じバージョンのプロトコルを実行するようになり、ハード フォークが回避されます。
※ガバナンスとノードの所有権は分離されています。ノードを持たずにガバナンスに参加することも可能ですし、その逆も可能です。
---
ICP のノード プロバイダーになるには、DAO コミュニティからの投票が必要です。これには 2 つの理由があります。
これにより、ハードウェアが ICP の高い基準 (64 個の CPU コア、512 GiB の RAM、30 TB の NVMe SSD) を満たすことが保証されます。このようなノードは高いスループットを維持し、強力な Web3 アプリケーションを実現できます。
これにより、ノード プロバイダーの ID がコミュニティに知られるようになります。ノード プロバイダーは善意の宣言に署名しており、ノードが不正行為を行った場合に責任を負う可能性があります。これにより、シビル攻撃の実行が困難になり、ナカモト係数を高く保ちながらノードの数を減らすことができます。ノードは、オペレーター、地理、管轄権の観点から分散化が最大化されるようにサブネットに割り当てられます。これは、決定論的分散化と呼ばれます。
現在、サブネットには 13 ~ 40 個のノードが含まれており、そのほとんどは地理的に分散されています。ただし、ローカル規制に準拠する必要があるアプリケーションをサポートするために、ローカライズされたサブネットが存在する場合もあります。
Ethereumとの簡単な比較
イーサリアム | ICP | |
仮想マシン | EVM | Webアセンブリ |
オンチェーンWeb3 | - | はい |
ブリッジレスビットコイン | - | はい |
スマートコントラクトはメッセージに署名できる | - | はい |
スマートコントラクトからWeb2へのHTTP呼び出し | - | はい |
言語 | Solidity、Vyper、ユル | JS、Python、Rust、Solidity、Motokoなど |
プログラミングモデル | アトミックトランザクション | 非同期メッセージパッシング |
アップグレード性 | 不変 | アップグレード可能か不変か |
ガスモデル | ユーザーが支払う | スマートコントラクトによる支払い |
ガソリン価格 | 変数 | 修理済み |
計算 | ブロックあたり数百万の命令(3000万ガス制限に基づく) | ブロックあたり 20 億命令 (サブネットあたり) |
最終性 | 約15分 | 約1.4秒 |
平均送信/メッセージ手数料 | 約1ドル | 約$0.000001 |
スタックサイズ | 32KB (256ビット値のうち1024個) | 5MB |
コードサイズ | 24KB(コード共有によりさらに増加) | 10MB |
メモリー容量 | 数KB | 404GiB (4GiB Wasm メモリ + 400GiB の安定メモリ) |
保管コスト | 1 GiB あたり 1,800 万ドル (KB あたり 640K ガスに基づく) | 1 GiB あたり年間 5 ドル |
ノード数 | 約7K | 合計約 500、サブネットあたり 13 ~ 40 |
Comments