Internet Computer 上の NNS Front-End DappとICP Walletを使い始めよう(日本語訳)

tokuryoo
DfinityJP
Published in
23 min readJan 5, 2022

Medium の DFINITY 公式の記事 Get Started Using the NNS Front-End Dapp and ICP Wallet on the Internet Computer(2021/5/11) の日本語訳です。

NNSのフロントエンドDappでは、ICPトークンの管理、ニューロンへのステークによるガバナンスへの参加と報酬の獲得、サイクルの作成が可能です。

Internet Computer は、世界初のウェブスピード、インターネットスケールのパブリックブロックチェーンで、スマートコントラクトによりインタラクティブなウェブコンテンツをエンドユーザーのブラウザに直接セキュアに提供することを可能にします。グローバルインターネットの機能を拡張し、容量の制限なくスマートコントラクトをホストできるようにし、世界中の開発者や起業家に力を与えるグローバルコンピュータに転換させるものです。Internet Computerブロックチェーンの主な特徴は、ネットワークを統括するオープンなアルゴリズムによるガバナンスシステムであるNetwork Nervous System(NNS)と、DeFi と Dapps、オープンインターネットサービス、ハイパースケールで運用可能なエンタープライズシステムの構築を可能にするトークンエコノミクスです。

NNSの目的は、Internet Computer ネットワークを、オープンで分散化されたセキュアな方法で統治できるようにすることであり、ネットワークのあらゆる側面を完全に制御することです。

例えば、ネットワークをホストするノードマシンが使用するプロトコルやソフトウェアのアップグレード、ネットワーク容量を増やすための新しいサブネットの作成、負荷を分散するためのサブネットの分割、計算能力に対してユーザーが支払うべき金額を制御するエコノミクスパラメータの設定、極端な状況での悪意あるアクターからのネットワーク保護、その他多くの機能を実現することが可能です。NNSの詳細な概要については、“Understanding the Internet Computer’s Network Nervous System, Neurons, and ICP Utility Tokens.” を参照してください。

以下は、NNSのフロントエンドDapp を使い始めるための簡単なガイドとその主要な機能です。このアプリは、現在、4つの主要な分野で機能を提供しています。

  • ICPトークン管理(”ウォレット “です)
  • ICPを “投票ニューロン “の中でステーキングすることで、報酬を得る
  • NNSに提出されたプロポーザルへの投票
  • キャニスタースマートコントラクトと “サイクル “の作成

これらの各セクションについて説明し、ユーザーがNNSのフロントエンドDappを利用する際に考慮すべき事の詳細を提示します。

注: NNS dappにログインするためには、Internet Identity が必要です。Internet Identity(またはII、アイアイと発音)をお持ちでない場合は、まず Internet Identity を作成する必要があります。(1分程度で終わります。”How to use Internet Identity” を参照してください)。Internet Identityは、YubiKey や MacBookノートPCの指紋センサー などのデバイスを使って、Dappへのサインインと認証を可能にする、高度な暗号技術をベースにした画期的なブロックチェーンの新しい認証方式です。IIを利用して2つの異なるDappにサインインすると、Dappsには異なるハンドルネームが表示されるため、匿名性が保たれ、利用するDappをまたいだ追跡を防ぐことができます。

ICP ユーティリティトークン

上記のインターフェイスは、ユーザーのプライマリ ICP ウォレットの例です。ユーザーはこのインターフェイスを使って、アカウントやサブアカウントを作成したり、ICPの送受信のような基本的な取引を行えます。個々のアカウントアドレスは、プリンシパルIDから派生しますが、プリンシパルIDとは異なるものです。将来、ICPトランザクションを認可するための特別なハードウェアウォレットの使用も、サポートされるでしょう。

ユーザ

ICPは、ネットワーク上で3つの重要な役割を果たすネイティブユーティリティトークンです。

  1. ネットワークガバナンスの促進
    ICP can be locked to create neurons that participate in network governance by voting, through which they can earn economic rewards. ICPをロックすることで、投票によってネットワークガバナンスに参加するニューロンを作り、それにより経済的報酬を得ることができます。
  2. 計算用サイクルの生産
    ICP provides a source store of value that can be converted into “cycles,” which power computation and are burned when it is used. The NNS converts ICP to cycles at a variable rate to ensure that users of the network can always create new cycles at an approximately constant cost in real terms, such that the cost of acquiring cycles is predictable. ICPは ”サイクル” に変換できる価値の源泉であり、このサイクルは計算の動力源となり、使用時に燃焼(burn)されます。NNSでは、ICPを可変レートでサイクルに変換し、ネットワーク利用者が実質的にほぼ一定のコストで新しいサイクルをいつでも作成できるようにすることで、サイクルの取得コストを予測可能にしています。
  3. 参加者への報酬
    The network mints new ICP to reward and incentivize those who are playing important roles that enable the network to function, including: a) the provision of “voting rewards” to those participating in governance, and b) the provision of “node provider rewards” to those operating the node machines hosting the network.ネットワークが機能するための重要な役割を担っている人々への報酬やインセンティブとして、ネットワークは新しいICPを発行します。a) ガバナンスに参加している人々への ”投票報酬” の提供、b) ネットワークをホストするノードマシンを運用している人々への ”ノードプロバイダー報酬” の提供

ICPの転送

アカウントアドレスを使用して、この記事のアカウントセクションで後述する手順を踏むだけで、大多数のユーザーは取引所またはウォレットからNNS dappにICPを転送できるようになります。Keysmithでセルフカストディを選択し、DFINITY Canister SDK 経由でICPを転送することを目指すユーザーは、Integration with the DFINITY Canister SDK で詳細を読むことをお勧めします。エアギャップした(インターネットに接続してない)コンピュータを使用している場合は、署名送信を分離するオプションを検討してください。

Accounts アカウント

アカウントは、アカウントアドレスで識別されます。また、ユーザーは親アカウントからサブアカウントを派生できます。

取引(トランザクション)

NNS dapp の ICP セクションで、ユーザーは他のアカウントに ICP を送るよう手配することができます。各取引は数秒しかかからず、完全なコンセンサスを得ることができます。(注:ICP を送るには、少額の取引手数料が必要です。この金額は、送信元アカウントの残高から差し引かれます)。

取引を受けるには、あなたへの取引を希望する人にあなたのアドレスの1つを知らせるだけです。

最後に、アカウントから直接ニューロンをステークすることも可能です。この場合、指定されたICPでニューロンが作成されます(現在、ニューロンをステークするための最小のICP量は1ICPです)。この場合も、少額の手数料が発生します。

ニューロン

上記のインターフェイスにより、ユーザーはネットワークガバナンスに参加するためにニューロンを作成・管理し、オープンなインターネットのスチュワードシップ(財産管理の職務)において能動的な役割を果たすことができるようになります。ユーザーは、指定された期間、自分のICPを ”ロックアップ” することでニューロンを作成し、ICPの報酬と引き換えに提案に投票することでガバナンスに関与できるようになります。

属性

ここでは、ユーザーがニューロンを設定する際に関わると予想される一般的な属性を下記に一覧として示します。

  • Identity
    ニューロンオブジェクトの一般的な ID。ニューロンが他のニューロンを追従するよう設定されている時、この値が使用されます。これは、ニューロン生成時に選ばれるランダムな値です。
  • Account
    ロックされたICPの残高が存在する台帳のアカウントです。
  • CreatedAt
    いつニューロンが作られたか。
  • Maturity 成熟度
    ニューロンの成熟度により、新しいニューロンを生成する能力と、それに対応する新しく発行されたICPのロックされた残高が決定します。新しいニューロンが作られたとき、その成熟度は0です。ニューロンが投票すると、時間の経過とともにNNSがその成熟度を上げ、報酬を与えます。
  • Recent Votes (public)
    最近の投票履歴が管理されています。これは、あるニューロンをフォローするかどうか、あるいはそのフォロイーがどのように投票しているかを評価したい人のためのガイドを提供できます。
  • Age (seconds) 年齢(秒)
    ニューロンを作られてから、または最後にディゾルブを停止してから経過した期間。概念的には、ニューロンがディゾルブし始めるといつでも、その年齢はゼロにリセットされ、ディゾルブしている間はゼロのままです。ディゾルブニューロンのディゾルブ状態がオフになっている場合、現在時刻は 年齢を計算するための有効なニューロン作成時刻になります。
  • State (LOCKED or DISSOLVING or DISSOLVED)
    ディゾルブ状態と現在時刻から計算されます。
  • LOCKED:
    この状態では、ニューロンは特定の DissolveDelay でロックされています。時間の経過とともに 年齢を重ね、DissolveDelayが6ヶ月以上あれば投票できるようになります。
  • DISSOLVING:
    この状態では、ニューロンの有効な dissolve delay は時間の経過とともに減少します。ディゾルブ中は、ニューロンの年齢がゼロとみなされます。最終的には DISSOLVED 状態になります。
  • DISSOLVED:
    ディゾルブ状態では、disburseメソッドを使用してニューロンのステークを払い出すことができます。 dissolve delay はゼロとみなされるため、投票することはできません。

コマンド

ユーザーは、Neuron の操作方法をよりよく理解するために、以下のコマンドを習熟する必要があります。

  • Start Unlock
    dissolve delay は、一方向にしか回せないキッチンタイマーのようなものです。任意に増やすこともできますが、減らすにはディゾルブモードをオンにしてカウントダウンするしかありません。ニューロンは、”dissolving “ を開始するように指示できます。ニューロンがディゾルブしているとき、そのディゾルブディレイは時間の経過とともに減少し、停止するかゼロになるまで減少します。dissolve delay が6ヶ月以下になると、ニューロンは投票できなくなります(投票による報酬も得られません)。ディゾルブディレイがゼロになると、ディゾルブディレイの減少が止まり、制御しているプリンシパル はニューロンに対して disburse を指示できます。
  • Stop Dissolving
    ディゾルブ中のニューロンに対して、停止を指示することができ、その場合、dissolve delay は時間とともに減少しなくなります。
  • Disburse
    ニューロンの dissolve delay が0になると、制御しているプリンシパルはニューロンのステークを disburse するよう指示することができます。ロックされていたICPの残高が指定された新しい台帳アカウントに移され、ニューロンと自身の台帳アカウントが消滅します。
  • Increase Dissolve Delay
    ニューロンの dissolve delay は、最大で8年まで増加させることができます。
  • Spawn
    ニューロンの成熟度が閾値以上になると、新しいニューロンを生成するよう指示できます。これにより、台帳に新たなICPの残高をロックする新しいニューロンを作成します。新しいニューロンは、親と同じ principal に制御され続けることも、新しい principal に割り当てられることも可能です。ニューロンが新しいニューロンを生成すると、その成熟度はゼロになります。

Dissolve Delays

dissolve delay に関する注意点

ユーザーが最も恩恵を受けるのは、自分のニューロンが可能な限り最大値に達したときです。ロックされたニューロンを考えるとき、その瞬間は常に 未来の ”dissolve delay days” であり、ニューロンの disosolve が日ごとに近づいてきます。一方、ニューロンの所有者が遠い将来のネットワークの価値を最大化するために長期的な視野で投票することが、ネットワークの長期的な成功に最も貢献することになります。このような理由から、NNSでは、最長8年まで設定可能である dissolve 期間を長くすればするほど、ニューロンへの報酬がより大きくなるように、ニューロンオーナーにインセンティブを与えています。

また、ニューロンによる投票は、その所有者が長期的な視点を持っているほど意思決定に役立つため、NNSは dissolve delay が大きいほどニューロンからの投票を重く見ており、dissolve delay が6カ月未満のニューロンは全く投票できません。もちろん、もしロックされた残高を譲渡することができれば、たとえロックされていない残高よりも割り引く必要があっても、ニューロンの所有者はいつでも ”自分のニューロンを売る” ことができるため、この仕組みはネットワークにとってあまりメリットはないでしょう。

投票

上記のインターフェースは、ユーザーがニューロンを設定・構成したり、NNSに提出されたプロポーザルに投票したりするものです。

NNSのdappを使用して、以下のアクションを開始できます。

  • 投票
    指定されたIDのプロポーザルを採択するか否決するかの投票をニューロンに行わせます。
  • フォロー
    多数決に従うフォロイーニューロンのグループを指定することで、特定のトピックに属するプロポーザルに自動的に投票できるルールを追加します。そのようなフォロールールの設定を、以下のように利用できます。
    a) 複数のエンティティ間で投票権の制御を分散します。
    b) 新しく提出されたプロポーザルを評価する時間がない場合、ニューロンに自動的に投票させます。
    c) 新しく提出されたプロポーザルを評価する専門知識がない場合、ニューロンに自動的に投票させます。

フォロールールでは、フォロイーの集合を指定します。指定されたトピックに属するプロポーザルについて、フォロイーの多数が採用または拒否の投票を行うと、ニューロンも同じように投票します。もし、大多数のフォロイーが採用することが不可能になった場合(例えば、採用するかしないかで半々になった場合)、ニューロンは拒否に投票します。プロポーザルのトピックが null であるルールを指定した場合、そのルールはキャッチオール・フォロー・ルールとなり、特定のルールが指定されていないトピックに属するプロポーザルに自動的に投票されます。フォロイーのリストが空の場合、フォロールールは事実上削除されます。

フォロワーの設定

ニューロンは、トピックごとに他のニューロンをフォローすることで、自動的に投票するように設定することができます。任意のトピックについて、フォロイーのリストを指定し、そのトピックに属するタイプのプロポーザルについて、フォロイーの過半数の投票に従うようにすることができます。nullトピックが指定された場合は、キャッチオールとして機能し、ルールが指定されていないフォロイーの投票にニューロンが従うことを可能にします。

プロポーザル

NNSに提出される各プロポーザルには、以下の項目があります。

  • ID: プロポーザルのID。NNSは、受信した各プロポーザルに固有のIDを付与します。
  • Summary: プロポーザルの内容を簡潔に説明するためのテキストで、最大280バイトで構成されます。
  • URL: プロポーザルの評価に必要な追加コンテンツのウェブアドレスを、HTTPSで指定します。例えば、新しいデータセンターへのDCID(データセンターID)の割り当てをサポートするコンテンツが記載されます。
  • Proposer: プロポーザルを提出したニューロンのID。プロポーザルを提出すると、却下された場合に備えて残高に “チャージ” が行われます。そのため、残高には、(すべての)却下の際の料金を払えるだけの大きさが必要です。ニューロンには、投票するために6ヶ月以上の dissolve delay が必要であり、これはプロポーザルの提出にも適用されます。
  • Proposal Type: プロポーザルの種類。これは、そのプロポーザルがどのトピックに属するか(例: #NodeAdmin)、その提案が採用された場合に処理するシステム関数、その関数に渡されるパラメータの型と構造 を推察するものです。
  • Parameters: プロポーザルの種類によって決まる、プロポーザルが採用された場合に呼び出されるシステム関数に渡されるパラメータです。プロポーザルが提出されると、NNSはパラメータをチェックします。

Topics

プロポーザルの種類から推測されるトピックによって、プロポーザルの処理方法が決定されます。例えば、NNSはあるトピックについて、投票者がより高い同意度を持つことを求めたり、プロポーザルをより速く処理しようとしたりすることがあります。また、ニューロンはトピック単位で他のニューロンをフォローします。NNSで利用できる初期のトピックには、以下のようなものがあります。

  • #NeuronManagement: このトピックのフォロイーによってニューロンを管理することができる特別なトピックです(この場合、デフォルトへのフォールバックはありません)。このトピックへの投票は、ニューロンの投票履歴に含まれません。このトピックに関するプロポーザルは、そのプロポーザルの対象となるニューロンの、このトピックのフォロイーのみが投票することを許可されます。このトピックのプロポーザルは、投票できる人が限定されるため、通常よりも投票期間が短くなります。
  • #ExchangeRate: すべてのプロポーザルは、国際通貨基金(IMF)の特別引出権(SDR)で測定されるICPの市場価値に関する情報を ”リアルタイム” で提供し、NNSがICPを、実世界のコストを一定に保つレートで、サイクル(計算の動力)へ変換することを可能にするものです。このトピックに関するプロポーザルは非常に頻繁に行われるため、投票期間が短くなり、このトピックに関する投票はニューロンの投票履歴に含まれません。
  • #NetworkEconomics: ネットワークの経済性を管理するプロポーザル — 例えば、ノードオペレータに支払われるべき報酬を決定すること。
  • #Governance: ガバナンスを管理するすべてのプロポーザル — 例えば、動議や特定のパラメーターの設定。
  • #NodeAdmin: OSのアップグレードまたは設定、仮想マシンフレームワークのアップグレードまたは設定、ノードレプリカソフトウェアのアップグレードまたは設定など、ノードマシンを何らかの形で管理するすべてのプロポーザル。
  • #ParticipantManagement: ネットワーク参加者を管理するすべてのプロポーザル — 例えば、DCID(データセンターID)または NOID(ノードオペレータID)の付与と取り消し。
  • #SubnetManagement: ネットワークサブネットを管理するすべてのプロポーザル — 例えば、新しいサブネットの作成、サブネットノードの追加と削除、サブネットの分割。
  • #NetworkCanisterManagement: ネットワークに属する “システム”キャニスターのインストールとアップグレード — 例えば、NNS のアップグレード。
  • #KYC: 規制目的のためにKYC情報を更新するプロポーザル — 例えば、ニューロンの形でのICPの最初のGenesis配布中に。
  • #NodeProviderRewards: ノードプロバイダーへの報酬のプロポーザルに関するトピック。

キャニスタースマートコントラクト

上記のインターフェースは、Internet Computer で使用される計算単位であるサイクルをあらかじめチャージしたキャニスターを作成したり、既存のキャニスターにサイクルを送ったりすることができるものです。サイクルは、ICPトークンを変換することで生成されます。

キャニスターの作成

スマートコントラクトを発展させたソフトウェアキャニスターは、プログラムとステートの両方を含む計算ユニットです。キャニスターは、コンパイルされたコードと、Dappまたはサービスの依存関係を含むソフトウェアユニットとしてデプロイされる点で、コンテナと似ています。

サイクルは、Internet Computer 上でアクションを実行するための計算資源です。一般に、すべてのキャニスターは、実行のためのCPUサイクル、メッセージのルーティングのための帯域幅、および永続化データのためのメモリという形でリソースを消費します。キャニスターは、自分のDappsが消費する通信、計算、ストレージのコストを支払うために、アカウント残高を維持します。計算のコストはサイクルという単位で表されます。

NNS dappを使用して、ユーザーは新しいキャニスターを作成したり、既存のキャニスターをアタッチしてサイクルをロードすることができます。新しいキャニスターのコントローラーは、あなたのプリンシパルIDになります。また、dappでは、例えば開発者用コマンドラインツール dfx で作成したプリンシパルIDにコントローラを変更するなどして、キャニスターにコードをアップロードできるようにすることもできます。

キャニスターへのサイクルの送信

サイクルは、物理的なハードウェア、ラックスペース、エネルギー、ストレージデバイス、帯域幅などのリソースを含む運用の実コストに対する支払い手段です。簡単に言うと、サイクル単位は、1つのWebAssembly命令を実行するコストを表します。その他のリソースは、それぞれ異なる量のサイクルを消費します。

サイクルは、イーサリアムの ”ガス”、AWS の ”クレジット” に例えられるが、データ、計算、実行に関して、より広い用途があります。また、使用コストの急激な上昇など、技術的な落とし穴を本質的に考慮した設計になっています。

サイクルは、ICPをサイクルに変換することで得られます。サイクルのコストは、1SDRあたり1兆サイクルに固定されています。SDR(Special Drawing Right)は、国際通貨基金(IMF)によって作られた国際準備資産です。ICP/SDRの現在の市場レートは、#ExchangeRateプロポーザルによってNNSに供給されます。例えば、現在のICPとSDRの交換レートが1対420の場合、0.1 ICP をサイクルに換算すると 42兆サイクルになります。

____

開発者コミュニティに参加し、forum.dfinity.org で開発を始めましょう。

--

--