💪

XRPレジャーのDID機能

2023/08/07に公開

XRPレジャーとは

XRPレジャーはBitcoinやEthereumなどと同じ分散型のパブリックブロックチェーンです。ビットコインの初期コントリビュータを含む3人の開発者により2012年に開発され、PoWやPoSとは異なる独自のコンセンサスアルゴリズムが用いられています。

XRPレジャーではトランザクションはプロトコルネイティブであり、開発者が個別にNFTやDEXなどを機能を構築することなく、利用できます。

DID

DIDは分散型ID(Decentralized Identifier)を意味し、各ユーザが操作権限を持つグローバルなIDのことを指します。

詳しくは次の記事をご覧ください。

https://zenn.dev/sakazuki_xyz/articles/did-introduction

XRPLのDID機能

現在、コミュニティよりDID機能の提案が行われています。

https://github.com/XRPLF/XRPL-Standards/discussions/100

実装についても公開されており、レビューが行われています。

https://github.com/XRPLF/rippled/pull/4636

2024/01/10現在、rippled 2.0.0によりDID機能の投票が開始されています。

DID機能の特徴

XRPLのDID機能は新しいDID規格を提案するものではなく、既存のW3Cの規格に沿って活用していくことを目的としています。

次のような方針によりDID機能が提案されています。

  • 分散型: 中央発行機関を必要とせず、分散金融で効果的に機能すること。

  • 永続的かつポータブル: 本質的に永続的かつ長寿命であり、基盤となる組織の継続的な運営を必要とせず、異なるアプリケーション間で移植可能であること。

  • 暗号的に検証可能: 帯域外の信頼ではなく、暗号証明に基づくもの。

  • 普遍的に解決可能で相互運用可能: 共通のW3C DID標準を認識し、特定のソフトウェアベンダの実装を必要としない、あらゆるソリューションにオープンであること。

DIDメソッドの仕様

XRPL DIDにおいてDIDのメソッドは次のように定義されます。

did:xrpl:[network-id]:[xrpl-specific-idstring]

network-idはどのネットワークから情報を取得するかを指定します。 メインネットは0、テストネットは1、開発ネットは2のようになります。

xrpl-specific-idstringはDIDの所有者アカウントの識別子を指定します。rから始まるアカウントアドレス、またはアカウントの公開鍵アドレスを指定します。

rアドレスを利用した場合、
did:xrpl:1:rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh

公開鍵アドレスを利用した場合、
did:xrpl:1:0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020

追加されるレジャーオブジェクト

DID

新たにDIDオブジェクトが追加されます。このオブジェクトはアカウントの所有オブジェクトとして利用され、DIDオブジェクトの所有者によって追加・更新・削除されます。

DIDオブジェクトの例

{
  "LedgerEntryType":"DID",
  "Account":"rN38hTretqygfgcvADnJwZzHu5rawAvmkX",
  "URI":"68747470733A2F2F6D656469612E74656E6F722E636F6D2F666752755A7A662D374B5541414141642F6465616C2D776974682D69742D73756E676C61737365732E676966",
}

特殊なフィールド

  • URI: DIDドキュメントに対応するHTTP(S) URLまたはIPFS URLなどを設定することが想定されています。最大256バイトの値が設定可能な、変更可能なフィールドです。

  • Data: 任意のデータが格納可能です。最大256バイトの値が設定可能な、変更可能なフィールドです。次のようなデータの格納が想定されています。

    • DIDドキュメント
    • URIフィールドが指すDIDドキュメントのハッシュ値
    • DIDに関連付けられたIDの公開証明情報

追加されるトランザクション

DIDSet

DIDオブジェクトの追加(Create)・更新(Update)ができるトランザクションタイプです。

このトランザクションはJSONフォーマットでは次のように表されます。

{
  "TransactionType": "DIDSet",
  "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
  "Fee": "10",
  "Sequence": 391,
  "URI": "ipfs://bafybeigdyrzt5sfp7udm7hu76uh7y26nf4dfuylqabf3oclgtqy55fbzdi",
  "Data": "...",
  "SigningPubKey":"0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020",
  ...
}

URIフィールド、Dataフィールドのいずれか、または両方が設定されている必要があります。

  • アカウントに紐づくDIDが存在しない場合、DIDオブジェクトを作成します。
  • アカウントに紐づくDIDが存在する場合、そのDIDオブジェクトを更新します。

DIDDelete

DIDオブジェクトの削除(Delete)できるトランザクションです。

このトランザクションはJSONフォーマットでは次のように表されます。

{
  "TransactionType": "DIDDelete", 
  "Account": "rp4pqYgrTAtdPHuZd1ZQWxrzx45jxYcZex",
  "Fee": "12",
  "Sequence": 391,
  "SigningPubKey":"0293A815C095DBA82FAC597A6BB9D338674DB93168156D84D18417AD509FFF5904",
  "TxnSignature":"3044022011E9A7EE3C7AE9D202848390522E6840F7F3ED098CD13E...",
  ...
}

DID情報の取得

ledger_entryメソッドを利用することでアカウントのDIDオブジェクトを取得(Read)できます。

例えば、did:xrpl:1:rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2JpnというDIDの場合、network_idが1のため、テストネットから情報を取得することになります。

テストネットノードへのリクエスト時に次のように指定することでDIDオブジェクトを取得できます。

{
  "command": "ledger_entry",
  "did": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
  "ledger_index": "validated"
}

DIDオブジェクトにURIフィールドが含まれている場合は、そのURIからDIDドキュメントへアクセスします。

まとめ

現在コミュニティにより開発が進められているDID機能についての情報をまとめました。

DID機能はシンプルなデータ保持機能としても見ることができるため、今後この機能をベースとしたオラクル機能なども提供されるかもしれません。

興味を持たれた方はXRP Ledger開発者のDiscordチャンネルへ是非お越しください!
日本語チャンネルもありますので、英語ができなくても大丈夫です!
https://xrpldevs.org

Discussion