はじめに
『DApps開発入門』という本や色々記事を書いているかるでねです。
今回は、ウォレット内の資産をユーザーの許可の元Dappが取得できる新しいJSON-RPCメソッドを提案しているEIP2256についてまとめていきます!
以下にまとめられているものを翻訳・要約・補足しながらまとめていきます。
他にも様々なEIP・BIP・SLIP・CAIPについてまとめています。
概要
EIP2256は、Ethereumのウォレットからユーザーが保有している資産(トークンやNFTなど)の一覧を取得するための新しいJSON-RPCメソッド wallet_getOwnedAssets を定義するものです。
取得はユーザーの許可を前提とし、ウォレットがユーザーの関心のある資産だけを管理・返却できる仕組みを想定しています。
これにより、分散型アプリケーション(dApp)がユーザー資産を確認する際、個別に資産リストを保持して都度ブロックチェーンから残高を照会する必要がなくなります。
動機
現在、dAppがユーザーの保有資産を把握するためには、自前で「全ての資産」のリストや「DAppやウォレット側が事前にいる資産」を持ち、それぞれの資産についてブロックチェーンから残高を取得する必要があります。 この方法は、複数のdAppで同じ作業が繰り返されるため、開発リソースの無駄が生じます。 また、ユーザーにとっても利便性が低く、不要なエアドロップ資産や関心のないトークンが表示される一方で本来必要な資産がリストに含まれないこともあります。
提案されている wallet_getOwnedAssets メソッドを使えば、ウォレットがあらかじめユーザーが興味を持つ資産を管理し、その中から現在保有しているものだけを返却できるため、UX(ユーザー体験)が向上します。
この仕組みは、EIP747(ウォレットに新しい資産を追加する提案)を補完する位置づけにもなります。
EIP747については以下の記事を参考にしてください。
仕様
提案されている wallet_getOwnedAssets は、Web3対応ブラウザやウォレットに新たに追加されるJSON-RPCメソッドです。
主な目的は、dAppとウォレット間の通信を通じて、ユーザーが既にウォレットでホワイトリスト登録している資産(ERC20トークンやERC721など)だけを取得できるようにすることです。
これにより、ユーザーは不要な資産まで共有せずに済み、dAppは効率的に必要な資産情報を取得できます。
このメソッドはEIP155準拠のチェーンIDや資産タイプのフィルタリング、取得件数の制限、リクエスト理由(justification)の添付などが可能です。 また、返却される資産情報には、アドレスやチェーンID、資産タイプ、名称、シンボル、アイコン、残高、小数点桁数などが含まれます。
EIP155については以下の記事を参考にしてください。
引数
最初の引数には、資産を所有しているEthereumアドレスを指定します。 2番目の引数はオプションのオブジェクトで、以下の項目を含められます。
chainId- 対象チェーンのID(EIP155準拠)。
limit- 取得する資産の最大件数。
types- 取得対象とする資産インターフェース(例:
["ERC20", "ERC721"])。
- 取得対象とする資産インターフェース(例:
justification- dAppがこの情報を求める理由を人間が読める文章で記載(推奨)。
返却データ
結果は配列形式で返され、各要素は1つの資産情報を表します。
address- 資産コントラクトのEthereumアドレス(チェックサム付き)。
chainId- 資産がデプロイされているチェーンのID。
type- 資産タイプ(例:ERC20、ERC721)。
options- 資産固有の追加情報(名称、シンボル、アイコン、残高、小数点桁数など)。
実行例
全資産の取得リクエストでは、Ethereumアドレスと理由だけを指定し、結果として複数のチェーンやタイプの資産が返ります。 特定条件(例えばchainIdが1でERC20のみ、最大1件)の場合は、その条件に一致する資産のみが返却されます。
ユーザーインターフェースの推奨事項
ウォレットは、このメソッドを呼び出された際にユーザーに確認画面を表示します。 ユーザーはリクエストを承認、拒否、または取得する資産数を減らす形で修正できます。 全資産がリクエストされた場合には、総保有資産数を表示し、ユーザーが返す資産を選択できるようにします。 また、利便性向上のため、ウォレットは頻繁に利用する資産を優先的に表示し、必要に応じて他の資産も展開表示できるようにします。
補足
wallet_getOwnedAssets メソッドは、dAppが自前で「全ての資産」のリストや「DAppやウォレット側が事前にいる資産」を維持する必要をなくし、ユーザー体験(UX)を向上させることを目的に提案されています。
これにより、同じような資産管理の作業が複数のdAppで重複して行われる無駄を削減できます。
また、このメソッドでは chainId や types といったオプションパラメータを活用することで、dApp側が用途に応じて取得対象の資産を絞り込み、ユーザーに提示するリストを限定できます。
例えば、特定のチェーン上のERC20トークンだけを選ばせるといった制御が可能です。
limit パラメータは、ユーザーが選択できる資産数の上限を指定するもので、現時点では下限は設定されておらず、最低1件と見なされています。
レスポンスの options フィールドは、資産固有の情報を提供するためのもので、ウォレットが普段表示している名称やアイコンなどをdAppでも利用できるようにします。
これにより、ユーザーは見慣れた表示で資産を確認でき、UIの理解がスムーズになります。
さらに、address や type フィールドにより、dAppは資産の識別やそれに紐づく機能を追加できます。
balance フィールドは、ユーザーの残高をブロックチェーンに問い合わせずに表示できる最適化機能で、通常この情報は公開されているため安全に活用できます。
引用
Loredana Cirstea (@loredanacirstea), "EIP-2256: wallet_getOwnedAssets JSON-RPC Method [DRAFT]," Ethereum Improvement Proposals, no. 2256, August 2019. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-2256.
最後に
今回は「ウォレット内の資産をユーザーの許可の元Dappが取得できる新しいJSON-RPCメソッドを提案しているEIP2256」についてまとめてきました! いかがだったでしょうか?
質問などがある方は以下のTwitterのDMなどからお気軽に質問してください!
他の媒体でも情報発信しているのでぜひ他も見ていってください!

