
一級標題
一級標題
一級標題
什麼是Taproot?
Schnorr 簽名
Schnorr 簽名
MAST
Schnorr 簽名
一級標題
P2SH(Pay-to-ScriptHash)
一級標題
一級標題
比特幣地址是一個包含字母和數字的字符串。用戶可以將其分享給其他人,以便從後者那裡接收BTC。比特幣交易主要有兩大標準:Pay-to-PubKeyHash (P2PKH) 和Pay-to-ScriptHash (P2SH)。
在討論P2SH (Pay To Script Hash) 和P2PKH (Pay-To-PubKey Hash) 這兩個概念之前,我們首先熟悉一下關於比特幣的背景知識:
在比特幣網絡中,比特幣的形式是UTXO。 UTXO 是Unspent Transaction (TX) Output(未花費交易輸出)的縮寫,即,比特幣交易執行後形成的面額不定的單元。例如,你的比特幣錢包裡有10 BTC,你想要轉5 BTC 給朋友。比特幣區塊鏈的處理方式與眾不同。它會把10 BTC(全部餘額)都花掉,將5 BTC 轉入你朋友的錢包,剩下5 BTC(10 BTC - 5 BTC = 5 BTC)轉入你自己的錢包。這下,你和你的朋友各持有未花費的5 BTC。
比特幣使用腳本(幾行代碼)來規定花費BTC/UTXO 的條件。腳本被用作一種鎖定機制。BTC 鎖定在腳本中。當腳本返回成功(即條件得到滿足)時,BTC 就會解鎖。任何人都可以向任意比特幣地址發送BTC。只有當腳本中定義的某些條件得到滿足時,鎖定的BTC 才可以被花費出去。腳本決定了接收方可以如何花費收到的BTC。發起交易時,發送方會在交易中放入一個叫作“PubKey Script(又稱鎖定腳本)”,是滿足PubKey 腳本的數據參數的集合。簽名腳本在代碼中又被叫作“scriptSig”。
一級標題
Pay-to-PubKeyHash (P2PKH)
一級標題
一級標題
Pay-to-PubKeyHash 是一種傳統的比特幣地址格式。其地址以數字1 開頭。
只有P2PKH 地址的所有者才能通過提供公鑰哈希值和私鑰簽名來解鎖PubKey 腳本並花費收到的BTC。私鑰是用來證明公鑰哈希值的所有權的。
正如我們上文討論過的那樣,腳本定義了特定地址上的BTC 在什麼條件下可以花費。當規定條件得到滿足且通過網絡驗證時,該地址上的BTC 就會被解鎖以供花費。
這一流程是如何運作的? —— 接收方首先生成PubKey 腳本並將其分享給發送方。發送方在發送BTC 時將該PubKey 腳本添加到交易中。收到BTC 時,如果接收方想要解鎖這些BTC UTXO,就要提供公鑰哈希和私鑰簽名,並滿足PubKey 腳本中提到的條件。
例如,這些條件可以是:
解鎖BTC 至少需要兩個簽名。
提供口令(password)才能解鎖。
BTC 需要等待一段時間才能解鎖。上述這類情況可以作為解鎖BTC 的條件。。因此,這會增加交易的體積,產生的交易費比普通交易高出5 倍左右。
一級標題
Pay-to-ScriptHash (P2SH)
一級標題
一級標題
Pay To Script Hash (P2SH) 可以幫助發送方免去額外的成本,並將這一責任(額外成本)轉移到真正需要使用鎖定腳本中規定條件的接收方身上。 Pay-to-ScriptHash 比特幣地址是以數字3 開頭的。
例如,Alice 想要發送10 BTC 給Bob。 Alice 必須將贖回腳本哈希包含到交易內。首先,Bob 先生成一個贖回腳本,然後將贖回腳本的哈希值發送給Alice,以便Alice 將該哈希添加到交易內並發起交易。如果Bob 想要花費該UTXO,必須生成相同哈希值的解鎖腳本,並滿足腳本中提到的條件。
正文
正文
正文
發送方可以在不知道腳本中規定的花費條件的情況下,在交易中放入任意數量的贖回腳本哈希值。
一級標題
(……)
一級標題
一級標題MAST(默克爾抽象語法樹)MAST 是
Merklized Abstract Syntax Tree(默克爾抽象語法樹)
的縮寫。
為什麼要使用MAST?如果你想花費P2SH 地址裡的BTC,你必須生成具有相同哈希值的贖回腳本並將其包含到交易中。如果腳本中規定的花費條件太多,交易體積會變得格外龐大。 MAST 可以很好的解決這一問題。
默克爾抽象語法樹是默克爾樹和抽象語法樹的結合體。
就像Pay To Script Hash (P2SH) 是給哈希值為某某的腳本付款那樣,MAST 是給哈希值為某某的默克爾根付款。 MAST 是把一個大的條件集合中的各個條件組裝成一棵哈希樹(所謂的默克爾樹),而默克爾樹的根值是一個哈希值,由所有條件哈希而成。
默克爾根和哈希樹是如何生成的?
首先分別對所有腳本(條件)做哈希計算;然後將計算得到的哈希值與相鄰哈希值組合起來進行哈希計算,生成一組新的哈希值。不斷重複這個兩兩哈希計算的過程,直到計算出最後一個哈希值為止。這個哈希值就是默克爾根。假設共有四組條件。首先,分別計算出這四組條件的哈希值;再將這四個哈希值兩兩配對,計算出兩個哈希值;最後,把這兩個哈希值組合起來做哈希計算,生成最終的哈希值。最後這個哈希值就是默克爾根。這個默克爾根可以翻譯成一個能夠接收付款的有效比特幣地址,即,默克爾比特幣地址(Merklized Bitcoin address)Schnorr 簽名
Schnorr 簽名
Schnorr 簽名
一級標題
若想執行交易,你需要使用私鑰簽名該交易,以證明你是某個公鑰背後的BTC 的所有者。但是,若想執行多簽交易,你必須提供多個簽名。這些簽名會佔據額外的空間。
Schnorr 簽名Schnorr 簽名Schnorr 簽名
Schnorr 簽名
(……)
另一種情況是多簽交易。假設你需要100 個簽名且每個簽名的大小是5 字節,Schnorr 簽名方案可以將這100 個簽名合併成一個大小為64 字節的Schnorr 簽名。省下436 字節(5*100-64=436)的內存可以用來存儲更多交易。 (注:現在的橢圓曲線簽名可不止5 字節)
一級標題
一級標題
一級標題
比特幣Taproot:總結
本文主要圍繞以下幾個要點介紹了Taproot:
Taproot 是Bitcoin Core 貢獻者Gregory Maxwell 在2018 年提出的比特幣升級提案。
Taproot 讓複雜的交易如多簽名交易、時間鎖交易看起來如同普通的比特幣交易,增強了比特幣的隱私性。
Taproot 升級主要包含3 個技術概念—— P2SH、MAST 和Schnorr 簽名。
使用MAST,比特幣可用默克爾樹抽象語法樹來鎖定。 (與默克爾根對應的)默克爾樹決定了可以解鎖未花費BTC 的所有復雜條件。默克爾抽象語法樹(Merklized Abstract Syntax Trees,MAST)被提議引入比特幣區塊鏈,以減少BTC 交易的體積,使得接收方無需在交易中附加冗長的腳本。僅使用默克爾根即可驗證接收方生成的腳本是否屬於原始條件集合。
原文鏈接:
原文鏈接:
https://b10c.me/blog/004-the-incomplete-history-of-bitcoin-development/
原文鏈接: