原標題《觀點|可組合錢包的重要性》

我曾經講解過去中心化應用(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 的編輯。

(完)

原文鏈接:

https://medium.com/coinmonks/1the-importance-of-composable-wallets-for-users-and-developers-accb2aadff49

作者: Andrew Hong

翻譯: 阿劍