比特幣用戶可能在不久之後就能從"Taproot "中獲益。 Taproot最早是由比特幣核心貢獻者、前Blockstream首席技術官Gregory Maxwell提出的,Taproot將擴大比特幣智能合約的靈活性,同時在此過程中提供更多的隱私。即使是最複雜的智能合約,在區塊鏈上,通常也會與常規交易無法區分。
雖然是一項大工程,但這不僅僅是理論。幾位比特幣核心貢獻者--- 包括Pieter Wuille、Anthony Towns、Johnson Lau、Jonas Nick、Andrew Poelstra、Tim Ruffing、Rusty Russell以及事實上的Gregory Maxwell --- 正在研究一個包括Taproot的Schnorr簽名提案。
下面來了解一下Taproot以及它的工作原理。
P2SH
所有的比特幣基本上都被"鎖定"在腳本中:嵌入在區塊鏈上的交易中的幾行代碼,它們確定了比特幣在下一次交易中是怎麼被使用掉的。使用的條件通常涉及提供一個簽名來證明幣的所有權。但其他熟知的條件包括時間鎖(幣只能在特定的區塊高度或日期之後才能被使用)或多簽(只有當一組私鑰中的某幾個提供簽名時,幣才能被使用)。
解決方案
解決方案"解決方案"。然後,任何人都可以使用初始哈希來檢查所提供的腳本確實是鎖定了幣的原始腳本,並且可以立即得出結論,腳本的要求得到了滿足。
不過,當幣被使用的時候,目前還是有必要揭示所有可能滿足的條件--- 包括沒有滿足的條件。這主要有兩個缺點。一,它的數據量很大,尤其是在條件很多的情況下。二是對隱私不利。每個人都會了解到資金可能被使用的各種不同方式,例如,這可以透露出使用了什麼樣的錢包,甚至可能更多。
MAST
MAST是一種擬議的解決方案,它使用Merkle樹(由密碼學家Ralph Merkle發明的一種有幾十年曆史的緊湊數據結構)來解決這兩個缺點。簡而言之,所有可以使用資金的不同條件都被單獨哈希(而不是組合成一個單一的哈希),並包含在Merkle樹中,最終產生一個單一的哈希:Merkle根。這個Merkle根"鎖定"了這些幣。
獨特的好處是,如果Merkle樹中的任何數據被揭示,Merkle根和一些額外的數據(稱為Merkle路徑)可以用來驗證該特定數據被包含在Merkle樹中。 Merkle樹的其餘部分仍然是哈希過的和隱藏的。
對於MAST,這意味著只有滿足的條件才需要被揭示。如果在上面最初的例子中,Alice一個人在一周後花掉了資金,她只是讓這個條件被揭示出來(以及Merkle路徑)。沒有人知道這筆錢也可能是Alice和Bob一起花的,或者Bob一個人花的(他也加了一個密碼)。這使得MAST比複雜的P2SH智能合約的數據效率更高,並且增加了隱私性。
然而通過Schnorr,Taproot可以做得更好:一筆交易可以完全隱藏MAST這樣的構造。
Schnorr
Schnorr簽名方案一直是許多比特幣開發者所期望的,目前正在開發中,將作為軟分叉協議升級進行部署。許多密碼學家認為Schnorr簽名方案是該領域最好的方案,因為它的數學特性提供了很強的正確性,它不會受到易變性的影響,而且驗證速度相對較快。
作為其在比特幣發展中最負盛名的特性,Schnorr的"線性數學"和"和"和"閾值簽名",就可以使多簽交易與常規交易無法區分。
而簽名方案還可以以更有趣的方式使用。例如,可以使用數據來"調整"和"和"和"公鑰×2"仍然會對應,"私鑰×2"仍然可以簽署能用"公鑰×2"驗證的信息。任何不知道原始密鑰對被調整的人甚至不會看出任何區別;調整後的密鑰看起來就像其他密鑰對一樣。
這就是Taproot的功能所在。
Taproot
Taproot是基於這樣的認識:無論多麼複雜,幾乎所有的MAST構造都可以(或者應該)包含一個條件,讓所有的參與者都能就結果達成一致,並一起簽署結算交易。在前面的例子中,如果Bob知道Alice下周可以自己取回所有資金,他不妨現在就和她合作,一起簽名。 (在許多典型的智能合約設置中,如果他不這樣做,甚至會受到懲罰。複雜的情況其實只是為了讓大家保持誠實)。
Taproot類似於MAST,並且總是包含一個所有參與者都能夠共同使用資金的條件:"合作結束( Cooperative Close)"。
通過利用Schnorr簽名,這就是它變得有趣的地方。
首先,合作結束會使用Schnorr的閾值技巧,讓它看起來像一個普通的交易。這樣,所有參與者的公鑰加在一起,就形成了"閾值公鑰"。與這個門檻公鑰相對應,所有參與者的簽名組合---他們的"門檻簽名"---就可以讓他們使用資金。
到目前為止,一切都很好,但把資金當作正常的交易來消費是他們唯一能做的事情---還沒有類似MAST的結構。這就是另一個Schnorr技巧所起到的作用。
所有可以使用資金的替代方式---非合作的結果---這次都被組合成一個不同的腳本。然後,這個腳本被哈希,用來調整閾值公鑰。而不是像前面的例子中使用的"公鑰×2",結果是"閾值公鑰×腳本"(簡化的表達)。當然,這個"閾值公鑰×腳本"對應的是"閾值簽名×腳本"。
現在,如果資金是被共同使用出去的,所有的參與者將他們的簽名組合成"門檻簽名",然後用腳本進行調整。由此產生的"門檻簽名×腳本"就可以讓他們使用這筆錢。然而,重要的是,在外界看來,這一切仍然只是一個普通的公鑰和一個普通的簽名---一個普通的交易。
只有當合作結束被證明是不可能的時候,門檻公鑰才能顯示出它的真實面目:被調整過。
在這種情況下,原始的閾值公鑰和腳本都會被揭示出來。這就證明了"閾值公鑰x腳本"是用這個特定的腳本進行了調整。所以,就像P2SH中的哈希一樣,這個調整證實到,如果滿足這個腳本中規定的備選條件,資金應該是可以使用的。 (和P2SH一樣,這些條件當然是立即滿足才能使用資金。)
另外,不需要用腳本來調整閾值公鑰,而是可以用Merkle樹的Merkle根來調整閾值公鑰,這個Merkle樹包括了資金可以花費的所有不同條件:一個MAST結構。那麼,要使用資金,只需要揭示已經滿足的使用條件。
因此,Taproot提供了MAST的所有好處,而在正常情況下,沒有人會知道一個普通的交易中隱藏著一個如此復雜的智能合約作為備用方案。