在波哥大舉辦的 Devcon 6 大會中,Tomasz Tunguz 提到了 Web3.0 的一些統計資料:各主流公鍊 DAU 累計約為 250 萬,而傳統網際網路的 DAU 為 50 億,前者勉強夠上後者的 0.05%。從供給側來看,約有 1.6 萬名開發者在 Web3.0 開發,而世界上開發者總數達到了 2700 萬,Web3 開發者占蔔不足 0.06%。是以,Web3.0 離 mass adoption 還有很遠的距離。
錢包,作為 Web3.0 的入口,其使用者體驗直接影響到加密行業何時能迎來大規模化采用。盡管各大錢包在這方面卯足了勁,可在普通使用者的眼裡,錢包使用體驗依舊不盡人意。托管錢包雖然易用,但是安全性是一個很大的隐患,錢包被盜事件層出不窮。自托管錢包雖然相對安全,但保管長長的助記詞和私鑰的方式與傳統網際網路的使用者名 - 密碼體系相比複雜了很多。據 Chainalysis 的研究報告顯示,截止 2021 年約有 20% 流通中的比特币,因所有者不記得私鑰而丢失。很多人可能會有疑問,為什麼我們不能将傳統的驗證方式應用到 Web3.0 來呢?
為什麼我們隻能通過私鑰的方式進行驗證?為了回答這個問題,我們需要了一些背景知識和概念。首先是以太坊上的賬戶類型。以太坊一共有兩種賬戶:外部賬戶和合約賬戶。合約賬戶就是智能合約,其代碼由以太坊虛拟機來運作。而外部賬戶就是我們平常用來發起交易的錢包賬戶,它之是以被稱為「外部」是因為這種賬戶本身是沒有代碼的,是以獨立于以太坊虛拟機之外,由使用者通過私鑰進行控制。
圖檔來源: https://lh3.googleusercontent.com
合約賬戶雖然有自定義邏輯,但它是無法主動發起事務的。是以任何合約狀态的改變都依賴外部賬戶來發起,并由外部賬戶支付 Ether。那如何驗證事務的合法性呢?以太坊上的驗證方式為檢查事務的發起人和資産 (Ether) 的所有人,也就是這個外部賬戶的擁有者是一緻的。是以使用者需要通過錢包對交易進行簽署。而以太坊預設的驗證邏輯是中本聰設計的 secp256k1,也正是通過此算法生了密鑰對。簽名的正确性可以通過驗證該簽名是否出自跟某個共鑰對應的私鑰檢驗,是以使用者必須掌握這個私鑰。這就是為什麼無論如何優化錢包的使用者體驗也無法繞開私鑰的問題。
圖檔來源:https://www.ledger.com/academy/blockchain/what-are-public-keys-and-private-keys
前文提到,外部賬戶并不具備代碼邏輯。如果想要引入更複雜的邏輯來實作其他的功能,比如多簽等等,是無法在外部賬戶上直接進行的。那麼,目前有什麼樣的方式可以解決此問題呢?筆者将介紹被認為最可行有效的兩種解決方案:MPC 錢包和智能合約錢包。
MPC Wallet
MPC,全稱為 Multi-Party Computation,是一種重要的加密安全措施。其包含了很多種技術方案,在本文的語境下主要指 MPC-TSS。而 MPC 錢包,是通過對私鑰進行多方計算在鍊下實作「多簽「、」跨鍊「等等更複雜的驗證方式。簡單來說,就是将一個私鑰打碎成多片,将私鑰碎片交與一個去中心化的網絡進行計算和加密。當需要私鑰簽名時,則将碎片再拼接起來形成一個完整的私鑰。MPC 的核心思路為分散控制權以達到分散風險或提高備災的目的,有效避免了單點失敗等安全問題。
MPC 錢包「多方參與」的概念與「多簽錢包」有些類似,但實際上,雖然都可以實作「多簽」的功能,二者的實作途徑是不一樣的。之前我們所熟知的多簽錢包,比如 Gnosis Safe 等等,是建立在智能合約上的錢包,合約中定義了驗證邏輯,比如如果需要驗證一筆交易,需要一個以上的私鑰,或者五個中至少三個私鑰進行驗證。這類錢包屬于後文即将提到的智能錢包的一種。而 MPC 錢包,則是将一個私鑰分解成多個片段,驗證過程隻涉及到一個私鑰。并且計算網絡是鍊下的,與智能合約并無聯系。
Smart Wallet
智能合約錢包,正如其名,是基于智能合約而不是外部賬戶的錢包。市面上已經有不少的智能合約錢包,但因為這些智能合約是自定義的,缺乏統一的行業标準,且存在合約漏洞以及與其他合約相容性等等問題未獲得廣泛的應用。最近,智能合約錢包又因為「賬戶抽象」提案 EIP-4337 的重大進展而再次成為了熱議的話題。那麼賬戶抽象到底是什麼意思呢?實作了賬戶抽象後,又能給使用者帶來怎樣全新的體驗?在了解以太坊上的賬戶抽象之前,我們首先需要了解 CS 中抽象概念。
「抽象」是計算機科學最重要的概念之一,指在向外界提供必要的關鍵資訊的同時隐藏其背景的實作細節,使得開發者在處理一個抽象層的任務時,隻需要專注于這一個抽象層。舉一個貼近生活的例子:當我們作為觀衆想使用電視機的時候,我們隻需要熟悉作為電視觀衆需要了解的操作,比如如何打開和關閉電源、調整音量、切換頻道、連接配接其他裝置如遊戲機、DVD 等等。觀衆并不需要了解電視内部的實作細節,比如電視是如何通過纜線接受信号,如何轉換信号,如何将這些信号呈現在電視螢幕上等等。這些實作細節是造電視的人需要了解的。作為觀衆,我們隻需要通過外部接口,比如電源按鈕、遙控器、DVD 等控制電視。
賬戶抽象同理,我們作為錢包使用者,仍需要考慮很多因素,比如 gas price、gas limit、事務阻塞等等複雜的費用邏輯。其根本原因是基于外部賬戶的錢包不能夠被很好地「抽象」,直接導緻使用者需要處理很多本不應該由使用者處理的問題。那如何解決呢?邏輯很簡單,我們可以将外部賬戶和合約賬戶抽象,使外部賬戶更貼近合約賬戶,這樣就可以通過智能合約賦予錢包更加複雜的邏輯。智能合約錢包能夠實作的功能也不止「多簽」這一個場景了。
圖檔來源:https://miro.medium.com/
如果 EIP-4337 能夠實作以太坊賬戶的系統性更新,作為使用者的我們能獲得什麼新的體驗呢?理論上隻要能通過智能合約代碼定義的功能都能實作。首先,智能合約錢包可以通過非 secp256k1 的驗證算法進行驗證,使用者不需要面對長長的密鑰對和助記詞。同時,智能合約還可以賦予密鑰更多的邏輯。比如在多簽的場景下,給每一個私鑰定義不同的權限:50USDC 以下的交易需要私鑰 A 簽名,50USDC 以上的交易需要私鑰 B 簽名,超過 2000USDC 的交易需要私鑰 ABC 共同簽名等等。此外,通過移動端與區塊鍊互動會變得更加容易,我們可以授權一個專屬于手機的密鑰,且可以定義這個密鑰加上限制,比如隻能與固定幾個智能合約互動,或者智能驗證數額較小的交易等。其他能夠實作的功能還包括一鍵授權批量交易、交易黑名單等等。總之,智能合約錢包的想象空間非常大。
總結
介紹完兩種錢包,讀者可能會産生疑問,這兩種解決方案到底哪一種更好呢?筆者認為很難進行比較,因為 MPC 錢包和智能合約錢包本質上不在同一個層面解決問題。MPC 錢包是鍊下方案,既可以控制基于外部賬戶的普通錢包,也可以控制智能錢包。二者各有用例,并不沖突。是以,筆者将為大家分别列舉兩種方案的機遇和挑戰。
MPC 錢包作為鍊下方案,并不涉及到以太坊共識層或合約層的改動,使用者的使用成本更低,且在短期内更具可行性。此外,在一些特殊的使用場景比如跨鍊密鑰等更具優勢。智能合約錢包是以太坊的系統性更新,可以給使用者帶來更多全新的體驗和用例。但賬戶抽象是一個需要「興師動衆」的大工程,要求其他智能合約、開發者、以及以太坊架構都配合更新。過大的實操難度使從 2015 年就提出的願景到今天也沒有完全落地。而智能合約錢包對于使用者而言,最直接的問題就是錢包的使用成本将會提升,從建立錢包開始就需要支付費用。
筆者認為,智能合約錢包是我們的最終願景,MPC 是短期内更可行的方案,且在一些特殊場景更具優勢。因為成本問題,未來智能錢包在以太坊主網實作的可行性和可能性都較低。讀者可以更多關注 Layer2 上的賬戶抽象和智能錢包進展。目前 EIP-4337 是最可行的賬戶抽象方案,已經有不少智能合約錢包項目在探索這條路徑,智能錢包的全面落地可能比我們想象的更近。#智能合約#