原標題:《觀點 | 可組合錢包的重要性》
我曾經講解過去中心化應用(dApp)的產品可組合性,當然,用的是非常簡單的層疊示意圖:
實際上,有兩個層級被我省略掉了,就是錢包和 SDK;而且,還可以再加上有關 “鏈” 的一層:
本文我準備談談,為什麼這些額外的複雜性會導致人們的視角發生轉變:可組合的錢包會對使用者和開發者兩端都產生越來越重要的影響。一般來說,在走到產品開發的 “最後一公里” 的時候,也就是開發團隊要決定接入儘可能多的錢包時,人們才會想起還有錢包這回事(假設這個團隊既負責產品的智慧合約後端,也負責前端)。目前來說這沒什麼大問題,因為大多數 dApp 在使用者互動上都是很簡單的(即,授權 + 存入、拍賣/買入,以及互換)。在互動的 前/後 沒有太多需要管理或表示的東西。
但我們的生態還會變得更加複雜的,那時候怎麼辦呢?在可預見的未來,我們都要著手管理自己的以 token 形式體現的數字身份,比如 skills、credit scores、social circles,等等。這就會在接入我們今天所用的標準協議前產生額外的一個互動步驟、要管理更復雜的網路和使用者關係,以及相應的市場。思索這個前景,我們會自問:每個產品都要自己管理一個特定的前景,這合理嗎?Web 2.0 時代的方法就是建立另一個 應用市場/網站,但我覺得我不會喜歡再有一個網站來跟蹤我怎麼管理自己的身份和自己所用的網路。我認為,這樣私人的東西應該在錢包層完成處理,因為在這個環境中,個人自主和隱私性是第一位的。
雖然我不介意為了使用不同的協議而跳轉到不同的網站,但我也不希望為了管理我的鏈上互動的不同部分而使用多個錢包。這樣很蠢,而且每多一個就多一些安全風險。但如果我只使用一種錢包,那我就把自己跟這個錢包背後的開發團隊的內在風險繫結起來了 —— 更不用說總會有他們還沒開發的新功能。請記住,我們已經身處一個迅猛發展的世界中,沒有哪個團隊可以樣樣精通。
這就是為什麼我們需要錢包的可組合性。雖然我想直接開始,但我還沒講到錢包是由哪些部分組成的。在談到 DeFi 和 許多以太坊 dApp 時,我們已經有了 “貨幣積木” 這個詞;因此我準備把錢包的可組合性模組稱為 “通道積木(access lego)”。
四個層級中的每一個都應允許使用者靈活地選擇產品,而每個層級都應由產品提供者提供定製化的積木。
這裡有很多東西可以深挖,所以我們先快速回顧下密碼學貨幣錢包的歷史,以便更好地理解這些積木,以及我們今天所用的先進錢包服務是如何得來的。
以太坊錢包簡史
第一個以太坊錢包的靈感來自 Bitcoin Qt 錢包,是由 Mist 團隊做出來的。
-圖片來源-
Mist 錢包看起來跟 Qt 非常像,都是一個需要下載的軟體,然後可以匯出交易資料,也支援 區塊同步/區塊瀏覽:
-圖片來源-
這個錢包其實是想把一個以太坊節點能夠做到的事情都裝進一個軟體裡 —— 那就需要安裝大量依賴,整體的使用者體驗也不好。到 2016 年,MetaMask 出現,是最早的基於瀏覽器的錢包之一。自此,dApp 可以從錢包中解耦出來,只需嵌入錢包的連線方式即可。這一點隨著生態系統的成長變得非常重要,因為此前單個團隊想跟蹤所有 EIP 的進展和發展出來的 token/協議 是非常困難的(現在也仍然如此)。我想指出的是,雖然這增加了 dApp 產品的可組合性,這還不是上面的 “通道積木示意圖” 中所指的錢包內的智慧合約整合。這一部分一直到新的整合方式如 WalletConnect 出現之後才有所改變。
- 錢包連線方式嵌入示例 -
這樣一來,錢包的一些責任和負擔就移除了,現在它的重點變成了交易構建、簽名以及維持與區塊鏈的連線。我不想深究細節,但交易構建意味著要從 dApp 處接收一些交易引數、並且其它引數要保證完全在錢包控制之下。這使我們走向了對錢包(也可稱為 “提供者”)可用的 RPC 呼叫,最早由 EIP-1193 定義。dApp 可以傳送一些引數如目標地址、資料、gas limit/price、數值給錢包,但無法控制鏈 ID、傳送者地址以及 nonce 等涉及錢包安全的引數。
有了這種新型錢包之後,我們又多了兩種複雜的使用者體驗:
記住 其他使用者/朋友 的地址是很困難的,不安全,而且容易發生人為的錯誤
交易附帶的位元組碼是不可閱讀的,除非你非常熟悉函式選擇器以及 資料/引數 的雜湊值。要是你沒有合約的 ABI,那就有你好看的了。
為了解決第一點,ENS 在 2016/2017 年月 EIP-137 一起推出,成為了我們的第一塊社交積木。現在,大家都可以用一個網站域名來表示自己的以太坊地址(比如 vitalik.eth),在 訊息/轉賬 中使用即可免去輸入長長的地址。這只是社交智慧合約層的一部分;其餘部分要花更大的精力來 解耦/實現可組合性。
關於第二點,Parity 建立了一個 “方法登錄檔”,被廣泛使用者在錢包的簽名介面給出人類可讀的資訊。EIP-712 在此發揮了重要作用,儘管它到最近才獲得更多關注。不過,即使有了這些設定,還是很難保證你的瀏覽器沒有被黑或被欺騙從而顯示出不真實的 交易/資訊。這是使用熱錢包(即總是連線到網際網路、並且沒有與你的計算機環境的其餘部分隔離開來的錢包服務)的最大問題之一。
常見的解決方案是一個硬體錢包,開拓者是 Ledger,從 2014 年起步。MetaMask 在 2018 年首日新增硬體錢包支援,正式地解耦了安全層和 交易層/連線層。我們後面還會再回顧這一點,因為 Ledger 作為冷儲存錢包固然很棒,但一些新產品也有很大改進。
- 正上方的即是一個 Ledger 錢包 -
於此同時,我們看到,許多複雜的協議在 2020 年夏天開始在 DeFi 世界裡領一時之風氣(其中大部分都開發了超過 2~3 年)。這給了我們越來越多的代幣,學會安全管理也變得越來越重要。為了幫助大家跟上圈子的進步,人們建立了一種新的 RPC 端點,讓 dApp 可以在錢包所跟蹤的代幣列表中新增種類。更多管理資產的工具被建立出來,比如 Argent vaults 和 Gnosis multi-sig safes(我還認為這兩款產品與社交層有關,因為他們都有多使用者機制以及 DAO 機制)。人們還給 dApp 的資料分享建立了 “許可連線” 標準(EIP-2255),以防止對錢包的惡意訪問。資產管理/資產聚合器、分析器,也因為 Zerion 和 Zapper 而從錢包中解耦了出來(下一章節我們還會回頭講解這兩個產品)。
自 2019 年開始,手機錢包也出現了增長。Rainbow wallet 是最佳範例之一,他們的使用者體驗設計得非常好。但要講到無縫整合,他們也才剛剛開始。
大多數其它手機錢包(比如 MetaMask 手機版和 Coinbase Wallet)都嘗試並且在應用內開發了一個 dApp 瀏覽器,依賴於 deeplink 而非直接整合。這些 deeplink 無法提供很好的使用者體驗,但在以太坊上開發的產品又多到錢包團隊無法設計出一個可以與所有產品互動的大一統介面。假設每個錢包應用團隊都專門為一個應用場景(訊息、NFT/市場、DeFi,等等)做最佳化 —— 那麼,我的安全風險都跟我所用的錢包數量成正比。也許它們都是最小化的,因為安全模組已經完全解耦 —— 但因為市場已變得碎片化,開發者就必須為進入不同的系統排定優先順序。Rainbow 錢包團隊一開始想做 錢包聚合器/管理器(基於他們從 2019 開始構建的早期 GitHub 庫),所以我認為他們已經考慮過這個問題了。也就是說,我們可以看到,智慧合約的介面已經是半解耦的了,但這一整合還不能自由組合,因為錢包團隊正是瓶頸。換句話說,所有 dApp 都可推送到某個錢包來使用,但一個錢包並不能保證所有 dApp 都支援他們。
現在,一個錢包的所有層級,我們都或多或少有所瞭解了,現在我們再回頭討論通道積木。這些積木和下列的分析,部分基於我自己的信念:我們未來會走向在錢包產品中直接使用 dApp,比如 MetaMask 提供的幣幣互換 和 Rainbow 的展示功能。
這些分析是我個人經驗和幾個星期的研究工作的總結,我完全有可能弄混了一些專案的時間線。如有錯漏,請聯絡我,我可以編輯文章及作出必要的 訂正/補充。
分析通道積木
有了對以太坊錢包的更多瞭解,我們就可以談談我所謂的 “access(通道)” 的意思了。這裡的 “Access” 通常代表使用者對資金和協議的方案,也代表協議(經允許的方式)訪問使用者以及他們回傳的資料。有了通道積木,我們就可以想象出五種關鍵的屬性、幫助我們更好地定義錢包可組合性的基本要求:
安全性可以從使用者介面中解耦出來,放到任意硬體或軟體的解決方案中,且無需犧牲定製化特性;
使用者能夠訪問任意應用,而不必擔心換代和整合時間;
協議可以訪問使用者,而不必擔心被棄用和需要手動推動錢包整合自己的產品
沒有人能控制整個整合市場
不必犧牲使用者和開發者體驗
一個一個聊 : )安全定製化
我相信 硬體-錢包服務 的連線方式會越來越標準,對我看過的每一款錢包幾乎都如此,無論連線方式是 USB 介面、無線連線或是藍芽連線。所以,解耦通常不是問題所在;相反,問題在於硬體錢包本身。
助記詞儲存、生成和恢復都是值得一讀的話題,但當我們都開始使用純粹的 “冷儲存” 時,就只是硬體錢包的一部分。合約的 ABI、解碼訊息的簽名、交易的限制/靈活性 給使用者帶來了定製化的空間(和可閱讀性),我在上面介紹每一層時都提到了其重要性。
一個很好的產品案例是來自 GridPlus 團隊的 Lattice1;這種硬體錢包要搭配專門的 SafeCard 使用,並用 SafeCard 實現了地址的可變更。錢包硬體有一個 64 GB 的韌體環境,你可以從任意合約匯入 ABI,來幫助解碼你正在簽名的交易的資料。
- 來自 https://wallet.gridplus.io/,教導使用者管理 Lattice1。這種辦法可以說比 “方法登錄檔” 更安全(尤其是當智慧合約的所有人沒有註冊他們的合約時)-
我相信這種型別的整合方法會變得越來越重要,因為與你的錢包繫結的價值和 身份/聲譽 會日漸提升。整合市場
第二、三、四種屬性都可以歸結為一個概念 —— 為你所用的錢包建立一種整合 dApp 的市場。從某種意義上上,這裡的主要 “錢包” 是一個平臺,所有安全模組和整合都可以接入的平臺。幾乎總會是 “交易和連線” 層。
我相信 MetaMask snaps 是朝著正確的方向邁出了一步:所有 dApp 開發者都可以接入已有的 MetaMask 錢包 UI,只需自己開發介面和整合方法即可;而使用者可以自己挑選這些碎片的組合 ——由此形成了錢包內的一個市場。如果我喜歡某一套使用者投資、收藏或社交的產品,我可以從 dApp 團隊處獲得產品,然後私下在我的錢包裡使用。既不需要錢包團隊手動開發對下一個 ENS、BrightID 或者 proof token 的支援,也不需要給每個月都有成打出現的新 DeFi 協議服務。這樣的市場對於小眾的社羣和 DAO 來說也很重要,他們可能有自己的 常用 dApp/產品 列表(或者說更有可能自己開發)。如果整合工作總要由錢包團隊來做、來推動,那 99% 的時間裡都只會有主流應用。
至於市場的所有權,我樂觀地相信,這些外掛都應被列在一個開源的庫中(類似於 Dune Analytics 在一個庫中展示所有的幕後情形)。我不會希望 Web 3.0 世界再來一個 Google Play 或者 Apple 應用市場,不論從准入限制還是價值抽取來說。最重要的是,沒人希望所有這些 dApp 外掛都會因為 MetaMask 被棄用而煙消雲散。使用者和開發者體驗
使用者體驗不應受制於 整合速度/dApp 功能缺失。我相信這一點上面已經說得很清楚了。開發者體驗當前主要受制於兩個問題:
因為產品的可組合性,任何人都能開發任何應用。但誰來負責開發特定的某個東西呢?
得到錢包或者一個整合平臺支援的條件是什麼呢?
我認為,因為缺乏標準化的協議 SDK,所有人都很受罪,尤其許多 前端/錢包 開發者不得不開發自己的連線方式。此外,大多數錢包都沒有一個清楚的 dApp 整合方法(deeplink 可不算),而 Zapper 依賴於一個不透明的請求系統。這對所有人都不好。
但也有一些正面案例。一些協議,比如 Uniswap 和 Superfluid,就多有自己的很棒的 Javascript SDK。我在錢包整合環節提過 MetaMask snaps,但 Zerion(雖然不是一個錢包)也有很好的整合方法 SDK 和開放的介面卡市場。擁有一個迅捷且獨立的 協議-錢包 整合方法,可以極大最佳化開發者體驗,任何一個開發者都可以將所有部件裝在一起。我還要強調,基礎協議的介面也是如此,額外的功能如分析和使用者教育,應該直接做在 dApp 頁面上(而不是錢包裡),以提供更穩健、更分眾化的使用者體驗,捕獲僅憑錢包不足於捕獲的使用者。我覺得這樣做是對的,因為這些功能對於訪問功能來說都不是核心。
把所有這些都放在心上,錢包團隊就可以專注於開發可組合的平臺和市場,而 dApp 開發者則專注於開發 SDK 和外掛以方便整合。有更多的標準也會有所幫助,因為許多 EIP 都是為錢包和庫而提出的(如果有人有志與我一同工作,歡迎聯絡我)。
結語
本文的觀念是我在為 Build With Consensys 作研究並與錢包開發交流時產生的。在我研究期間,我看了 Dan Finlay(MetaMask 創始人)在 Devcon 5(2019)上的演講的影片。我感覺他對錢包可組合性的想法並沒有獲得 dApp 可組合性那麼多的關注。他從很早開始就一直在推進這一點,因為 Dan 曾在這篇文章中寫道:
"在 Devcon 2 上,我上臺呼籲建立一個去中心化的標準化機構。我請求其他 web3 錢包的開發者加入,圍繞一個共享的測試套件,為開發者提供一個跨客戶端的、穩定的平臺。雖然有人表露出真切的激情和興趣(感謝 Casey Detrio),最終,無動於衷和協調的代價,使這個夢想變成幻想。"
因此,雖然本文提供了一些資訊,但它也是一種請求,希望我們(作為使用者也作為開發者)能夠花些時間思考這個問題,並開發這個重要的領域,直至我在上面設想的新應用成為現實。在 Dan 的文章中,他認為這會給我們提供給一個更安全、更好用、更有用的以太坊體驗。而在我看來,這意味著每個人都有可組合的通道來訪問以太坊。
感謝Thomas Rush的編輯。