什么是比特幣默克爾化抽象語(yǔ)法樹?
默克爾化抽象語(yǔ)法樹(Merklized Abstract Syntax Trees, MAST)是一項(xiàng)為比特幣提議的升級(jí),可以實(shí)現(xiàn)更小的交易體積、更好的隱私性,以及更大的智能合約。在本文中,我們會(huì)解釋 MAST 的基本原理,講解其潛在好處,并總結(jié)目前一些包含這項(xiàng)技術(shù)的提案。
什么是比特幣默克爾化抽象語(yǔ)法樹?
問(wèn)題:沒(méi)用到的腳本數(shù)據(jù)
中本聰給了比特幣一個(gè)有趣的特性,是他沒(méi)有寫在 比特幣白皮書里的。除了可以通過(guò)公鑰來(lái)接收比特幣、用私鑰數(shù)字簽名來(lái)花費(fèi)比特幣,用戶還可以編寫程序(叫做 “script”,腳本),當(dāng)成動(dòng)態(tài)的公鑰和簽名來(lái)用。
當(dāng)你指定一個(gè)腳本后 —— 這在每一種比特幣錢包里都是基本操作 —— 由比特幣網(wǎng)絡(luò)強(qiáng)制執(zhí)行的比特幣協(xié)議就不會(huì)讓任何人花費(fèi)這個(gè)腳本所控制的比特幣,除非腳本返回 True。這讓你可以指定資金的花費(fèi)條件,稱為 “encumbrances”(財(cái)產(chǎn)條件),比如要求花費(fèi)的交易一定要得到你的私鑰簽名。
更加復(fù)雜的財(cái)產(chǎn)條件也是有可能實(shí)現(xiàn)的,比如下面這個(gè)例子,我們會(huì)用它貫穿整篇文章:Alice 希望能夠隨時(shí)花費(fèi)她的比特幣,但如果她連續(xù)三個(gè)月沒(méi)有花費(fèi)自己的比特幣(可能因?yàn)樯砉驶蛘邌适袨槟芰Γ?,她希望自己的兄弟姐?Bob 和 Charlie 擁有自己的比特幣,在任何兩人能達(dá)成一致的地方使用這些財(cái)產(chǎn)。
下面這個(gè)條件腳本就實(shí)現(xiàn)了上文所說(shuō)的目標(biāo),它不僅納入了 Alice 的公鑰(需要驗(yàn)證一個(gè)來(lái)自她私鑰的簽名),但也加入了以下條件性邏輯:一個(gè)超時(shí)條件,以及 Bob 和 Charlie 的公鑰。
在當(dāng)前的比特幣協(xié)議中,上述所有的數(shù)據(jù)都必須添加到區(qū)塊鏈中,在 Alice 的比特幣花費(fèi)的時(shí)候,也包括在特定的花費(fèi)行為中完全無(wú)關(guān)的腳本部分,也要曝光。就比如在 Alice 花費(fèi)自己的比特幣時(shí) Bob 和 Charlie 的公鑰也要曝光。
未使用的條件數(shù)據(jù)增大了交易的體積,也使用戶在必要之外曝光了更多的隱私,同時(shí),也使體積而非驗(yàn)證代價(jià)成為智能合約大小的主要限制因素。MAST 旨在改善這些情況,辦法就是移除在區(qū)塊鏈上直接包含未使用的腳本部分的需要。
MAST 初始構(gòu)想
MAST 1 背后的觀念來(lái)自于兩種久已存在的概念, 抽象語(yǔ)義樹和默克爾樹。抽象語(yǔ)義樹(AST) 是一種通過(guò)將一個(gè)程序分割成獨(dú)立的小塊來(lái)描述程序的方法,這樣會(huì)讓程序變得更容易分析和優(yōu)化。為了生成一個(gè) AST,你需要把所有的方程與其前提用箭頭連接起來(lái),直至所有的前提都被找出。下圖即是上文示例腳本的 AST。
另一方面,默克爾樹則可用來(lái)驗(yàn)證某個(gè)元素是否是屬于某個(gè)集合,且無(wú)需知曉整個(gè)集合的全貌。舉個(gè)例子,比特幣的簡(jiǎn)易支付驗(yàn)證錢包(SPV wallet)就使用默克爾樹來(lái)驗(yàn)證某筆交易是否存在于某個(gè)區(qū)塊中,這樣無(wú)需下載完整的區(qū)塊,可以節(jié)省帶寬。
要生成一棵默克爾樹,先要把每個(gè)元素都各自哈希一次,生成各自唯一的標(biāo)識(shí)符;然后這些標(biāo)識(shí)符配對(duì)之后再次哈希,生成這一對(duì)標(biāo)識(shí)符的標(biāo)識(shí)符;如此不斷重復(fù),直至只剩下一個(gè)標(biāo)識(shí)符,稱為 “默克爾根”,它就是一個(gè)短小精悍、但是標(biāo)記了整個(gè)集合的標(biāo)識(shí)符了。
在驗(yàn)證某個(gè)元素屬不屬于某個(gè)集合時(shí),擁有整個(gè)集合的人可以向你提供從那個(gè)元素到默克爾根路徑上的所有標(biāo)識(shí)符。這樣就能證明,這個(gè)元素確實(shí)在這個(gè)集合內(nèi)。
簡(jiǎn)而言之,AST 背后的技術(shù)讓你可以把一個(gè)程序分成多個(gè)小塊,而默克爾樹讓我們可以驗(yàn)證這些小塊確實(shí)是一個(gè)完整程序的一部分,且不必暴露整個(gè)程序。這就是 MAST 的基本原理,可以讓花費(fèi)者用一個(gè)默克爾證明來(lái)替換在單次交易中沒(méi)有用到的條件 —— 減少交易體積、提高隱私性,并支持更大的合約。
MAST 的一個(gè)例子
我們以上文的財(cái)產(chǎn)條件為例,為我們希望的兩種可能場(chǎng)景分割為兩個(gè)子腳本:
- Alice 可以隨時(shí)花費(fèi)自己的比特幣(左邊的子腳本)
- 或者,如果連續(xù)三個(gè)月使用 Alice 的簽名來(lái)花費(fèi),則需要 Bob 和 Charlie 的簽名來(lái)花費(fèi)此中的比特幣(下圖右邊的子腳本)
基于這兩個(gè)獨(dú)立的子腳本,創(chuàng)建一棵默克爾樹:
這棵默克爾樹的樹根最終標(biāo)識(shí)了 Alice 的完整財(cái)產(chǎn)條件,而且只有 32 字節(jié)的體積。此后,Alice 可以使用一個(gè)替代性的條件腳本,聲明:一筆花費(fèi)交易,只有提供其中一個(gè)子腳本連接到默克爾根的證據(jù)、并且子程序返回 True 的時(shí)候,才是有效的。
子腳本的默克爾證據(jù),形象地畫出來(lái)會(huì)像下圖這樣,就看用的是哪個(gè)子腳本了:
好處 #1 —— 更小的交易
我們先來(lái)看看 MAST 如何能讓復(fù)雜財(cái)產(chǎn)條件的用戶創(chuàng)建更小的交易。這是 MAST 給我們帶來(lái)的第一個(gè)好處。
在上文的例子中,我們使用了一個(gè)具備兩個(gè)子腳本的財(cái)產(chǎn)條:要么 Alice 自己花自己的錢,要么 Bob 和 Charlie 在等待三個(gè)月之后一起花她的錢。我們來(lái)設(shè)想一個(gè)無(wú)限延伸的版本:其第三個(gè)子腳本指明,三個(gè)月零一天后,Dan 和 Edith 可以花費(fèi)此中的資金;第四個(gè)子腳本指明,三個(gè)月零二天后,F(xiàn)red 和 George 可以使用這筆資金;等等等等。
這個(gè)思維實(shí)驗(yàn)可以使我們得到下面的這張圖,它顯示了,子腳本的數(shù)量與需要加入?yún)^(qū)塊的條件數(shù)據(jù)量,在有和沒(méi)有 MAST 時(shí)候的關(guān)系。
下面是一個(gè)對(duì)數(shù)圖,意思是一樣的:
雖然一開始 MAST 交易的體積會(huì)比沒(méi)有 MAST 的同條件交易更大,比如我們的兩個(gè)子腳本的條件,但非 MAST 的交易體積會(huì)(隨子腳本的數(shù)量)線性增大,而 MAST 交易的體積則只會(huì)對(duì)數(shù)增大。
如果節(jié)省數(shù)據(jù)量是主要目標(biāo),我們還可以進(jìn)一步優(yōu)化。對(duì)于許多財(cái)產(chǎn)條件來(lái)說(shuō),花費(fèi)者可能更高頻地使用其中某個(gè)條件。比如,Alice 希望自己高壽,所以她建構(gòu)的默克爾樹把自己花費(fèi)的條件放在離頂端更近的地方,而所有其它條件都放在樹的底部:
這樣設(shè)計(jì)的話,不同情況下的 MAST 默克爾證據(jù)的體積是不一樣的,在最理想的情況下,Alice 活著,自己花自己的錢;而另一種情況下,Alice 身故,她的受益人來(lái)花這些錢。我們把這些因素呈現(xiàn)到圖上。
可以看出,Alice 使用時(shí),其交易的數(shù)據(jù)量一直是最優(yōu)的情形,無(wú)論她的財(cái)產(chǎn)條件中的受益人有多少個(gè);而在她的受益人使用這筆資金時(shí),交易的數(shù)據(jù)量也只比前述標(biāo)準(zhǔn)構(gòu)造的默克爾樹多用幾個(gè)字節(jié)。
無(wú)論 Alice 選擇什么安排,可以看出 MAST 可以讓多子腳本的財(cái)產(chǎn)條件交易體積更小,因此用戶可以少付一些手續(xù)費(fèi),而區(qū)塊里可以裝入更多的高級(jí)交易。
好處 #2 —— 更強(qiáng)的隱私性
我們?cè)谏衔牡闹v解中,把 Alice 的財(cái)產(chǎn)腳本全部曝光了出來(lái),但你可以設(shè)想,如果在 Alice 花費(fèi)自己的比特幣時(shí),你在區(qū)塊鏈上僅僅看到了下圖左邊的數(shù)據(jù):
只有這些信息,你是沒(méi)法知道 Alice 以外是否還有人能花費(fèi)這里的資金、以及他們花費(fèi)是需要面對(duì)什么約束條件的。你可以從 MAST 中猜測(cè)可能有一些別的條件,但也僅限于猜測(cè)而已 —— Alice 可能只是假裝她的默克爾樹還有其它可以花費(fèi)的部分。
對(duì)應(yīng)地,如果你看到的是另一個(gè)分支(也就是上圖的右邊的子腳本),你不會(huì)知道這筆資金在超時(shí)之前是否能花費(fèi),也不知道是不是只需一把私鑰就能花費(fèi)它。你同樣可以猜測(cè)存在其它的花費(fèi)條件,但你沒(méi)法在區(qū)塊鏈上確證這一點(diǎn)。
保證未使用的財(cái)產(chǎn)條件不曝光在某些時(shí)候非常有用,比如某些商人可能希望自己的智能合約盡可能保密,不要被潛在的競(jìng)爭(zhēng)對(duì)手看到。這一點(diǎn)與某些標(biāo)榜自己是專為智能合約設(shè)計(jì)、但實(shí)際上又不能為這些合約提供隱私性的山寨幣恰好相反。
隱私性也可以為所有的比特幣用戶提供額外的好處,即使某些用戶根本不在乎財(cái)產(chǎn)條件的隱私性。假設(shè)從本文一開始,Alice 就是唯一一個(gè)使用非 MAST 條件模板的人。因?yàn)樗袟l件都是公開的,那么任何人都可以跟蹤 Alice 的花費(fèi)行為,只需在區(qū)塊鏈上觀察這個(gè)模板被使用的情形即可,這樣 Alice 的隱私就蕩然無(wú)存。
任何讓識(shí)別特定用戶更容易的設(shè)計(jì),也會(huì)讓人們可以更容易地區(qū)別對(duì)待他們的比特幣和別人的比特幣,這叫做 “同質(zhì)性的缺失”。如果某些人知道了 Alice 的財(cái)產(chǎn)條件長(zhǎng)什么樣,他們就可以賄賂或者強(qiáng)迫礦工不要打包這些人的交易,以此阻止 Alice 使用自己的比特幣。
MAST 不能完全解決這個(gè)問(wèn)題,因?yàn)?Alice(或者 Bob 和 Charlie)仍然需要揭示部分的產(chǎn)權(quán)負(fù)擔(dān),但是許多別的復(fù)雜財(cái)產(chǎn)條件可以解析成少量的簡(jiǎn)單 MAST 類型條件。
舉個(gè)例子,Alice 的默認(rèn)花費(fèi)行為看起來(lái)就像其它只需提供單簽名的普通支付行為,所以 Alice 的基于 MAST 的交易跟其它基于 MAST 的單簽名交易就沒(méi)有任何分別。這反過(guò)來(lái)提高了 Alice 的隱私性,也提高了她的資金的同質(zhì)性,以及所有使用基于 MAST 的單簽名條件的用戶的貨幣同質(zhì)性。
MAST 的這一好處還很有可能與其他提高比特幣隱私性和同質(zhì)性的提議結(jié)合在一起。有些提議是讓某些復(fù)雜的財(cái)產(chǎn)條件可以用單簽名來(lái)使用,比如 Pieter Wuille 和 Gregory Maxwell 的 “通用門限樹”、Andrew Poelstra 的 “無(wú)腳本式腳本”,還用 Thaddeus Dryja 的 “離散對(duì)數(shù)合約”;MAST 就可以和這些方案相結(jié)合。
但即使這些方案都不能在比特幣上實(shí)現(xiàn),MAST 自身也能為復(fù)雜財(cái)產(chǎn)條件的用戶提供更多的隱私性和可互換性,不論是與當(dāng)前相比,還是與支持用戶自定義智能合約的山寨幣相比。
好處 #3 —— 更大的智能合約
比特幣現(xiàn)在為單個(gè)腳本設(shè)置了三種不同的體積限制:裸露腳本大小不能超過(guò) 1 萬(wàn)字節(jié),在 2010 年 7 月引入;P2SH 腳本不能超過(guò) 520 字節(jié);segwit 腳本不能超過(guò) 1 萬(wàn)字節(jié)。我們把這幾個(gè)大小在上面的圖中展示出來(lái):
可以看出來(lái),即使是極端的無(wú)限延長(zhǎng)的例子,MAST 也比當(dāng)前所有的機(jī)制支持更多的條件分支。實(shí)際上,MAST 的擴(kuò)展性非常之好,以至于即使你擁有現(xiàn)在可觀測(cè)的宇宙中所有的能量,若是只用來(lái)創(chuàng)建一棵標(biāo)準(zhǔn)(平衡)的默克爾樹,其默克爾證據(jù)也只有 8448 字節(jié)。即使是這么大的默克爾證據(jù),任何現(xiàn)在的筆記本電腦,都能在 1 毫秒之內(nèi)完成驗(yàn)證。
因?yàn)槊馊チ巳?jié)點(diǎn)處理未使用的子腳本的任務(wù),MAST 還能幫比特幣腳本繞過(guò)別的一些硬性限制。在這一方面,MAST 很好地保存和延伸了比特幣智能合約長(zhǎng)期的設(shè)計(jì)目標(biāo),也就是合約的負(fù)擔(dān)應(yīng)盡可能由合約的參與者承擔(dān),而節(jié)點(diǎn)付出了帶寬、內(nèi)存和處理能力,卻無(wú)法得到補(bǔ)償,因此應(yīng)盡可能少承擔(dān)。
所以,MAST 的真正成就不是讓比特幣用戶可以創(chuàng)建(比以往)更加高級(jí)的合約,而是它打開了這種可能性,還不會(huì)給比特幣的節(jié)點(diǎn)增加新的負(fù)擔(dān)。
實(shí)現(xiàn) MAST:現(xiàn)有的多種提議
迄今為止,bitcoin-dev 郵件組里提出了兩種方法在比特幣協(xié)議中啟用 MAST,兩種方法都仍在草案階段,可能會(huì)有所變更。
第一種提議是 Johnson Lau(化名 “jl2012”)提出的 BIP114,使用了一個(gè)基于隔離見證的延伸特性,使得原生的隔離見證地址(bech32)可以成為對(duì) MAST 財(cái)產(chǎn)條件的默克爾根的承諾?;ㄙM(fèi)交易因此可以從樹上選擇一個(gè)子腳本。
第二種提議是 Mark Friedenbach(化名“maaku”)提出的兩個(gè)未命名的 BIP(1、2),它提高了腳本語(yǔ)言的靈活性,使得編程者可以編寫腳本來(lái)驗(yàn)證基于 MAST 的財(cái)產(chǎn)條件。如果用 Friedenbach 更喜歡的方式來(lái)實(shí)現(xiàn),那會(huì)讓比特幣現(xiàn)在支持的三種腳本類型(裸露腳本、P2SH 和隔離見證腳本)都可以使用默克爾證據(jù)。
這幾種提議互有短長(zhǎng),但都提供了上文所說(shuō)的 MAST 的好處(字節(jié)數(shù)可能有加有減)。每一個(gè)都可以用軟分叉來(lái)激活。
結(jié)論:我們什么時(shí)候才能用上 MAST?
上文我們講解了 MAST 的好處,也簡(jiǎn)要提及了兩種在比特幣上實(shí)現(xiàn) MAST 的提案,你可能也好奇,什么時(shí)候我們能用上 MAST。遺憾的是,我也不知道。
從理念,到提案,到完整的實(shí)現(xiàn),到提議軟分叉,到激活軟分叉,道阻且長(zhǎng)。圍繞隔離見證升級(jí),為期兩年的大戲已經(jīng)很清楚地展現(xiàn)了這一點(diǎn)。
但從我的角度看,MAST 背后的基本理念已經(jīng)在比特幣技術(shù)社區(qū)中獲得了廣泛的支持,而對(duì) MAST 最感興趣的開發(fā)者也會(huì)繼續(xù)開發(fā),除非有人能證明這種技術(shù)完全不靠譜。有朝一日這些開發(fā)者成功提出可供同行審議的軟分叉代碼,就輪到讀者你們和其他比特幣用戶,來(lái)決定 MAST 是否能成為比特幣協(xié)議的一部分了。
以上就是什么是比特幣默克爾化抽象語(yǔ)法樹?的詳細(xì)內(nèi)容,更多關(guān)于默克爾化抽象語(yǔ)法樹的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
你可能感興趣的文章
-
比特幣期貨和現(xiàn)貨區(qū)別是什么?分析比特幣期貨和現(xiàn)貨區(qū)別
這篇文章主要介紹了比特幣期貨和現(xiàn)貨區(qū)別是什么?分析比特幣期貨和現(xiàn)貨區(qū)別,需要的朋友可以參考下的相關(guān)資料…
2023-03-27 -
比特幣現(xiàn)貨交易是什么?比特幣現(xiàn)貨交易教程
這篇文章主要介紹了比特幣現(xiàn)貨交易是什么?比特幣現(xiàn)貨交易教程,需要的朋友可以參考下的相關(guān)資料…
2023-03-27 -
比特幣現(xiàn)貨怎么買?一文玩轉(zhuǎn)比特幣現(xiàn)貨買賣交易
這篇文章主要介紹了比特幣現(xiàn)貨怎么買?一文玩轉(zhuǎn)比特幣現(xiàn)貨買賣交易,需要的朋友可以參考下的相關(guān)資料…
2023-03-27 -
比特幣做空什么意思?通俗講解比特幣做空
這篇文章主要介紹了比特幣做空什么意思?通俗講解比特幣做空的相關(guān)資料,需要的朋友可以參考下…
2023-03-27 -
YEC幣官網(wǎng)、總量和上線交易所介紹
這篇文章主要介紹了YEC幣官網(wǎng)、總量和上線交易所介紹,需要的朋友可以參考下的相關(guān)資料…
2023-03-26 -
炒比特幣的人都賺了嗎?
這篇文章主要介紹了炒比特幣的人都賺了嗎?炒比特幣賺錢要交稅嗎?,需要的朋友可以參考下的相關(guān)資料…
2023-03-26 -
賣比特幣賺的錢要交稅嗎?炒幣盈利了要交稅嗎?
這篇文章主要介紹了賣比特幣賺的錢要交稅嗎?炒幣盈利了要交稅嗎?,需要的朋友可以參考下…
2023-03-26 -
CWS幣總量多少?CWS幣總量和流通量分析
這篇文章主要介紹了CWS幣總量多少?CWS幣總量和流通量分析,需要的朋友可以參考下的相關(guān)資料…
2023-03-24 -
CWS幣在哪里買?CWS幣買賣交易所盤點(diǎn)
這篇文章主要介紹了CWS幣在哪里買?CWS幣買賣交易所盤點(diǎn),需要的朋友可以參考下的相關(guān)資料…
2023-03-24 -
代幣線性解鎖是什么意思?通俗解釋代幣線性解鎖
這篇文章主要介紹了代幣線性解鎖是什么意思?,需要的朋友可以參考下的相關(guān)資料…
2023-03-24