摘要: 理解以太坊錢(qián)包的歷史、所用的模塊,以及它們對(duì)未來(lái)的 dApp 開(kāi)發(fā)和用戶(hù)體驗(yàn)的影響我曾經(jīng)講解過(guò)去中心化應(yīng)用(dApp)的產(chǎn)品可組合性,當(dāng)然,用的是非常簡(jiǎn)單的層疊示意圖:
實(shí)際上,有兩個(gè)層級(jí)被我省略掉了,就是錢(qián)包和 SDK;而且,還可以再加上有關(guān) “鏈” 的一層:
本文我準(zhǔn)備談?wù)?,為什么這些額外的復(fù)雜性會(huì)導(dǎo)致人們的視角發(fā)生轉(zhuǎn)變:可組合的錢(qián)包會(huì)對(duì)用戶(hù)和開(kāi)發(fā)者兩端都產(chǎn)生越來(lái)越重要的影響。一般來(lái)說(shuō),在走到產(chǎn)品開(kāi)發(fā)的 “最后一公里” 的時(shí)候,也就是開(kāi)發(fā)團(tuán)隊(duì)要決定接入盡可能多的錢(qián)包時(shí),人們才會(huì)想起還有錢(qián)包這回事(假設(shè)這個(gè)團(tuán)隊(duì)既負(fù)責(zé)產(chǎn)品的智能合約后端,也負(fù)責(zé)前端)。目前來(lái)說(shuō)這沒(méi)什么大問(wèn)題,因?yàn)榇蠖鄶?shù) dApp 在用戶(hù)交互上都是很簡(jiǎn)單的(即,授權(quán) + 存入、拍賣(mài)/買(mǎi)入,以及互換)。在互動(dòng)的 前/后 沒(méi)有太多需要管理或表示的東西。
但我們的生態(tài)還會(huì)變得更加復(fù)雜的,那時(shí)候怎么辦呢?在可預(yù)見(jiàn)的未來(lái),我們都要著手管理自己的以 token 形式體現(xiàn)的數(shù)字身份,比如 skills、credit scores、social circles,等等。這就會(huì)在接入我們今天所用的標(biāo)準(zhǔn)協(xié)議前產(chǎn)生額外的一個(gè)交互步驟、要管理更復(fù)雜的網(wǎng)路和用戶(hù)關(guān)系,以及相應(yīng)的市場(chǎng)。思索這個(gè)前景,我們會(huì)自問(wèn):每個(gè)產(chǎn)品都要自己管理一個(gè)特定的前景,這合理嗎?Web 2.0 時(shí)代的方法就是創(chuàng)建另一個(gè) 應(yīng)用市場(chǎng)/網(wǎng)站,但我覺(jué)得我不會(huì)喜歡再有一個(gè)網(wǎng)站來(lái)跟蹤我怎么管理自己的身份和自己所用的網(wǎng)絡(luò)。我認(rèn)為,這樣私人的東西應(yīng)該在錢(qián)包層完成處理,因?yàn)樵谶@個(gè)環(huán)境中,個(gè)人自主和隱私性是第一位的。
雖然我不介意為了使用不同的協(xié)議而跳轉(zhuǎn)到不同的網(wǎng)站,但我也不希望為了管理我的鏈上交互的不同部分而使用多個(gè)錢(qián)包。這樣很蠢,而且每多一個(gè)就多一些安全風(fēng)險(xiǎn)。但如果我只使用一種錢(qián)包,那我就把自己跟這個(gè)錢(qián)包背后的開(kāi)發(fā)團(tuán)隊(duì)的內(nèi)在風(fēng)險(xiǎn)綁定起來(lái)了 —— 更不用說(shuō)總會(huì)有他們還沒(méi)開(kāi)發(fā)的新功能。請(qǐng)記住,我們已經(jīng)身處一個(gè)迅猛發(fā)展的世界中,沒(méi)有哪個(gè)團(tuán)隊(duì)可以樣樣精通。
這就是為什么我們需要錢(qián)包的可組合性。雖然我想直接開(kāi)始,但我還沒(méi)講到錢(qián)包是由哪些部分組成的。在談到 DeFi 和 許多以太坊 dApp 時(shí),我們已經(jīng)有了 “貨幣積木” 這個(gè)詞;因此我準(zhǔn)備把錢(qián)包的可組合性模塊稱(chēng)為 “通道積木(access lego)”。
四個(gè)層級(jí)中的每一個(gè)都應(yīng)允許用戶(hù)靈活地選擇產(chǎn)品,而每個(gè)層級(jí)都應(yīng)由產(chǎn)品提供者提供定制化的積木。
這里有很多東西可以深挖,所以我們先快速回顧下密碼學(xué)貨幣錢(qián)包的歷史,以便更好地理解這些積木,以及我們今天所用的先進(jìn)錢(qián)包服務(wù)是如何得來(lái)的。
以太坊錢(qián)包簡(jiǎn)史
第一個(gè)以太坊錢(qián)包的靈感來(lái)自 Bitcoin Qt 錢(qián)包,是由 Mist 團(tuán)隊(duì)做出來(lái)的。
- 圖片來(lái)源 -
Mist 錢(qián)包看起來(lái)跟 Qt 非常像,都是一個(gè)需要下載的軟件,然后可以導(dǎo)出交易數(shù)據(jù),也支持 區(qū)塊同步/區(qū)塊瀏覽:
- 圖片來(lái)源 -
這個(gè)錢(qián)包其實(shí)是想把一個(gè)以太坊節(jié)點(diǎn)能夠做到的事情都裝進(jìn)一個(gè)軟件里 —— 那就需要安裝大量依賴(lài),整體的用戶(hù)體驗(yàn)也不好。到 2016 年,MetaMask 出現(xiàn),是最早的基于瀏覽器的錢(qián)包之一。自此,dApp 可以從錢(qián)包中解耦出來(lái),只需嵌入錢(qián)包的連接方式即可。這一點(diǎn)隨著生態(tài)系統(tǒng)的成長(zhǎng)變得非常重要,因?yàn)榇饲皢蝹€(gè)團(tuán)隊(duì)想跟蹤所有 EIP 的進(jìn)展和發(fā)展出來(lái)的 token/協(xié)議 是非常困難的(現(xiàn)在也仍然如此)。我想指出的是,雖然這增加了 dApp 產(chǎn)品的可組合性,這還不是上面的 “通道積木示意圖” 中所指的錢(qián)包內(nèi)的智能合約集成。這一部分一直到新的集成方式如 WalletConnect 出現(xiàn)之后才有所改變。
- 錢(qián)包連接方式嵌入示例 -
這樣一來(lái),錢(qián)包的一些責(zé)任和負(fù)擔(dān)就移除了,現(xiàn)在它的重點(diǎn)變成了交易構(gòu)建、簽名以及維持與區(qū)塊鏈的連接。我不想深究細(xì)節(jié),但交易構(gòu)建意味著要從 dApp 處接收一些交易參數(shù)、并且其它參數(shù)要保證完全在錢(qián)包控制之下。這使我們走向了對(duì)錢(qián)包(也可稱(chēng)為 “提供者”)可用的 RPC 調(diào)用,最早由 EIP-1193 定義。dApp 可以發(fā)送一些參數(shù)如目標(biāo)地址、數(shù)據(jù)、gas limit/price、數(shù)值給錢(qián)包,但 無(wú)法控制鏈 ID、發(fā)送者地址以及 nonce 等涉及錢(qián)包安全的參數(shù)。
有了這種新型錢(qián)包之后,我們又多了兩種復(fù)雜的用戶(hù)體驗(yàn):
記住 其他用戶(hù)/朋友 的地址是很困難的,不安全,而且容易發(fā)生人為的錯(cuò)誤
交易附帶的字節(jié)碼是不可閱讀的,除非你非常熟悉函數(shù)選擇器以及 數(shù)據(jù)/參數(shù) 的哈希值。要是你沒(méi)有合約的 ABI,那就有你好看的了。
為了解決第一點(diǎn),ENS 在 2016/2017 年月 EIP-137 一起推出,成為了我們的第一塊社交積木。現(xiàn)在,大家都可以用一個(gè)網(wǎng)站域名來(lái)表示自己的以太坊地址(比如 vitalik.eth),在 消息/轉(zhuǎn)賬 中使用即可免去輸入長(zhǎng)長(zhǎng)的地址。這只是社交智能合約層的一部分;其余部分要花更大的精力來(lái) 解耦/實(shí)現(xiàn)可組合性。
關(guān)于第二點(diǎn),Parity 創(chuàng)建了一個(gè) “方法注冊(cè)表”,被廣泛用戶(hù)在錢(qián)包的簽名界面給出人類(lèi)可讀的信息。EIP-712 在此發(fā)揮了重要作用,盡管它到最近才獲得更多關(guān)注。不過(guò),即使有了這些設(shè)置,還是很難保證你的瀏覽器沒(méi)有被黑或被欺騙從而顯示出不真實(shí)的 交易/信息。這是使用熱錢(qián)包(即總是連接到互聯(lián)網(wǎng)、并且沒(méi)有與你的計(jì)算機(jī)環(huán)境的其余部分隔離開(kāi)來(lái)的錢(qián)包服務(wù))的最大問(wèn)題之一。
常見(jiàn)的解決方案是一個(gè)硬件錢(qián)包,開(kāi)拓者是 Ledger,從 2014 年起步。MetaMask 在 2018 年首日添加硬件錢(qián)包支持,正式地解耦了安全層和 交易層/連接層。我們后面還會(huì)再回顧這一點(diǎn),因?yàn)?Ledger 作為冷存儲(chǔ)錢(qián)包固然很棒,但一些新產(chǎn)品也有很大改進(jìn)。
- 正上方的即是一個(gè) Ledger 錢(qián)包 -
于此同時(shí),我們看到,許多復(fù)雜的協(xié)議在 2020 年夏天開(kāi)始在 DeFi 世界里領(lǐng)一時(shí)之風(fēng)氣(其中大部分都開(kāi)發(fā)了超過(guò) 2~3 年)。這給了我們?cè)絹?lái)越多的代幣,學(xué)會(huì)安全管理也變得越來(lái)越重要。為了幫助大家跟上圈子的進(jìn)步,人們創(chuàng)建了一種新的 RPC 端點(diǎn),讓 dApp 可以在錢(qián)包所跟蹤的代幣列表中添加種類(lèi)。更多管理資產(chǎn)的工具被創(chuàng)建出來(lái),比如 Argent vaults 和 Gnosis multi-sig safes(我還認(rèn)為這兩款產(chǎn)品與社交層有關(guān),因?yàn)樗麄兌加卸嘤脩?hù)機(jī)制以及 DAO 機(jī)制)。人們還給 dApp 的數(shù)據(jù)分享創(chuàng)建了 “許可連接” 標(biāo)準(zhǔn)(EIP-2255),以防止對(duì)錢(qián)包的惡意訪(fǎng)問(wèn)。資產(chǎn)管理/資產(chǎn)聚合器、分析器,也因?yàn)?Zerion 和 Zapper 而從錢(qián)包中解耦了出來(lái)(下一章節(jié)我們還會(huì)回頭講解這兩個(gè)產(chǎn)品)。
自 2019 年開(kāi)始,手機(jī)錢(qián)包也出現(xiàn)了增長(zhǎng)。Rainbow wallet 是最佳范例之一,他們的用戶(hù)體驗(yàn)設(shè)計(jì)得非常好。但要講到無(wú)縫集成,他們也才剛剛開(kāi)始。
大多數(shù)其它手機(jī)錢(qián)包(比如 MetaMask 手機(jī)版和 Coinbase Wallet)都嘗試并且在應(yīng)用內(nèi)開(kāi)發(fā)了一個(gè) dApp 瀏覽器,依賴(lài)于 deeplink 而非直接集成。這些 deeplink 無(wú)法提供很好的用戶(hù)體驗(yàn),但在以太坊上開(kāi)發(fā)的產(chǎn)品又多到錢(qián)包團(tuán)隊(duì)無(wú)法設(shè)計(jì)出一個(gè)可以與所有產(chǎn)品交互的大一統(tǒng)接口。假設(shè)每個(gè)錢(qián)包應(yīng)用團(tuán)隊(duì)都專(zhuān)門(mén)為一個(gè)應(yīng)用場(chǎng)景(消息、NFT/市場(chǎng)、DeFi,等等)做優(yōu)化 —— 那么,我的安全風(fēng)險(xiǎn)都跟我所用的錢(qián)包數(shù)量成正比。也許它們都是最小化的,因?yàn)榘踩K已經(jīng)完全解耦 —— 但因?yàn)槭袌?chǎng)已變得碎片化,開(kāi)發(fā)者就必須為進(jìn)入不同的系統(tǒng)排定優(yōu)先級(jí)。Rainbow 錢(qián)包團(tuán)隊(duì)一開(kāi)始想做 錢(qián)包聚合器/管理器(基于他們 從 2019 開(kāi)始構(gòu)建的早期 GitHub 庫(kù)),所以我認(rèn)為他們已經(jīng)考慮過(guò)這個(gè)問(wèn)題了。也就是說(shuō),我們可以看到,智能合約的接口已經(jīng)是半解耦的了,但這一集成還不能自由組合,因?yàn)殄X(qián)包團(tuán)隊(duì)正是瓶頸。換句話(huà)說(shuō),所有 dApp 都可推送到某個(gè)錢(qián)包來(lái)使用,但一個(gè)錢(qián)包并不能保證所有 dApp 都支持他們。<