比特幣 Taproot 升級即將到來,它包含了哪些重要內容?


比特幣的 Taproot 軟分叉升級將於比特幣區塊高度 709632 處(預計是 2021 年 11 月 15 日)啟用。此次升級包含了許多重要而精彩的內容,然而,在中文世界裡卻缺乏足夠的重視。本文將從技術角度簡要介紹 Taproot 的升級內容,並以此體現比特幣的發展方向。

常見的說法是,Taproot 提升了比特幣的隱私性、智慧合約功能性、同質性,云云。但是,要想理解 Taproot 升級的內容和想象空間,我們得先了解一些比特幣。

比特幣上的智慧合約

許多人不瞭解的是,比特幣也支援程式設計智慧合約 2,只不過其智慧合約的型別與其他區塊鏈(比如以太坊)的不同。詳細解釋這種區別需要專門的一篇文章,這種區別在這篇文章裡也不重要。這裡僅僅介紹比特幣智慧合約程式設計的幾個常見的模組 3,方便大家理解其應用場景:

多簽名合約。比特幣支援多簽名授權使用資金:在 N 個記錄好的公鑰中,必須有 M 個公鑰所對應的私鑰(對同一個操作的)簽名,該筆資金才可動用。比特幣支援最多 15 個公鑰的多簽名合約。

時間鎖。使用者可以使用兩種型別的時間鎖來規定一筆資金的可用時段:(1) CLTV,絕對時間鎖,以具體的時間或具體的區塊高度來定義,過了這個時間才可動用;(2) CSV,相對時間鎖,比如生成該項資金的交易上鍊的 1000 個區塊後,該筆資金才可動用。

多條件程式設計。即在指令碼中使用 「IF … ELSE …」 式的語句,為同一筆資金設定多個解鎖條件,任一條件滿足即可使用該資金。比如:「A 公鑰所對應的私鑰可解鎖,或者,在區塊高度 XXXX 以後,B 公鑰所對應的私鑰可以解鎖,或者,在該交易上鍊的 YYYY 個區塊以後,A、B、C 三個公鑰中任意兩個所對應的私鑰可以解鎖」

如讀者可以想象的,這幾個模組看起來非常簡單,組合起來可能性卻非常多:多簽名合約定義了不同主體的許可權,可以適應極為豐富的應用場景,從公司運營,到家庭金庫;時間鎖則規定了不同主體在不同時段的許可權。而多條件則顯著放大了這些許可權控制的組合效果。

你甚至僅憑几個條件,就可以做出一個支援社交恢復、帶遺產分配效果的合約:「我(A 公鑰)可以控制這筆資金;如三個月無人動用,我(B 公鑰)和四個朋友,五取其三可以一起控制這筆資金;如果一年無人動用,我的妻子可以控制這筆資金」。

但是,這些合約要實際上派上用場,兩個因素就不能忽視:效率性和隱私性。

效率性的意思是,比特幣交易的手續費是根據交易的體積來計算的,更多條件的指令碼會佔用更大的空間(以位元組數計),交易費也會更高。

隱私性的考量是,指令碼曝光會使其他人知道某些公鑰之間是有身份關聯的,更容易分析出公鑰主人的真實身份。

在當前,比特幣的合約體現為 P2SH 「地址」(實際上就是一條雜湊值)。其特點是,在生成合約時,指令碼可以不公開,有需要的直接給指令碼的雜湊值支付;但是,這些資金在花費時,與這個雜湊值對應的指令碼就要完全公開出來放到交易中(否則無以驗證這個指令碼的雜湊值正是這個雜湊值)。以多簽名合約為例,其他人可以直接給這個多簽名合約指令碼的雜湊值支付,但是,當多簽名合約的參與者要使用這些資金時,就必須把整個指令碼公開 3。

此外,在 SegWit 升級以前,單簽名的個人錢包與合約錢包是涇渭分明的,前者是 P2PKH 地址,後者是 P2SH 地址,僅從地址上就可以看出來,這又是一個對隱私不利的因素。在 SegWit 升級之後,支援隔離見證的個人錢包也可採取 P2SH 的形式,但原生隔離見證地址(P2WPKH)和合約地址(P2WSH)仍然是涇渭分明的 4。

延伸閱讀  無需信任、支援多鏈且兼顧隱私,Attrace 如何構建 Web3 營銷新模式?

瞭解了這些以後,讓我們來看看 Taproot 升級的三大部分(MAST、Schnorr 簽名、Taproot)如何做得更好。

默克爾抽象語法樹(MAST)

默克爾化抽象語法樹(Merklized Abstract Syntax Trees, MAST) 5 的含義是,在比特幣的指令碼驗證中支援驗證默克爾證據。

默克爾樹是將多個資料元素雜湊成一個雜湊值的密碼學方法。其結構和雜湊函式的特點決定了,可以提供一些證據(雜湊值)來證明,某個資料元素參與生成了這個雜湊值。如下圖所示:我們將(相鄰的)資料元素兩兩不斷雜湊,最終生成一個默克爾根。


同理,如下圖,當我要證明紅色資料 「Banana」 參與生成了紫色的雜湊值(默克爾根)時,我只需提供紅色資料和三個綠色的雜湊值就可以了,無需曝光實際上共同生成了默克爾根的其餘 7 個元素。這就是默克爾樹和默克爾證據的作用。


聰明的讀者一定想到了,有了這個功能,合約的編寫者就可以把多個條件劃為不同的資料元素,雜湊出一個默克爾根值來;在需要以某個條件來解鎖比特幣時,只需證明這個條件在這棵默克爾樹上即可,無需公開所有其他條件。

沒錯,這正是 MAST 的妙用。如下圖所示,這筆資金的解鎖條件有兩個,而編寫者把它們分割了開來,用默克爾樹抽象成了一個雜湊值,在以任一個條件解鎖使用時,都不需要公開另一個。


MAST 在 P2SH 的基礎上邁出了一大步,其提升效果首先體現在隱私性上:原本在 P2SH 中,合約在使用時就一定要公開全部的指令碼內容,不論那些內容用到沒用到,都必須公開;現在,有了 MAST,使用者就只需要公開需要用到的解鎖條件,無需公開全部內容了;同時,別人也根本不知道你還有多少個條件。

其次,它還在效率上有所提升:使用者只需提供需要用到的部分指令碼,及其默克爾證據,在整個指令碼比較龐大時,這種體積節約的效果會非常明顯。

由此,未來的比特幣使用者可以編寫條件非常多的合約,獲得更好的控制效果而只需支付更少的手續費;甚至,可以有意包含一些垃圾條件來充實默克爾樹,獲得隱私提升的效果。

這也是本篇副標題 「雜湊即銀行」 的由來:比特幣的指令碼實際上全部圍繞著資金的控制,實現這種控制的關鍵一環正是多條件,而有了 MAST,即使是極多條件的資產管理指令碼,也可以壓縮成一個雜湊值,在使用時僅需暴露一部分。成本的降低可以開啟非常多的可能性,等待錢包開發者去一探究竟。

Schnorr 簽名

Taproot 升級之後,比特幣將不僅支援基於橢圓曲線的密碼學簽名,還支援 Schnorr 數字簽名方案 6。

Schnorr 簽名的構造方法在此不提,我們僅介紹其重要屬性:簽名 / 金鑰 聚合 —— 多個私鑰的簽名,可以聚合成一個簽名,看起來彷彿是一把私鑰簽出的。簽名時,仍然是各私鑰持有者各自簽名的;驗籤時,卻彷彿這些簽名是一把對應於已知公鑰(當然就是這些參與者的公鑰聚合而成的公鑰)的私鑰簽出的。

也就是說,有了 Schnorr 簽名,其他人就無法分辨一個簽名到底是單人簽出的,還是多人共同簽出的了;多簽名的解鎖條件,可以用一個聚合公鑰來替代。所有 n-n 的多簽名合約,都可以享受到 Schnorr 簽名提供的隱私保護。其最顯然的應用就是閃電網路通道,因為閃電網路通道是一個 2-2 的多簽名合約;此後,其他人就無法憑藉簽名的數量來分辨支付通道和個人使用者了。

至於 m-n 的多簽名合約,也不用擔心,別忘了我們有 MAST:我們可以把所有可能解鎖的情形都化成一個分支,在使用某個分支時,所提供的簽名也只需是聚合簽名。例如,假設我們要做一個 2-3 的多簽名合約,在公鑰 A、B、C 中三取其二,這個多簽名合約效果等同於 「要麼(A、B)解鎖、要麼(B、C)解鎖、要麼(A、C)解鎖」,這可以理解為一個多條件的指令碼,每個條件都是一個 2-2 多簽名,因此也都可以用相應的聚合公鑰來定義解鎖條件(而無需以多簽名來定義)。所以,當我們需要以某種組合解鎖資金時,只需用 MAST 暴露一個分支、提供一個簽名,他人依然不知道這到底是一個人,還是兩個人,還是多個人。

延伸閱讀  從解構到建構,區塊鏈技術能否創造新的秩序?

還沒完呢。

Taproot

按我們這種理解的路徑,Taproot 升級的最後一個部分就是 Taproot,是其名字的由來。在提出這個概念時,Gregory Maxwell 寫道 7:

「在討論默克爾化指令碼時,一個大家常常提起的問題是,我們能否實現一種精巧的合約,使其與最常見、最無聊的支付沒有分別。不然的話,使用這些時髦技術的輸出的匿名集,也就是另一個小眾集合而已,在實踐中沒有多大的意義。」

在這裡,Maxwell 敏銳地抓住了問題的要點:比特幣的隱私保障來自於 「大隱隱於市」,最好所有的資金單元(UTXO)看起來都一個樣,這樣使用者的真實身份、真實構成才最難把握。但是,在引入新的功能時,總免不了要提出新的 「地址」 型別,如果使用這種功能的使用者很少,則每一個使用者暴露真實身份的可能性都會大大增加,而這一點可能導致這些新功能根本不會被使用,從而失去意義。

而且,儘管 MAST 在合約的隱私性上有重大作用,但如果還像過去那樣,個人錢包是個人錢包,合約錢包是合約錢包,一目瞭然的話,就不能不說,這樣的隱私性仍然是有瑕疵的。

人們亟需一種辦法,來終結這種 個人錢包 / 合約錢包 的區分,為比特幣的隱私性補上點睛之筆。為此,最起碼要實現的一點是,這種帶有合約的錢包,在使用者個人日常使用中,其代價與普通的個人錢包沒有區別(經濟性)。

Taproot 就是這樣的一種辦法,它利用了金鑰聚合的特點,提出了自帶兩種使用路徑的指令碼模式:一種是 n-n 的多簽名合約;另一種是使用者自定義的合約指令碼。

這裡用的是 2-2 多簽名合約,但使用者可以想到,只要金鑰聚合的技術可用,1-1 也就是單簽名同樣可以利用這種編寫指令碼的辦法。重要的是:

儘管這是一個帶有自定義合約的資金,但在不動用合約、僅使用 n-n 多簽名時,其手續費成本與單簽名解鎖的資金沒有區別!

在 n-n 多簽名使用時,他人完全不知道這筆資金還可以用其他方式來解鎖使用!

這樣一來,個人使用者和合約使用者都可以統一在一種指令碼模式(P2TR 「地址」)下,個人使用者放心給自己的資金加上合約,無需擔心日常會付出更高的手續費代價;合約使用者與個人使用者因為使用同一種 「地址」 而享受到更大的匿名集,甚至於在大部分情況下都無需暴露自己使用了合約。皆大歡喜。

總而言之,在 Taproot 之後,他人將無法從地址形式上分辨一個 P2TR 地址到底是個人使用者還是合約使用者;由於 Schnorr 簽名的效果,當這個地址裡的資金使用單簽名來解鎖時,他人將無法分辨這到底是一個人在使用,還是 n 個人一起使用,也無法知道這個地址是否還有自定義的指令碼;由於 MAST 的效果,當使用者使用自定義的指令碼來花費資金時,只需暴露需要用到的部分指令碼;他人雖然知道了這個地址有自定義的指令碼,但整個指令碼到底包括哪些條件,仍然是不可知的。

因此,儘管有人質疑 Taproot 可能反過來給比特幣的隱私性帶來損害 7,但我完全不這麼擔心。因為 Taproot 「地址」 在便利性、隱私性、經濟性上,都已毫無疑問是比特幣史上最佳,它完全有希望可以統一比特幣的 「地址」 型別,形成比特幣有史以來最大的匿名集。

延伸閱讀  簡析 Curve V2 上線後表現,能否撼動 Uniswap 地位?

結語

對於瞭解一些密碼學技術的人來說,學習比特幣的開發和升級是很愉快,乃至令人眼界大開的事。在其升級中,你可以看到人們孜孜不倦地使用密碼學來不斷優化這個系統 —— 得益於這個系統本身的模組化特性,這些優化都真實可感。Taproot 正是其中的代表。

我相信,學習比特幣(尤其是 Taproot)的過程會告訴讀者,什麼才是真正的 「密碼學貨幣」。

Taproot 可能是比特幣歷史上最重要的一次升級,將造就有史以來最純粹的密碼學貨幣 —— 將密碼學利用到極致、最輕量、生命力最頑強的貨幣。

致謝

感謝 @hou123,@ 曾汨 對本文的富有教益的反饋。

Scroll to Top