Internet Computer の NFT マーケットプレイス Yumi の公式記事 What’s the difference between Principal ID and Account ID? (2022/10/17) の日本語訳です。
ICP ブロックチェーン上で NFT または ファンジブルトークン を扱う際、Principal ID と Account ID という2つの異なる ID を選択する必要がある場合があります。この記事では、この2つの ID の混乱に光を当て、どちらを使うべきかのガイドを提供します。この記事は一般向けのものですが、より深く知りたい開発者向けの有用なリンクもいくつか含まれています。
TL;DR
- Account ID は、サブアカウント番号を用いることで Principal ID から導出されます。
- Account ID から Principal ID を導出できません。
- NFT は Acoount ID、Principal ID のどちらにも送ることができ、どちらも安全に届きます。
- NNS ウォレットには絶対に NFT を送らないでください。
これらの ID は何ですか?
Yumi または IC エコシステムの他のマーケットプレイス や ウォレット でプロフィールを表示すると、あなたの Principal ID と Account ID が表示されることがよくあります。
Principal ID(PID)は、各ウォレット用に生成される一意のウォレット識別子です。Account ID(AID)は Principal IDから派生したものであり、ICP と NFT のレジストリで ICP と NFT の所有者を識別するために使用されます。2 つの ID はその構造で見分けることができます。PID はハイフンで区切られた 53 文字、AID は区切り文字のない 64 文字です。
Principal ID は、イーサリアムのウォレットのウォレットアドレスに似ています。Account ID は ICP ウォレットのアドレスにプライバシーを追加するものであり、ICP 台帳で利用されるほか、個々の NFT の所有者にも利用されます。イーサリアムでは1つのウォレットアドレスがありますが、ICP では PID と AID があります。幸いなことに、両者の関係は単純です。
どのような関係があるのでしょうか?
Account ID は、Principal ID とサブアカウント番号 の組み合わせを暗号化したものです。サブアカウント番号は 0 以上の任意の整数です。この2つ(PID+サブアカウント)を SHA224 で暗号化することで Account ID が生成されます。暗号化のポイントは、AID から PID に戻すことができないことです。これにより、1つの PID から異なる目的のために異なる AID を生成できるので、ウォレット ID にプライバシーが追加されます。
導出にはさらにいくつかの暗号化手順がありますが、ここでは割愛します。PID から AID を計算する方法を探している技術に詳しい読者や開発者のために、dfinityフォーラムに導出に関する有用なリンクを含むフォーラムの投稿があります。
PID から AID を導き出すのに任意の自然数を使うことができるので、理論的には1つのPIDに対して無限の AID が存在することになります。例えば、以下は、1つの Principal ID からサブアカウント番号 0、1、2 のそれぞれの AID です。
どの ID を使うべきでしょうか?
ほとんどのウォレットは、PID から AID を導き出すために、サブアカウント番号 0 を使用します。通常、NFT または ICP を Principal ID に送ろうが、アカウントIDに送ろうが、関係ないのもこのためです。Yumi やほとんどのウォレットは、サブアカウント番号ゼロで Account ID を導出します。
最終的に、Account ID は NFT のレジストリに格納されます。このため、Yumi や ICP のウォレットは、Principal ID からサブアカウント番号 0 の Account ID を導き出すので、Principal ID、Account ID のどちらにも NFT を送ることができるのです。
Plug など一部のウォレットでは、実際には Principal ID にしか NFT を送れないようになっています。このため、レジストリに保存されている Account ID が該当する ID であるにもかかわらず、Yumi はユーザープロファイルに両方の ID を表示することになります。
Internet Identity は、PID をどのように扱うのですか?
Dfinity は、ICP 上で動作するアプリケーションで認証するためのサービスとして、Internet Identity(II)を開発しました。Plug、Astrox ME、Infinity wallet、Stoic などのウォレットがある中で、Yumi も II をログインのオプションとして対応しています。ここで理解しておきたいのは、II はそれ自体がウォレットではなく、ICP の認証サービスであり、アプリケーションで利用することでウォレットとなることです。つまり、II は単体ではトークンまたは NFT を保持できず、Yumi のようなアプリケーションと組み合わせて初めて保持できるのです。つまり、II を使って Yumi にログインすると、Principal ID と Account ID が生成され、Yumi 内で ICP と NFT を保有するために利用できます。これは、Yumiとやり取りするために使っている他のウォレットと同じようなものです。
IIと他のウォレットの違いは、II はログインするアプリケーションごとに異なる Principal ID を生成することです。Plug のような他のウォレットは、ログインする各アプリケーションで同じ Principal ID を使用します。例外は Astrox ME で、これもアプリケーションごとに異なる Principal ID を作成するオプションがあります。
II でログインする際にアプリケーションごとに異なる PID を持つことは、特に ICP の Network Nervous System (NNS) で作業する際に、もう一つ重要な意味を持ちます。NNS を II のフロントエンドウォレットと勘違いしている人がいます。むしろ、NNS は II を使って認証できる別のアプリケーションに過ぎないのです。ですから、II で NNS にログインすると、Yumi にログインしたときとは異なる PID を取得することになります。このことは、NNS は Yumi とは異なる AID を持つことも意味します。NNS は NFT と対話するためのフロントエンドを提供していないので、あなたの NNS の AID に送られた NFT は失われます(少なくとも回復するのは非常に困難です)。したがって、NNS のウォレットアドレスには絶対に NFT を送らないでください!
まとめ
ICP で使用される ID は2つあります。初めてご利用になる方は戸惑うかもしれませんが、両者の関係は単純であり、Yumi での体験では相互的に使用できます。
この記事から得られる重要なポイントは
- Account ID は、サブアカウント番号を用いることで Principal ID から導出されます。
- Account ID から Principal ID を導出できません。
- NFT は Account ID、Principal ID のどちらにも送ることができ、どちらも安全に届きます。
- NNS ウォレットには絶対に NFT を送らないでください。