マルチリゾルバーSnap:マルチリゾルバー問題の解決

ETHLisbonハッカソン優勝者

6分で読める
マルチリゾルバーSnap:マルチリゾルバー問題の解決

MetaMask Snapsは、MetaMaskを世界で最も拡張性の高いウォレットにするためのロードマップです。開発者として、まったく新しい方法でMetaMaskに機能やAPIを追加することができます。Web3開発者はこの成長の中核を担っており、本シリーズでは現在構築されている革新的なMetaMask Snapsを紹介することを目的としています。

マルチリゾルバーSnap

Snapリポジトリ: https://github.com/idriss-crypto/multiresolver

マルチリゾルバーSnapを構築した理由は?

Web3におけるユーザーエクスペリエンスは長い間軽視されてきました。進歩が見られる分野の一つがアカウント抽象化です。ほぼ毎週のように新しいネーミングサービスが登場しているように感じられます。これらの目的は、この空間における互いのやり取りを簡素化することです。名前はウォレットアドレスよりも認識しやすく、アイデンティティや評判システムの基盤となります。

さらに、独自の(ネーミング)標準はプロジェクトの人気向上に貢献できます。例えば、あるプロジェクトを「x」と呼ぶとしましょう。そのプロジェクトが提案する新しいネーミング標準は「x-domains」や「x-names」と呼ばれるかもしれません。プロジェクトの成功はネーミングサービスの成長を自動的に後押しし、ネーミングサービスの成功もプロジェクトに同様の恩恵をもたらします——まさにWin-Winの関係です。しかし現在、ネームスペースは断片化した状況にあります。すべてのネーミングサービスを利用しようとする人もいますが、一部の(ドインベースの)ネーミングサービスでは限られたネームスペースをめぐる競争が生じています。他のネーミングサービスは、メールアドレス、電話番号、より一般的なソーシャルハンドル(Twitterユーザー名、IGハンドル)など、ユーザーがすでに持っている身近な識別子を使用することで、これらのアイデンティティをめぐる市場競争を排除しようとしています。多くの人は最終的に、異なるネーミングサービスから1つ、多くても2つのハンドルを持つことになります。選択肢が多様であるため、開発者はアプリケーションに複数のネーミングサービスリゾルバーを統合する必要があります。

新しいネーミングサービスが市場の相当なシェアを獲得した場合、そのネーミングサービスのユーザーを排除しないよう、アプリケーションにも統合する必要があります。ユーザーの観点からすると、自分が選んだネーミングサービスをサポートする同様の機能を持つ代替アプリケーションを探すのは煩わしいことです。ユーザーが使い慣れたものを自由に使えるようにしながら、開発者が最高のアプリケーション作りに集中できるソリューションを提供できれば、どれほど良いでしょうか?

マルチリゾルバーSnapはまさにそれを実現します。

技術的な実装について説明してください。

概要

このSnapはMetaMask Flask 10.20向けに構築されました。現在のバージョンでは、endowment:network-accesssnap_confirmのパーミッションを使用しています。前者は予備バージョンにおいて、解決済みアドレスのリクエストとTwitter IDのTwitterユーザー名への変換に使用されます。後者は、トランザクションが作成される前に、解決されたアドレスを強調表示する確認画面をユーザーに表示します。

現在サポートされているリゾルバーはIDrissとENSです。SnapはローカルホストでI動作します。

dApp側からの統合

開発者がこのSnapを(したがってすべての利用可能なリゾルバーを)統合するには、まずウォレットとSnapに接続する必要があります:

const connectSnap = async (
  snapId: string = defaultSnapOrigin,
  params: Record<'version' | string, unknown> = {},
) => {
  await window.ethereum.request({
    method: 'wallet_enable',
    params: [
      {
        wallet_snap: {
          [snapId]: {
            ...params,
          },
        },
      },
    ],
  });
};
コピー

呼び出しはresolve_sendメソッドを通じて行われ、以下のように呼び出すことができます:

const resolveInput = async (id_?: string) => {
  return await window.ethereum.request({
    method: 'wallet_invokeSnap',
    params: [
      defaultSnapOrigin,
      {
        method: 'resolve_send',
        identifier: id_,
      },
    ],
  });
};
コピー

これにより解決済みアドレスが返されます。ここで、id_はユーザーが送信フィールドに入力する識別子です。

新しいmultiChainProviderを使用すると、必要なパーミッションを持つウォレットへの接続と同様に、Snapへの接続も簡単に行えます:

import { MultiChainProvider } from "@metamask/multichain-provider";

const provider = new MultiChainProvider();
const { approval } = await provider.connect({
  requiredNamespaces: {
    eip155: {
      chains: [chains],
      methods: [
        permissions
      ],
    },
  },
});
const session = await approval();
コピー

上述のresolve_sendメソッドはeth_sendTransactionに名前を変更することができ、アプリは統合を変更することなくマルチリゾルバーSnapを使用できるようになります。eth_sendTransactionが呼び出されるたびに、Snapが介在し、トランザクションを作成する前に入力を解決します。アプリケーションは、ユーザーの入力がアドレスと一致しない場合にエラーをスローするのではなく、String型の入力を許可する必要があります。あとはSnapがすべて処理します!

実装する場合の次のステップは?

次のステップとして、このSnapはオープンソース化され、他の開発者がバグを探し、コードを改善し、カスタムリゾルバーを追加できるようにする予定です。オープンソース化により、このSnapの真の可能性が解放されます。新たに登場するすべてのネーミングサービスを、単一の開発者や組織が統合する必要はなくなります。contribute.mdファイルがこのプロセスを促進します。また、MetaMask Snapsチームによるさらなる開発も追跡されます。

具体的には、2つの点がこのSnapに大きな恩恵をもたらします:

  1. アカウント間転送におけるendowment:transaction-insightパーミッション。これにより、トランザクションがトリガーされる前の追加のsnap_confirm呼び出しを不要にします。

  2. MetaMaskへのUIインジェクション。目標は、ユーザーがウェブサイトに接続することなくマルチリゾルバーを利用できるよう、Snapを送信フィールドに実装することです。

最後に、IDrissリゾルバーとの完全な統合を目指しています。完全な統合により、ユーザーはIDrissブックへの登録なしに、任意のメールアドレス、電話番号、Twitterユーザー名に暗号資産やNFTを送信できるようになります。

あなた自身とチームについて教えてください。

私の名前はLennardです。2017年からブロックチェーン分野に興味を持っています。1年以上にわたり、メールアドレス、電話番号、Twitterユーザー名をウォレットアドレスに分散型でマッピングするIDrissを構築・共同設立してきました。より一般的には、より使いやすいWeb3に向けたツールの構築に注力しており、それがこのSnapを構築する動機となりました。

MetaMask Snapsを初めて知ったのはいつで、どのような体験でしたか?

Snapsチームは今年(2022年)のカンファレンスに非常に積極的に参加しており、何度か顔を合わせています。コードベースに初めて触れたのは、パリで開催されたEthCC 2022でのプレゼンテーションの後でした。機能はまだ限られていましたが、ドキュメントはすでに有望で、MetaMask Snapsの将来に大きな期待を抱いています。

MetaMask Snapsが他のウォレットと異なる点は何ですか?

ウォレットの開発に外部のコントリビューターを取り込むような同様のアプローチは、他では見たことがありません。一部の他のウォレットはコードをオープンソース化していますが、Snapsは開発者がMetaMaskの機能を直接拡張できるようにします。このアプローチはより適切に維持管理できるため、他のプロジェクトにも採用されると確信しています。

MetaMaskでSnapsを構築することはどのような体験ですか?

ハッカソン中にこのSnapを構築する素晴らしい機会でした。MetaMask Snapsチームが近くにいてくれたおかげで、疑問が生じた際にすぐに助けを得られました。まだ不足しているのはMetaMaskのUIをカスタマイズする機能です。また、依存関係の問題のデバッグが難しく、開発時間の大半を占めてしまうことがあります。

あなたにとってMetaMask Snapsとは何を意味しますか?

Snapsは、開発者がパーミッションレスな方法でプロジェクトやアイデアをMetaMaskに直接統合するためのプレイグラウンドを提供します。私にとって、これはあらゆるプロジェクトの成長を加速できることを意味します。ユーザーはすでに持っているツール(ウォレット)を使って、突然より多くのメリットを享受できるようになるからです。

MetaMask SnapsがWeb3空間にもたらす可能性についてどのようにお考えですか?

Snapsはトランザクションインサイトを通じて詐欺を防止し、キーリングによってよりネットワーク包括的なエクスペリエンスを生み出し、カスタムリゾルバーとUIの強化を組み合わせることでよりユーザーフレンドリーなWeb3体験を実現できます。これらが合わさることで、より多くの人々がこの空間に参入するでしょう。

MetaMask Snapsに挑戦したい開発者へのアドバイスはありますか?

ハッカソンに参加してください!チームと直接交流し、即座にフィードバックを得る最良の方法です。

MetaMask Snapsで構築する

MetaMask Snapsを始めるには:

  1. 開発者ドキュメントをご覧ください

  2. MetaMask Flaskをインストールしてください

  3. MetaMask Snapsガイドをご確認ください

  4. TwitterGitHubディスカッションDiscordでつながり続けましょう

お近くで開催される次のハッカソンで私たちのチームにご注目ください!Happy BUIDLing ⚒️

免責事項:MetaMask Snapsは一般的にConsensys Software以外のサードパーティによって開発されています。サードパーティが開発したMetaMask Snapsの使用は、お客様自身の判断とリスクのもとで行われ、そのような活動から生じる損失や損害についてはお客様が単独で責任を負うことに同意したものとみなされます。Consensysはサードパーティが開発したMetaMask Snapsについて、口頭または書面による明示的または黙示的な保証を行わず、サードパーティが開発したSnapsに関するすべての責任を否認します。ブロックチェーン関連ソフトウェアの使用にはリスクが伴い、MetaMask Snapsを使用する際にはそのリスクをすべて自己負担するものとします。

AIによる翻訳です。エラーが含まれている可能性があります。常に情報を確認してください。

翻訳を評価する
  • MetaMask
    MetaMask

    ConsenSysが構築した、Web3への入口となる主要なセルフカストディ型暗号資産ウォレット。

    すべての記事を読む