コンテンツへスキップ

Composooor Snap:ハイブリッドなオンチェーン・オフチェーンアプリの構成可能性を実現

ETHDenver ハッカソン受賞

6分で読める
Composooor Snap:ハイブリッドなオンチェーン・オフチェーンアプリの構成可能性を実現

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

Composooor Snap

Snap リポジトリ: https://github.com/kairos-loan/composooor/tree/main/packages/snap

開発した理由は何ですか?

スマートコントラクトベースの金融プロトコルやその他のブロックチェーンアプリの開発経験を通じて、私たちは繰り返し現れるパターンに気づきました。ブロックチェーンの技術的な制約から、オフチェーンリソース(計算やデータストレージなど)をコントラクトのロジックで検証する形で利用するアプリが増えています。具体的な例としては、オーダーブック、エアドロップのマークルツリー、ソート済みリスト、トークン属性などが挙げられます。

いずれのケースでも、価値ある情報はオフチェーンで保存・計算されますが、それをオンチェーンのインタラクションに活用することで大きな影響をもたらすことができます。これを実現するために、コントラクトはハッシュや署名などの暗号技術を使って有効性を検証します。DAppsはフロントエンドやAPIに特定のロジックを実装し、コントラクトに必要な情報を提供する必要があります。しかし残念ながら、このパターンはコンポーザビリティを損ないます。たとえば、AWS上で提供されるプロプライエタリなオーダーブックに依存するDeFiアプリは、別のスマートコントラクトから簡単に統合することができません。

こうした制約に限界を感じた私たちは、あらゆるアプリを容易に統合できる標準とインフラを構築することを決意しました。統合をより簡単にすることで、この分野に多くの可能性が開かれると強く信じています。

技術的な実装について説明していただけますか?

概要

Composooor MetaMask Snapは、Webクライアント、1つまたは複数のオフチェーン任意リソース、およびComposooor標準を実装した任意の数のスマートコントラクト間の通信を標準化・処理するために使用されます。すべての標準リソースはnpmパッケージから簡単にアクセスでき、ほとんどの場合、Composooorのスーパーパワーを1行のコードで利用できます。

ステップバイステップ

  • トランザクションの準備時、MetaMask Snapウォレットは目的のオンチェーンコントラクトに対してガス見積もりのリクエストを送信します。

  • コントラクトがオフチェーンで行われたデータや計算を必要とする場合、不足しているデータの取得方法を示す仕様を含む標準化されたエラーとともにリバートします。標準化されたエラーは次のようになります。

error MissingOffchainDataError(
    address registryAddress,
    string url,
    bytes abiArgs
);
コピー

このエラーは、オフチェーンリソースにアクセスするためにコントラクトが継承しなければならないComposooorRegisterによって公開されます。

  • MetaMask Snapウォレットはこのエラーをデコードし、分散型プロトコル、API、またはそのソースから取得したコードを実行することで、不足しているデータを取得します。ETHDenverハッカソンでは、最もシンプルなオプションであるAPIコールを実装しました。

const responseData = await fetch(error.url + `?args=${error.abiArgs}`);
  • ウォレットは再度ガスを見積もります。今回は、目的のメソッドを呼び出す前に、取得したデータを対応するコントラクトの標準レジストリに保存する命令を追加します。

const callToRegisterData: Call = {
    callee: error.registryAddress,
    functionSelector: utils.id('recordParameter(bytes)').slice(0, 10) as PrefixedBy0x,
    data: defaultAbiCoder.encode(['bytes'], [data]) as PrefixedBy0x,
};
コピー
  • トランザクションの実行中、同一または別のコントラクトが機能するために別のオフチェーンリソースを必要とする場合があります。その場合、ウォレットはオフチェーンリソースが不要になるまでトランザクション準備ステップをループします。これにより、豊富なオフチェーンリソースにアクセスするプロトコル間での無限のコンポーザビリティが実現します。

  • ガス見積もりが成功すると、ユーザーは必要なすべてのリソースを含む準備済みトランザクションの署名を求めるプロンプトが表示され、正常に実行されます。

Composooor対応アプリの統合、または独自アプリの作成について

ETHDenverでは、Composooorが通常のハイブリッドアプリパターンのコードの複雑さを少なくとも80〜90%削減することを実証しました。

スマートコントラクト側

import "@composooor/ComposooorRegister.sol";でインポートします。使用例:

contract Example is ComposooorRegister {
    function action() public {
        bytes memory data = consumeParameter("http://api.api/number", abi.encode(arguments));
        (uint256 offchainNumber) = abi.decode(data, (uint256));
        (...)
    }
}
コピー

ComposooorRegisterはSolidityで作成されています。

フロントエンド側

Composooor Snapは、フロントエンド側で最大の効果を発揮します。通常200行以上の統合コードを…0行に削減します!Snapのロジックがすべてを処理します。

デモ

react-wagmi DAppの形で完全に統合されたデモを作成しました。このDAppでは、NFTの価格のごく一部を前払いし、残りをローンで後払いすることでNFTを購入することができます。オンチェーンでは、トランザクションに8つものコントラクトが関与しています。その中で、NFTマーケットプレイスはNFT売り手のオフチェーン署名を必要とします。Composooor Snapは、トランザクションの複雑さにもかかわらず、エラーを検出してデコードし、(APIから取得した後に)オンチェーンに情報を提供することができます。Composooorによって、このアプリの実装が大幅に簡素化されました。

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

このような革新が開発者の時間を大幅に節約し、新しいブロックチェーンのユースケースを可能にする上で重要なのは、採用です。私たちはComposooor Snapを裏側で使用し、対応するSnapと連携する複数のユーザー向けアプリを実装・デプロイします。それらのアプリが普及すれば、他のアプリとの連携のためにパートナーシップを結び、簡素化された開発体験によって採用のフライホイールを回し始めます。その過程で、SnapとStandardはより汎用的で標準化されたプロダクトへと進化し、当初のビジョンである「ブロックチェーンを任意のリソースに同期的に接続し、分散化やユースケースに依存しない形で実現する」ことを目指します。

あなた自身とチームについて少し教えていただけますか?

私たちは、NFTを担保として使用し、より資本効率の高いアプローチを採用したレンディングプロトコルを構築しているチームです。オーダーブックなどのオフチェーンコンポーネントを使用するアーキテクチャを採用することにしました。この選択により、資本効率とユーザーエクスペリエンスを向上させることができますが、他のプロトコルとの相互運用性が制限される可能性があります。そこで、他のプロトコルとの簡単な統合を可能にするComposooor Snapを開発しました。このライブラリが他のチームにも活用され、新たな可能性を開き、彼らの作業を容易にすることを願っています。

MetaMask SnapsとWeb3空間に対して解き放つ可能性について、どのような機会を見出していますか?

ウォレットはWeb3の主要な不可欠な柱・構成要素の一つであり、MetaMaskはほとんどのユーザーにとって事実上のデフォルトウォレットです。開発者がこれを任意の新しいユースケースに活用できるようにすることは、非常に重要だと思います。重要なのは、ウォレットが関与する必要があるすべてのイノベーションを想像したり準備したりすることはできないということです。そのため、ウォレットへのアクセスを一部開放することは、BitcoinからEthereumへの移行に似ています。つまり、自社の技術の上に任意のユースケースを可能にすることで、予測不可能な指数関数的な複利効果をもたらします。この質問に答えるのは難しいですが、私が最も期待しているのは、ウォレットが単にメッセージに署名するだけでなく、ユーザーにとってコンテキストが豊富な形でインタラクションを最適化するアプリです。

MetaMask Snapsを試したい開発者に共有したいアドバイスはありますか?

提供されているテンプレートを活用し、必要なすべてのユーザー承認を正確にリクエストし、できる限り少ない承認で済むよう心がけてください。

MetaMask Snapsで開発を始める

MetaMask Snapsを始めるには:

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

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

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

  4. Twitter、GitHubディスカッション、Discordで私たちとつながり続けてください

次のハッカソンでお近くの会場でお会いしましょう!Happy BUIDLing ⚒️

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

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

翻訳を評価する

この記事の執筆者:

  • MetaMask

    MetaMask(旧Consensys Software Inc)は、世界最大のセルフカストディ型金融プラットフォームです。暗号資産と従来の資産の両方にわたって、資産の保有・支払い・貯蓄・運用を一か所で行える環境をユーザーに提供しています。同社は、決済・貯蓄・投資・デジタル資産をシームレスな体験として統合したコンシューマー向けプラットフォームの構築を進めています。世界で最も広く利用されているセルフカストディウォレットとして成長を遂げたMetaMaskは、約190か国にわたるユーザーが自身の資金と資産を直接管理できる手段を提供しています。MetaMaskは2016年以来、Ethereumの成長において基盤的な役割を果たしてきました。現在、MetaMaskはブロックチェーン経済の中心に位置し、「Open Money」のオペレーティングシステムを構築することで、人々が自らの金融生活を完全にコントロールできる世界を目指しています。

    すべての記事を読む