今天給大家介紹一下關于Bitcoin提出的改進方案(BIP),位元幣改進提案(BIP)是改變位元幣的正式提案,位元幣作為一個軟體,一直在升級,需要修復漏洞、提高演算法效率、簡化代碼、而且必須保持與其他軟體的兼容性,因此會添加新功能,本篇文章針對BIP340-341引入了一些新功能進行介紹,
文章目錄
- 位元幣如何進行交易的
- 01 Schnorr簽名 [BIP340]
- 1.什么是Schnorr簽名?
- 2.密鑰聚合
- 3.Schnorr簽名和ECDSA簽名對比
- 02 Taproot [BIP341]
- 1.什么是Taproot?
- 2.Merkelized抽象語法樹(MAST)
- 3.Taproot改進MAST
- 4.Taproot亮點:擴容
- 03 Tapscript [BIP342]
- 1.什么是Tapscript?
- 總結
- 參考
位元幣如何進行交易的
例如我們生活常見的像是銀行卡、支付寶或者微信等平臺都是存在個人賬戶的,我們所有的交易的輸入輸出都是圍繞在這個賬戶,當然在加密貨幣領域也有許多,比如基于Account模型的以太坊等,
對于位元幣來說,中本聰在設計時考慮到隱私性的問題,使用了基于未花費輸出(UTXO)模型,每一筆交易由輸入和輸出交易組成,當你進行位元幣轉賬時,你花費的是UTXO,這時需要通過加密簽名證明你對UTXO的所有權,當你針對UTXO交易的輸出包含兩個元素:位元幣數量和鎖定腳本(或scriptPubKey),該腳本通過限定花費某些輸出的條件來鎖定位元幣數量,鎖定腳本會將輸出鎖定在特定的位元幣地址,該地址將位元幣的所有權轉讓給新的所有者,
而新的所有者通過提供解鎖腳本(或scriptSig)以及與其私鑰相關聯的簽名來解鎖輸出,然后花費這些位元幣,解鎖腳本是下一筆交易輸入的一部分,為了確保你不會花費你不擁有的UTXO,位元幣客戶端通過執行腳本來確認交易,每個輸入中的解鎖腳本與相應的鎖定腳本一起執行,以查看是否滿足花費條件,全節點跟蹤并驗證全部UTXO集,從而確保每個人只能花費他們自己擁有的位元幣,
舉例說明:
下圖是Alice想付給Bob 1個BTC,為此,她使用Bob的公共地址創建了一筆交易,為了轉移位元幣,Alice提供了她的數字簽名(由私鑰和交易資料歷史產生),以證明她在UTXO集中擁有至少1個BTC,同時沒有泄露她的私鑰,

作為交易的一部分,只有Bob可以解鎖鎖定腳本,交易轉賬后,UTXO便被轉移,并將其添加到位元幣區塊鏈中,通過提供簽名,Bob可以解鎖鎖定腳本scriptPubKey,并且可以將UTXO用作下一筆交易的輸入,
位元幣常見交易形式
1.P2PKH
Pay-to-Public-Key-Hash (P2PKH) 是一種ScriptPubKey,它將位元幣鎖定到公鑰的哈希值,P2PKH 交易是使用 P2PKH ScriptPubKey 鎖定輸入的交易,公鑰哈希也稱為地址,P2PKH 是目前最常見的腳本型別,P2PKH 類似于 P2PK 交易,除了位元幣鎖定到公鑰的哈希值而不是公鑰本身,

2.P2SH
Pay-to-Script-Hash (P2SH) 是一種ScriptPubKey,它允許根據在交易中指定哈希的腳本來支出位元幣,P2SH 交易是使用 P2SH ScriptPubKey 鎖定輸入的交易,
01 Schnorr簽名 [BIP340]
1.什么是Schnorr簽名?
正如前面關于位元幣交易如何作業的部分所述,腳本語言控制著位元幣的花費,并使用數字簽名來轉移位元幣的所有權,位元幣使用橢圓曲線數字簽名演算法(ECDSA)來驗證加密簽名(該演算法不原生支持多簽交易的,導致了2012年P2SH交易的標準化),簡而言之,Schnorr簽名方案是一種更有效的簽名方案,該簽名方案是由Claus-Peter Schnorr在1989年開發的,
Schnorr建立在“ 隔離見證”之上,該見證于2017年8月在位元幣上激活,以解決可延展性( malleability)問題,SegWit將所有腳本和簽名資料移至“見證”部分,見證是交易的一部分,作為一個單獨結構,不再包含在輸入串列中,
2.密鑰聚合

上圖可以反應密鑰如何聚合,原始的ECDSA需要對每一筆交易分別簽名,而對于Schnorr簽名是線性的,意味可以對對公鑰進行加法(或減法),等同于對應的簽名的加法或減法,而ECDSA并不具有這個特性,加或減ECDSA的數字簽名是沒有意義的,
下面的方程式通過Schnorr的線性特性說明了如何聚合,除了參與者之外,沒有人知道在公共密鑰/簽名后面有三個人,

簡單來說,就是一筆交易中多個簽名可以組合成一個,它通過將公鑰和簽名組成成“閥值公鑰”和“閥值簽名”,讓其交易看上去跟普通交易沒有區別,“閥值公鑰”可以讓參與者的公鑰疊加在一起,而“閥值簽名”可以讓參與者的簽名組合起來,根據約定條件進行支付,Schnorr簽名演算法可以使得多重簽名更高效,同時由于其看上去跟普通交易一樣,因此,也提升了隱私性,
3.Schnorr簽名和ECDSA簽名對比
Schnorr簽名資料比現有的ECDSA簽名資料小11%,現有簽名每個交易占用70-72個位元組,由于Schnorr簽名在交易中/在區塊鏈上占據的空間較小(它們固定為64個位元組),因此可以實作較小的交易資料和較低的費用,
Schnorr簽名,所有輸入僅需要一個組合簽名,因為不同的簽名是聚合在一起的,把交易包含在一個簽名,可以使交易具有更大容量,多簽交易的較小交易資料可降低費用,使用密鑰聚合,我們不必檢查每個單獨的輸入,驗證速度更快,使用ECDSA的緊湊型多重簽名也比較難以生成,因為它們使用DER(專有編碼規則)進行編碼,而Schnorr簽名以更節省空間的方式進行編碼,
ECDSA和Schnorr數字簽名方案都依賴于離散對數問題,但Schnorr的好處是,與ECDSA相比,它使用的假設更少,并且有形式化的證明其是安全的,ECDSA缺乏正式的安全證明,并且依靠額外的假設來保證這一目標,因此,Schnorr是供密碼學家使用的更清晰的框架,Schnorr至少比ECDSA安全,如果不是更安全的話,
02 Taproot [BIP341]
1.什么是Taproot?
Taproot提出擴展了Schnorr的功能,以實作更大的擴展性、效率和支付隱私性,正如我們在上面所解釋的那樣,Schnorr使位元幣多簽名交易看起來像是區塊鏈上的標準交易,當與Schnorr結合使用時,Taproot(BIP 341)將進一步擴大交易的隱私性,在徹底了解Taproot之前我們要先了解什么是Merkelized抽象語法樹(MAST),
2.Merkelized抽象語法樹(MAST)
MAST是默克爾化抽象語法樹(Merkelised Abstract Syntax Trees)的簡稱,最初由位元幣開發者Johnson Lau博士于2016年提出,MAST使用新的見證程式,并使用Merkle樹編碼腳本中獨立的分支,Merkle樹是一種資料結構,樹這一術語用于描述分支結構,它通常把圖表頂部稱為根,而圖表底部稱為葉,如下圖所示,

Merkle樹是通過分別哈希每個腳本以獲得簡短的唯一識別符號而創建的,然后,將這些識別符號中的每一個與另一個識別符號配對并再次進行哈希處理,從而生成另一個簡短的唯一識別符號,這是一個互動程序,一直持續到只有一個識別符號,在上圖中稱為Merkle根 ,可以在僅幾個位元組的資料中唯一標識整個集合,我們可以將Merkle根視為位元幣的密碼箱,與支付到腳本哈希(P2SH)相比,MAST允許在Merkle樹中構造多個支出條件,僅顯示滿足的條件,其中使用Merkle根和路徑來驗證條件是否位于Merkle樹中,同時將其余樹隱藏起來,
MAST的獨特優勢在于,如果揭示了Merkle樹中的任何資料,則可以使用Merkle根和一些其他資料(稱為Merkle路徑)來驗證該特定資料是否包含在Merkle樹中,樹的其余部分(以及其他條件)仍保持散列和隱藏狀態,這意味著,如果所有參與者都同意,則僅需要透露所滿足的條件,有復雜交易任務的用戶可以創建較小的交易,而帶有大量亞腳本(sub-script)的更復雜的合約的效率收益則更大,與使用任何其他當前機制相比,MAST使得更多的條件分支成為可能,這打開了對更高級的智能合約的支持,而不必向位元幣節點沒有額外費用,
3.Taproot改進MAST
Taproot是最初由Greg Maxwell,Peter Wuille和Andrew Poelstra提出的位元幣提案,后來,IRC和bitcoin-dev郵件串列上的十個主要貢獻者都接受了它,Schnorr增加了一個新的簽名型別,Taproot在此基礎上又推出了一個新的交易輸出型別以及確定支付條件的新方法,

Taproot具有自己的Merkle樹版本,稱為腳本樹(script tree),參與者可以選擇以下使用:1)作為常規簽名的公鑰,2)與腳本一起使用,首先,是默認的支出路徑,在此路徑上無法區分單方或多方公鑰,對于替代的支出途徑,除非我們支出,否則不會顯示隱藏的腳本,可以將不同的腳本組織到Merkle樹中,也可以通過顯示其中一個子句來使用輸出,如果我們使用主支出腳本花費交易,則只需提供Merkle證明,該證明由主支出腳本和替代支出腳本的哈希組成,足以證明主支出腳本在腳本樹中,
Taproot使用MAST結構將條件隱藏在Merkle根下面,Merkle根本身會被密鑰承諾(key commitment)隱藏起來,并可以通過密鑰直接花費,只有一個密鑰進入區塊鏈,沒有人能看到存在的其他條件,與Schnorr結合使用時,Tastroot輸出隱藏了MAST結構,在Merkle樹的頂部,有一個用于發布單個公鑰和簽名的選項,實際上,這使P2PKH和P2SH交易看起來相同,
通過MAST,可以對腳本中的操作進行編碼,提升可編程性,當BTC交易發生時,只需要提供其分支運算并將分支哈希連接到固定大小的默克爾根上,從而減少交易資料,提升區塊空間,而且MAST可以根據交易不同設定不同的條件,也就是實作智能合約功能,而且MAST結構可以使交易資料顯著降低,但是隨著腳步數量的增加,MAST結構的交易資料是對數增長不是線性增長,大大降低了資料大小,
4.Taproot亮點:擴容
擴容兩個字,總能在最近的公鏈競爭中聽到,擴容的好處是,交易速度更快,GAS費用更低,這對位元幣來說當然非常的重要,最初開發的時候,專案方的夢想是讓位元幣成為全球貨幣,不過,一個交易確認那么慢的東西,根本吸引不了大批的人去使用,所以,為了讓位元幣有支付屬性,擴容升級是必須的,
在Taproot新方案中,Schnorr簽名為位元幣減少容量帶來了技術支持,具體來看,Schnorr簽名通過把多個公鑰設計成一個簽名,從而減少空間,資料來看,在位元組占比上,Schnorr上的公鑰占了32個位元組,比原方法節約了1個位元組,在簽名長度上,Schnorr的長度是65個位元組,比原方法節約了6-7個位元組,Taproot就是通過這些小空間的節約給位元幣的使用者節約了確認交易所需的時間和費用,
進一步來說,這次升級是Layer2擴展解決方案的進步,因為Taproot允許改進Layer2網路,例如位于位元幣之上的閃電網路,Taproot將通過用點時間鎖定合約(PLTC)替換哈希時間鎖定合約(HTLC)來升級閃電網路功能,閃電網路是一種面向商業的服務,允許各方更快速、更便宜地進行位元幣交易,使用PTLC意味著支付將使用常規公鑰進行路由,提供類似于為多重簽名錢包設計的隱私功能,PTLC還可以啟用區塊鏈托管條件,并改進預言機的使用,以促進支付的便利性,
03 Tapscript [BIP342]
1.什么是Tapscript?
Tapscript是Schnorr和Taproot的補充升級,作為位元幣編程語言(腳本)的升級版,Tapscript更容易添加新功能,且提供基于Schnorr簽名的批量驗證(batch verifiability),
Tapscript還補充了BIP 341(Taproot)中提出的對位元幣腳本結構的改進,該結構需要更改某些操作碼,而BIP 342則涉及需要進行的更改,理解Tapscript的另一種方法是考慮Taproot的Merkle樹,其中每個葉子(leaf)都是一個腳本,可稱之為葉子版本,類似于SegWit的腳本版本控制,但是不同之處在于,腳本不會在付款時顯示,而只會在花費時顯示,不同的葉子可以具有不同的版本,其中僅顯示實際使用的葉子,Tapscript是Taproot下版本0的葉版本,
Tapscript與傳統和SegWit的位元幣腳本共享大多數操作,但有一些區別:
簽名操作碼驗證Schnorr簽名(而不是ECDSA簽名),
多簽操作碼OP_CHECKMULTISIG和OP_CHECKMULTISIGVERIFY被操作碼OP_CHECKSIGADD代替,允許使用Schnorr進行簽名批量驗證,
當前,用于2-of-3的多重簽名交易的腳本如下所示:
2 <公鑰A> <公鑰B> <公鑰C> 3 CHECKMULTISIG
使用Taproot/Tapscript,可以以批量驗證的方式創建相同的多重簽名策略,其腳本是:
<A pubkey> OP_CHECKSIG <B pubkey> OP_CSADD <C pubkey> OP_CHECKSIGADD OP_2 OP_EQUAL
許多操作碼被重新定義為OP_SUCCESS操作碼,它無條件使整個腳本有效,以簡化軟分叉升級,
與現在正使用的機制OP_NOP相比,新操作碼OP_SUCCESS的引入更容易驗證,以前無法使用的操作碼通常回傳“FALSE”狀態,Tapscript會將它們回傳“TRUE”狀態,只要腳本中存在這些操作碼,你就可以無條件地使用它,而實際的好處是可以將操作碼重新定義為任意值,并且不需要向后兼容,這種用新的操作碼擴展腳本的新機制,比現有的見證版本控制機制更易于協調和使用,后果是,它有望為將來位元幣腳本添加更多有用的操作碼開辟道路,

由于還在學習當中,這里提供給大家官方介紹鏈接(https://bitcoinops.org/en/topics/tapscript/),希望共同學習交流!
總結
簡而言之,Schnorr對可擴展性和交易隱私(而不是交易鏈接隱私)具有多個意義,效率的提高開放了更復雜的多重簽名交易的使用,從而允許非常大的M-of-n方案和更高級的合同,與Taproot和Tapscript結合使用,Schnorr大大拓展了位元幣的隱私性和可擴展性,
Taproot(BIP 341)提高了位元幣腳本功能的隱私性、效率以及靈活性,使開發人員可以撰寫復雜的腳本,同時最大程度地減少對鏈上的影響,
在擴容方面,可節省復雜交易大量的交易費用,因為資料密集型腳本不再需要支付比標準的“支付到公鑰哈希”交易更高的費用,網路上的交易越復雜,效率上的收益就越大,
在隱私方面,BIP 341旨在最大程度地減少鏈上交易透露出的關于交易輸出花費條件的資訊,大多數使用Taproot的應用程式都可以使用基于密鑰的支出路徑,該路徑是私有的,并且可以推廣到m-of-n多重簽名策略,
Tapscript主要是位元幣腳本的升級!
參考
- 位元幣opcode:https://en.bitcoin.it/wiki/Script
- Tapscript [BIP342]:https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki
- Taproot [BIP341]:https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki
- Schnorr簽名[BIP340]:https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/293017.html
標籤:區塊鏈
上一篇:區塊鏈 Zilliqa是什么
