跳至內容

Composooor Snap:混合鏈上與鏈下應用的可組合性啟用工具

ETHDenver 黑客松獲獎者

6 分鐘閱讀
Composooor Snap:混合鏈上與鏈下應用的可組合性啟用工具

MetaMask Snaps 是讓 MetaMask 成為全球最具擴展性錢包的發展藍圖。身為開發者,您可以透過全新方式將您的功能與 API 帶入 MetaMask。Web3 開發者是這項成長的核心,本系列旨在展示當今正在打造的創新 MetaMask Snaps。

Composooor Snap

Snap 程式庫:https://github.com/kairos-loan/composooor/tree/main/packages/snap

為什麼要打造這個 Snap?

在我們開發基於智能合約的金融協議及其他區塊鏈應用的過程中,我們注意到一個反覆出現的模式。由於區塊鏈的技術限制,越來越多的應用程式開始使用在合約邏輯中驗證的鏈下資源(例如運算或資料儲存)。相關範例包括訂單簿、空投的 Merkle 樹、排序列表、代幣屬性等。

在每種情況下,有價值的資訊都是在鏈下儲存或運算,但可以被使用,並對鏈上互動產生重大影響。為了實現這一點,合約使用雜湊或簽名等不同的密碼學技術來驗證有效性。DApp 因此需要具備特定邏輯的前端或 API,才能為合約提供相關資訊。遺憾的是,這種模式破壞了可組合性——例如,一個依賴託管於 AWS 上的專有訂單簿的 DeFi 應用,就無法輕易被其他智能合約整合。

受夠了這些限制,我們決定制定一套標準與基礎設施,讓所有應用程式都能輕鬆整合至任何系統。我們堅信,讓整合再次變得簡單,將為這個領域開創許多新機會。

能否帶我們了解技術實作的細節?

簡介

Composooor MetaMask Snap 用於標準化並處理網頁客戶端、一個或多個鏈下任意資源,以及任意數量實作 Composooor 標準的智能合約之間的通訊。所有標準資源都可透過一個 npm 套件輕鬆取得,在大多數情況下,只需一行程式碼即可使用 Composooor 的強大功能。

逐步說明

  • 在準備交易時,我們的 MetaMask Snap 錢包會對目標鏈上合約發出預估 Gas 的呼叫。

  • 如果合約需要某些鏈下資料或運算才能運作,它將以包含如何找到缺失資料規格的標準化錯誤回退。標準化錯誤如下所示:

error MissingOffchainDataError(
    address registryAddress,
    string url,
    bytes abiArgs
);
複製

此錯誤由 ComposooorRegister 公開,合約必須繼承它才能存取鏈下資源。

  • MetaMask Snap 錢包隨後可以解碼此錯誤,並透過在去中心化協議上擷取、呼叫 API,或執行從這些來源取得的程式碼來產生所需資料,從而找到缺失的資料。在 ETHDenver 黑客松中,我們實作了最簡單的選項,即 API 呼叫。

const responseData = await fetch(error.url + `?args=${error.abiArgs}`);
  • 錢包接著會再次預估 Gas,這次會加入一條指令,在呼叫目標方法之前,先將擷取到的資料儲存至對應合約的標準化登錄表中。

const callToRegisterData: Call = {
    callee: error.registryAddress,
    functionSelector: utils.id('recordParameter(bytes)').slice(0, 10) as PrefixedBy0x,
    data: defaultAbiCoder.encode(['bytes'], [data]) as PrefixedBy0x,
};
複製
  • 在交易執行過程中,相同或其他合約可能需要另一個鏈下資源才能運作。若是如此,錢包將循環執行交易準備步驟,直到不再需要任何鏈下資源為止。這實現了協議之間存取豐富鏈下資源的無限可組合性。

  • 當 Gas 預估成功後,系統會提示使用者對已準備好的交易進行簽名,以便在包含所有必要資源的情況下成功執行。

整合支援 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,並透過貸款在日後償還剩餘金額。在鏈上,這筆交易涉及多達 8 個合約。其中,NFT 市場需要 NFT 賣家的鏈下簽名。儘管交易相當複雜,Composooor Snap 仍能擷取錯誤、解碼,並在鏈上提供所需資訊(透過 API 擷取後)。Composooor 讓這個應用程式的實作變得更加簡單。

如果要實作這個方案,下一步是什麼?

這類創新能為開發者節省大量時間並開創新的區塊鏈使用案例,而推動採用正是關鍵所在。我們將在幕後使用 Composooor Snap 實作並部署多個面向使用者的應用程式,並搭配對應的 Snap 運作。若這些應用程式獲得關注,我們將尋求合作夥伴,將它們與其他應用程式組合,藉由簡化的開發體驗啟動採用的飛輪效應。在此過程中,Snap 與標準將演進為更通用、更標準化的產品,實現最初的願景:以與去中心化程度及使用案例無關的方式,將區塊鏈同步連接至任意資源。

能否介紹一下您自己和您的團隊?

我們是一個正在打造借貸協議的團隊,致力於以更具資本效率的方式將 NFT 作為抵押品。我們選擇採用包含鏈下元件(如訂單簿)的架構。這個選擇有助於提升資本效率與使用者體驗,但可能限制與其他協議的互通性。因此,我們開發了 Composooor Snap,讓與其他協議的整合變得更加容易。我們希望這個函式庫能被其他團隊採用,開創新的可能性,並讓他們的工作更加輕鬆。

您認為 MetaMask Snaps 為 Web3 領域帶來了哪些機會與可能性?

錢包是 Web3 最重要的核心基礎之一,而 MetaMask 是大多數使用者預設的錢包。讓開發者能夠將其用於任意的新使用案例,對我來說至關重要。重點在於,我們無法預想或預先準備好錢包需要參與的所有創新,因此開放部分存取權限,就如同從比特幣過渡到以太坊:在您的技術之上啟用任意使用案例,將帶來難以預料的指數級複利效益。因此這個問題很難回答,但我最期待的是那些讓錢包不僅僅是簽署訊息,而是能以情境豐富的方式為使用者優化互動的應用程式。

對於有意嘗試 MetaMask Snaps 的開發者,您有什麼建議?

善用提供的範本,並謹慎地正確請求每一個所需的使用者授權,同時盡量減少授權請求的數量。

使用 MetaMask Snaps 進行開發

開始使用 MetaMask Snaps:

  1. 查閱開發者文件

  2. 安裝 MetaMask Flask

  3. 參考 MetaMask Snaps 指南

  4. 透過 Twitter、GitHub 討論區和 Discord 與我們保持聯繫

請留意我們的團隊將出現在您附近的下一場黑客松!祝 BUIDL 愉快 ⚒️

免責聲明:MetaMask Snaps 通常由 Consensys Software 以外的第三方開發。使用第三方開發的 MetaMask Snaps 須由您自行判斷並承擔風險,且您同意對因此類活動所造成的任何損失或損害負全部責任。Consensys 對第三方開發的 MetaMask Snaps 不提供任何明示或默示的保證,並對第三方開發的 Snaps 免除一切責任。使用區塊鏈相關軟體存在風險,使用 MetaMask Snaps 即表示您完全承擔這些風險。

AI 翻譯。可能包含錯誤。請務必核實資訊。

評價此翻譯

本文作者:

  • MetaMask

    MetaMask,前身為 Consensys Software Inc,是全球最大的自託管金融平台,讓用戶能在單一平台上持有、消費、儲蓄並增值其資產,涵蓋加密貨幣與傳統資產。公司正致力於打造實現上述目標的消費者平台,將支付、儲蓄、投資與數位資產整合於一個無縫的使用體驗中。MetaMask 從全球使用最廣泛的自託管錢包發展而來,讓用戶直接掌控自己的資金與資產,服務範圍遍及約 190 個國家。自 2016 年起,MetaMask 在以太坊的發展歷程中扮演了奠基性的角色。時至今日,MetaMask 位居區塊鏈經濟的核心,致力於構建「開放金融」的作業系統,讓每個人都能全面掌握自己的財務生活。

    閱讀所有文章