https://www.alpow.com/things
在論壇帖子《作為通用錢包的Cosmos Hub》中,我提出了用戶和區(qū)塊鏈之間的未來主義關(guān)系,這涉及到當(dāng)前Cosmos-SDK和即將到來的功能的組合。"子私鑰"(或Msg授權(quán))被稱為Interchain Accounts(ICS-27)的標(biāo)準(zhǔn)以及Cosmos Hub本身的安全性。
這是一種充滿想象力提案,但它讓我思考我們需要進(jìn)入一個安全且易與許多區(qū)塊鏈交互的未來。不過這到底需要哪些步驟,我提出了一條前進(jìn)的道路,其結(jié)果是將關(guān)注點分離,并建立一類新的錢包,創(chuàng)立賬戶協(xié)調(diào)功能。
當(dāng)前的錢包狀況
到目前為止,我們已經(jīng)看到了很多錢包解決方案,它們試圖同時做很多事情。到目前為止,錢包的功能還不完備,但隨著我們進(jìn)入一個用戶希望與許多網(wǎng)絡(luò)交互的世界,當(dāng)前無法擴(kuò)展的架構(gòu)尚無法滿足這一需求。在一個高層次上,錢包的各種職責(zé)包括:
私鑰管理
應(yīng)用界面
交易管理
Ethereum已經(jīng)經(jīng)歷了一些這樣的成長之痛,因為像EVM這樣的圖靈完整的虛擬機(jī)幾乎允許任何種類的應(yīng)用存在,而且它們都期望從一個錢包中工作。雖然Ethereum錢包已經(jīng)提出了協(xié)議和巧妙的解決方案,為各種各樣的應(yīng)用提供接口,但他們?nèi)匀黄谕@些應(yīng)用是來自一個通用的EVM基礎(chǔ)設(shè)施。隨著我們看到特定應(yīng)用區(qū)塊鏈的模式成為現(xiàn)實,通過IBC連接,Ethereum如何處理各種應(yīng)用的界限將被打破。
切實可行的方法是將關(guān)注點分離。讓這三個任務(wù)作為獨立的解決方案存在,每個都可以專注于做好自己的唯一任務(wù)。這將揭示出對一種新型服務(wù)的需求,我一直稱之為賬戶協(xié)調(diào)功能。
私鑰管理
密碼學(xué)是很難的。如果你不是專家,犯錯誤的幾率很高,后果可能是災(zāi)難性的。期望所有錢包和dApp開發(fā)者都在內(nèi)部擁有這種專業(yè)知識是不公平的。傳統(tǒng)的應(yīng)用程序已經(jīng)認(rèn)識到了這一點,并且經(jīng)常通過將認(rèn)證委托給使用oAuth標(biāo)準(zhǔn)的第三方來解決。
你可能認(rèn)為這是錢包唯一的真正責(zé)任是保證你的私鑰安全。但當(dāng)我介紹其他常見的功能時,你會發(fā)現(xiàn)這遠(yuǎn)非如此。事實上,這往往是錢包建設(shè)者最不具備的能力。密碼學(xué)和安全專家應(yīng)該負(fù)責(zé)開發(fā)行業(yè)標(biāo)準(zhǔn)的解決方案,并實施私鑰存儲的最佳實踐。這應(yīng)該是他們的全部業(yè)務(wù),然而相反,我們看到現(xiàn)在的錢包在安全性方面做的不錯--但當(dāng)涉及到密碼學(xué)時,這并不夠好。
如果將私鑰存儲的責(zé)任從錢包中移除,可能會導(dǎo)致更多種類的安全解決方案,這些解決方案依賴于不同的假設(shè)并提供不同的功能。目前已經(jīng)有很多超越傳統(tǒng)軟件存儲的私鑰解決方案:像Ledger中的硬件安全模塊,或者其他加密技術(shù),比如Torus使用的shamir秘密共享,像ZenGo使用的閾值方案,多方計算,或者新穎的零知識技術(shù)。鄭重聲明,我認(rèn)為保管私鑰管理的共同責(zé)任空間也完全沒有被開發(fā)出來。
不管私鑰到底是如何存儲的,存儲方案的責(zé)任其實應(yīng)該止于此。其只做一件事,而且要做好--存儲私鑰。對私鑰的訪問應(yīng)該由類似的安全授權(quán)技術(shù)來處理。
WalletConnect,或者類似的用于在私鑰管理器和應(yīng)用程序之間傳輸數(shù)據(jù)的協(xié)議是進(jìn)一步授權(quán)應(yīng)該發(fā)生的地方。
應(yīng)用界面
如今,一個錢包對應(yīng)用接口的范圍相當(dāng)廣泛。一方面,一些錢包提供了對應(yīng)用功能的深度集成訪問。Argent和Gnosis Safe都在每個應(yīng)用的基礎(chǔ)上支持越來越多的自定義接口。這也是大多數(shù)Cosmos錢包的路線,網(wǎng)絡(luò)期望最低限度的stake和治理接口。直接在錢包內(nèi)提供自定義接口意味著你可以確保更好的用戶體驗,但它限制了錢包可以訪問的應(yīng)用數(shù)量,也限制了錢包變成新的應(yīng)用。
在另一端,是試圖將大部分接口責(zé)任推給應(yīng)用開發(fā)者的錢包。一般來說,錢包使用web3.js或cosmJS將一個API或接口接入到應(yīng)用程序中;蛘,錢包可能包含它自己的瀏覽器,并已經(jīng)集成了API(Mist、Metamask Mobile、Status和Coinbase Wallet)。它們也可以利用瀏覽器擴(kuò)展來接入API(Metamask,Keplr)。WalletConnect允許接口在移動和桌面瀏覽器之間以及移動和移動之間傳輸。無論哪種方式,都要由應(yīng)用開發(fā)者來訪問和利用錢包API,以便為用戶提供簽名功能。這條路徑消除了錢包作為訪問應(yīng)用的瓶頸,但也帶來了自身的挑戰(zhàn)--即安全性和流暢的用戶體驗。
應(yīng)該考慮一種安全的授權(quán)技術(shù),以確保應(yīng)用程序能夠訪問簽名功能,而不會因為確認(rèn)的界面而勸退用戶同時也不會使用戶陷入不小心簽名的境地。MetaMask一直在嘗試解決這個問題,它創(chuàng)建了一個可組合的安全接口,用于私鑰與應(yīng)用程序的通信,稱為 "Snaps"。它在很大程度上借鑒了Agoric的首席科學(xué)家Mark Miller在對象能力方面的工作,對象能力對可以跨環(huán)境傳輸?shù)木_對象級控制進(jìn)行編碼。Snaps提供了連接應(yīng)用程序和私鑰管理器所需的安全性和標(biāo)準(zhǔn)化,但我認(rèn)為Metamask在這個架構(gòu)上走得還不夠遠(yuǎn),因為所有三個錢包功能都可能被隔離并使用這個模型組成。
交易管理
雖然我們已經(jīng)看到很多錢包承擔(dān)了提供應(yīng)用接口的重任,但我還是認(rèn)為,到目前為止,錢包的主要職責(zé)是私鑰管理。這使得錢包的第三個職責(zé)--交易管理的資源嚴(yán)重不足。我希望看到這成為錢包的主要職責(zé),因為應(yīng)用接口和私鑰管理成為指定第三方的責(zé)任。
交易管理可以被認(rèn)為是應(yīng)用和簽名解決方案之間的實際接口。這是一些操作的請求被解析成可以被私鑰簽名的格式的步驟。它包括與應(yīng)用的通信以及與私鑰管理的通信。在這兩者之間,需要簽署的數(shù)據(jù)應(yīng)該被解析,并以一種用戶可以理解他們正在簽署的內(nèi)容和原因的方式顯示給用戶。此外,這些簽名請求的歷史和狀態(tài)應(yīng)該被記錄下來并提供給用戶。
當(dāng)使用Ethereum時,交易管理是很棘手的,因為基本上只有一種交易類型(eth_send),但它包括一個數(shù)據(jù)字段,當(dāng)針對智能合約時,可以引用任何數(shù)量的方法。如果你很幸運,錢包能夠訪問與它交互的特定合約的ABI文件,允許將數(shù)據(jù)字段轉(zhuǎn)換為函數(shù)名和參數(shù)。ABI文件還可以讓錢包顯示交易成功處理后發(fā)出的事件。這就進(jìn)入了區(qū)塊瀏覽器的領(lǐng)域,它是一個完整的服務(wù),基本上專門用于賬戶歷史--以及整個網(wǎng)絡(luò)的歷史。然而到目前為止,區(qū)塊瀏覽器在網(wǎng)絡(luò)方面大多是單一的。
在這空間中,有許多不同的消息可以包含在交易中。這些消息中的每一個都有不同的功能,但傳統(tǒng)上都是自行運行的,所以不需要外部的ABI文件。隨著向protobuf的遷移,我們看到正在進(jìn)行的討論是如何保留這些性質(zhì),同時確保protobuf帶來的所有性能的提高。一個選擇將是在protobuf文件中像ABI一樣使用,但還有許多其他解決方案仍在探索中。
無論網(wǎng)絡(luò)架構(gòu)如何,這都是一個棘手的問題,但對于確保用戶能夠驗證他們到底在做什么是至關(guān)重要的。當(dāng)額外的私鑰被添加到這個組合中時,這個問題會變得更加復(fù)雜。一些錢包已經(jīng)允許你創(chuàng)建許多賬戶,這些賬戶都來自于一個共同的助記詞與私鑰派生路徑。這對于那些不想把自己的defi賬戶和游戲賬戶混在一起的用戶來說,是一個很有用的功能。通過私鑰派生可以在網(wǎng)絡(luò)之間進(jìn)行切換,盡管我不知道有哪個Ethereum錢包允許你通過支持多個助記詞和私鑰來合并賬戶(不過Keplr有)。這就給用戶帶來了負(fù)擔(dān),要跟蹤哪個身份與哪個私鑰相關(guān)聯(lián)。
賬戶協(xié)調(diào)功能
交易管理一直沒有得到充分的服務(wù),隨著網(wǎng)絡(luò)的增加和相應(yīng)私鑰的增多,這個問題只會越來越嚴(yán)重。隨著子私鑰將賬戶能力分配給特定私鑰的能力的增加,這一問題將成倍增加。職責(zé)范圍的擴(kuò)大,值得為這個角色起一個新的名字。我想為一種新型的錢包提出一個理由,它主要關(guān)注的是成為一個賬戶協(xié)調(diào)服務(wù)。
賬戶協(xié)調(diào)功能的主要目標(biāo)是跟蹤哪些私鑰在哪些網(wǎng)絡(luò)上具有哪些功能--以及如何使用WalletConnect等協(xié)議訪問這些私鑰的簽名功能。雖然它應(yīng)該努力實現(xiàn)外部的隱私和匿名性,但從用戶的角度來看,它應(yīng)該對所有dApp、私鑰存儲和網(wǎng)絡(luò)的活動進(jìn)行完整的概述。它可能會要求一個私鑰助記詞的主公鑰,以便得出所有可能的公鑰。這將允許賬戶協(xié)調(diào)功能檢查所有可能的網(wǎng)絡(luò)上的所有可能的賬戶,看看你是否曾經(jīng)在那里進(jìn)行過交互。它將檢測私鑰是否是多簽名、基于合同的錢包、組模塊或子私鑰的一部分。隨著您的確認(rèn),它將開始為您跟蹤所有這些賬戶,記住您的偏好,以便在何時使用哪個私鑰。
賬戶協(xié)調(diào)功能應(yīng)該允許你審計你在每個應(yīng)用程序上的互動,同時保留一個連貫的歷史-想想谷歌的oAuth告訴你當(dāng)前登錄了哪些服務(wù)和設(shè)備。最終,這應(yīng)該看起來像一個以用戶為中心的多網(wǎng)絡(luò)區(qū)塊瀏覽器,跟蹤你自己的所有私鑰并代表你協(xié)調(diào)它們。這將需要大量關(guān)于你使用過的或未來可能與之交互的眾多網(wǎng)絡(luò)的資料。這種資料可以從不同的來源收集,并將取決于你所面對的到底是哪種應(yīng)用。我想象大多數(shù)信息應(yīng)該是來自應(yīng)用程序本身,通過像WalletConnect這樣的界面。
賬戶協(xié)調(diào)功能將牢牢地站在你的私鑰和應(yīng)用程序之間,它將作為雙方之間的中介,并將加入你在基于區(qū)塊鏈的網(wǎng)絡(luò)上的所有互動。它的建立將只為你服務(wù),所以雖然它將擁有你的信息寶庫,但只能由你自行決定是否訪問。