比特幣用戶將會(huì)享受到一種名為Taproot的技術(shù)
在不久的將來,比特幣用戶可能會(huì)享受到一種名為“Taproot”的技術(shù)。該技術(shù)最早由比特幣核心開發(fā)者兼Blockstream前CTO Gregory Maxwell提出,它將擴(kuò)展比特幣的智能合約靈活性,同時(shí)提供更好隱私保護(hù)。在區(qū)塊鏈領(lǐng)域,即使是最復(fù)雜的智能合約,也很難跟常規(guī)區(qū)分開來。
盡管這是一項(xiàng)非常大的工程,但它不僅僅是理論,是能夠?qū)崿F(xiàn)的。包括Pieter Wuille、Anthony Towns、Johnson Lau、Jonas Nick、Andrew Poelstra、Tim Ruffing、Rusty Russell以及Gregory Maxwell在內(nèi)的幾位最高產(chǎn)的比特幣代碼貢獻(xiàn)者正在研究一種被稱為Schnorr簽名的方案,該方案還包含了Taproot,據(jù)悉,這些升級(jí)內(nèi)容都會(huì)在下一次協(xié)議更新中呈現(xiàn)。
本文將介紹Taproot是什么以及它的工作原理。
P2SH
所有比特幣本質(zhì)上都被“鎖定”在腳本中:區(qū)塊鏈中的交易中可以嵌入幾行代碼,定義在下一個(gè)交易中如何使用這些比特幣。花費(fèi)這些比特幣的條件通常包括提供簽名來證明所有權(quán)。但是還可以設(shè)置其他一些條件,例如TImelocks(這部分比特幣只能在特定區(qū)塊高度或日期之后才能被使用)或mulTIsig(多重簽名,需要在一組私鑰中的多數(shù)私鑰提供簽名的情況下才能被使用)。
還可以混合和選擇設(shè)置不同的條件,創(chuàng)建類型復(fù)雜的智能合約。舉個(gè)例子,如果Alice和Bob都簽名、或者在一周后Alice單獨(dú)簽名、或者Bob單獨(dú)簽名同時(shí)提供一個(gè)密碼,就可以使用這些比特幣。滿足這三個(gè)條件中的任何一個(gè),都是這部分比特幣的使用方式。
自2012年以來,一開始腳本 (條件) 通常是不公開可見的;只有這些比特幣的新主人知道如何使用它們。這是通過一種名為P2SH (向腳本哈希支付) 的技術(shù)實(shí)現(xiàn)的,最初只有腳本的哈希值被包含在區(qū)塊鏈中。這串看似隨機(jī)打亂的數(shù)字實(shí)際上包含著一部分比特幣。當(dāng)所有者使用時(shí),他會(huì)同時(shí)展示整個(gè)腳本以及腳本的“解決方案”。然后,任何人都可以使用初始哈希來檢查所提供的腳本是否確實(shí)是鎖定比特幣的原始腳本,并且可以立即得出滿足腳本的執(zhí)行結(jié)論。
然而,當(dāng)比特幣被花掉時(shí),目前必須表明所有滿足要求所需的條件——包括尚未滿足的條件。這有兩個(gè)主要的缺點(diǎn)。第一,數(shù)據(jù)量很大,尤其是條件很多的情況下。其次,這不利于隱私。所有人都可以知道這筆資金用了什么方式使用,例如,會(huì)揭露出使用了哪種錢包甚至更多的信息。
MAST
為解決這兩個(gè)缺點(diǎn),開發(fā)者們提出了一種使用默克爾樹的解決方案:MAST(默克爾化抽象語法樹)。簡而言之,所有的資金使用條件都被單獨(dú)進(jìn)行哈希處理(而不是組合成單個(gè)哈希值),并包含在一棵默克爾樹中,最終生成單個(gè)哈希值:默克爾根,以這個(gè)默克爾根來“鎖定”比特幣。
這么做的好處是,如果需要展示默克爾樹中的任何數(shù)據(jù),都可使用默克爾根和一些附加數(shù)據(jù)(默克爾路徑)來驗(yàn)證特定數(shù)據(jù)是否被包含在默克爾樹中。其余的默克爾樹信息仍然是哈希密文狀態(tài)的。
有了MAST,意味著只需要揭示出特定的滿足條件。如果在上面的例子中,Alice在一周之后使用了這些資金,她只需要揭示這個(gè)條件(以及默克爾路徑)。沒人知道這筆錢具體是怎樣花的,可能是Alice和Bob一起花的,也可能是Bob一個(gè)人花的。這使得MAST比復(fù)雜的P2SH智能合約在數(shù)據(jù)處理上更有效率,同時(shí)還增加了隱私性。
然而,在使用 Schnorr簽名的情況下,Taproot可以做得更好:因?yàn)镸AST結(jié)構(gòu)可以隱藏在一筆交易當(dāng)中。
Schnorr簽名
Schnorr簽名方案長期以來一直受到許多比特幣開發(fā)者的青睞,目前還在開發(fā)階段,它將會(huì)通過軟分叉協(xié)議升級(jí)進(jìn)行部署。許多密碼學(xué)家都認(rèn)為Schnorr簽名方案是這一領(lǐng)域中的最佳方案,因?yàn)槠鋽?shù)學(xué)特性提供了很強(qiáng)的正確性,不僅不受延展性影響,而且驗(yàn)證速度相對(duì)較快。
在比特幣領(lǐng)域,Schnorr簽名最顯著的優(yōu)點(diǎn)是其“線性數(shù)學(xué)”(linear math),它支持簽名聚合:同一筆交易中的多個(gè)簽名可以合并為一個(gè)簽名。類似的方法也可以應(yīng)用于多簽交易。將公鑰和簽名組合到“閾值公鑰”和“閾值簽名”中,可以使多簽交易與常規(guī)交易變得無法區(qū)分。
這種簽名方案還有更多有趣的使用方式。例如,可以使用其他數(shù)據(jù)來“調(diào)整”私鑰和公鑰。舉一個(gè)簡化的例子,可以通過將私鑰及其對(duì)應(yīng)的公鑰都乘以2來作為新的公私鑰?!八借€x 2”和“公鑰x 2”仍然對(duì)應(yīng),“私鑰x 2”仍然可以對(duì)使用“公鑰x 2”驗(yàn)證的信息進(jìn)行簽名。任何不知道原始密鑰對(duì)被調(diào)整了的人,甚至都看不出有什么差異;這些調(diào)整過的密鑰看起來和其他的密鑰對(duì)是一樣的。
這就衍生出了TapRoot。
Taproot
Taproot基于一種有趣的認(rèn)知:無論多么復(fù)雜,幾乎所有MAST結(jié)構(gòu)都可以(或應(yīng)該)包含一種條件:允許所有參與者就結(jié)果達(dá)成一致并一起簽署結(jié)算交易。在前面的例子中,如果Bob知道Alice可以在下周獨(dú)自動(dòng)用所有資金,那么他最好現(xiàn)在就跟她一起簽字。 (在許多典型的智能合約設(shè)置中,如果他不這樣做,他甚至?xí)艿綉土P。復(fù)雜性實(shí)際上只是為了讓每個(gè)人都誠實(shí)。)
Taproot類似于MAST,并且通常允許所有參與者可以合作來花費(fèi)這筆資金,即“合作終止合約”。
而通過使用Schnorr簽名,它會(huì)變得非常有趣。
首先,合作終止合約將利用Schnorr簽名的閾值方法,讓它看起來像一筆普通交易。因此,所有參與者的公鑰會(huì)疊加生成“閾值公鑰”。與該閾值公鑰相對(duì)應(yīng)的是,所有參與者簽名的組合——他們的“閾值簽名”——允許他們花費(fèi)這些資金。
但他們唯一能做的就是把這筆資金當(dāng)作一筆普通交易來使用——目前還沒有類似MAST的結(jié)構(gòu)。這就是Schnorr簽名的另一個(gè)作用。
所有可選擇的資金使用方式(非合作結(jié)算)都會(huì)被合并到不同的腳本中。然后,對(duì)這個(gè)腳本進(jìn)行哈希處理,并使用它來調(diào)整閾值公鑰。與前面示例中使用的“公鑰x 2”不同,這將產(chǎn)生“閾值公鑰x腳本”(尚在簡化當(dāng)中)。當(dāng)然,這個(gè)“閾值公鑰x腳本”對(duì)應(yīng)于“閾值簽名x腳本”。
現(xiàn)在,如果資金是合作使用的,所有參與者都將他們的簽名組合成“閾值簽名”,并用腳本對(duì)其進(jìn)行調(diào)整。產(chǎn)生的“閾值簽名x腳本”允許他們使用這筆資金。然而,重要的是,對(duì)于外人而言,所有的這些看起來仍然像一個(gè)普通的公鑰和一個(gè)常規(guī)的簽名,即一筆常規(guī)的交易。
只有在合作終止合約被證明是不可能的情況下,其他人才會(huì)知道這是閾值公鑰:它是經(jīng)過調(diào)整的。
在這種情況下,原始閾值公鑰和腳本將會(huì)被展示出來(因?yàn)槭S鄥⑴c者仍然希望能動(dòng)用這筆資金)。這證明“閾值公鑰X腳本”是用這個(gè)特定腳本進(jìn)行調(diào)整的。因此,就像P2SH中的哈希值一樣,這種調(diào)整向全世界證明了,如果滿足腳本中指定的其他條件,資金就應(yīng)該是可花費(fèi)的。
或者,與其用腳本調(diào)整閾值公鑰,倒不如用默克爾樹的根值來調(diào)整閾值公鑰,默克爾樹的根值包含所有不同的可以使用資金的條件:MAST結(jié)構(gòu)。那么,要使用這些資金,只需要披露已經(jīng)滿足的支出條件。
因此,Taproot能夠提供MAST的所有好處,而在正常情況下,沒有人會(huì)知道一筆常規(guī)交易背后隱藏了如此復(fù)雜的智能合約。