可以清楚地理解本文介紹了BitVM的基本概念、比特幣腳本和隔離見證。這篇文章由極客Web3的Nickqiao、Faust和Shew Wang撰寫,並由Bitlayer研究團隊提供顧問意見。
摘要:BitVM的基礎思想是MATT,即Merkleize All The Things,通過Merkle樹展示複雜程式執行過程,並讓比特幣原生驗證詐欺證明。
正文:比特幣腳本指令碼可觸發比特幣指令碼,隔離見證和Witness相關技術研究報告展示了比特幣二層技術的核心概念,包括BitVM、OP_CAT和Covenant限制條款等。
幾個月前,ZeroSync的Robin Linus提出了BitVM的概念,推動了比特幣二層技術的發展,吸引了Bitlayer、Citrea、BOB等專案參與,為市場帶來活力。
更多研究人員參與改進了BitVM,推出了不同的迭代版本,如BitVM1、BitVM2、BitVMX等。
BitVM相關開發者生態逐漸明朗,工具迭代完善,市場吸引力增加。
要理解BitVM和比特幣二層相關技術需要基礎知識,我們致力於幫助更多人理解並建立系統性認知。
BitVM的基礎概念是MATT,通過Merkle Tree展示複雜程式執行過程,並讓比特幣原生驗證詐欺證明。
MATT方案下,只有Merkle Root儲存在鏈上,Merkle Tree包含完整資料集儲存在鏈下,使用“承諾”概念壓縮大量資料處理,只在比特幣鏈上發布承諾。
BitVM方案包括程式分解與承諾、資產質押和預簽名、資料和承諾發布、挑戰與懲罰等流程。
比特幣交易涉及UTXO、鎖定指令碼和解鎖指令碼等概念,每筆交易都對應多個Input和Output,每個Input要宣告自己想解鎖的UTXO並提交解鎖指令碼。
比特幣腳本指令碼涉及比以太坊更難理解的知識,UTXO包含金額和鎖定指令碼,所有權透過鎖定指令碼表達,解鎖指令碼需要和鎖定指令碼相符。TXO資料的「儲存位置」!這裡要特別留意,比特幣和以太坊有著截然不同的架構。以太坊提供了合約帳戶和EOA帳戶兩種帳戶來儲存資料,資產餘額以數位方式記錄在合約帳戶或EOA帳戶名下,統一放置在名為「世界狀態」的資料庫中。在轉帳時,直接從「世界狀態」對特定帳戶進行修改,以便能快速定位到資料的儲存位置。
比特幣則沒有「世界狀態」的概念,資產資料分散儲存在過往的區塊中(也就是未解鎖的UTXO資料,在每筆交易的Output中單獨存放)。
如果想要解鎖某個UTXO,必須說明該UTXO資訊存在於過去哪筆交易的Output中,並出示這筆交易的ID(即其hash),讓比特幣節點從歷史記錄中尋找。若要查詢某個地址的比特幣餘額,則需要從頭遍歷所有區塊,找出和該地址關聯的未解鎖UTXO。
在使用比特幣錢包時,可以快速檢查某個地址擁有的比特幣餘額,這通常是因為錢包服務會掃描區塊並對所有地址建立索引,方便我們快速查詢。
(當你產生交易宣告將自己的UTXO送給他人時,必須根據這些UTXO所屬的交易hash/ID來標記出該UTXO在比特幣歷史記錄中的位置)。
有趣的是,比特幣交易的結果是在鏈下計算完成的。使用者在本地裝置上產生交易時,必須直接建立好所有Input和Output,相當於將交易的輸出結果計算完畢。交易在廣播到比特幣網路後,經節點驗證後才會上鏈。這種「鏈下計算 — 鏈上驗證」的模式與以太坊完全不同,在以太坊上,只需提供交易輸入引數,交易結果由以太坊節點計算並輸出。
此外,UTXO的鎖定指令碼(Locking Script)是可以自訂的。你可以設定UTXO為「某個比特幣地址的主人可解鎖」,該地址的主人需要提供數位簽章和公鑰(P2PKH)。在Pay-to-Script-Hash(P2SH)交易類型中,可以在UTXO的鎖定指令碼中加入一個Script Hash,滿足提交這個Hash對應的指令碼原像的條件,即可解鎖UTXO。BitVM所依賴的Taproot指令碼使用了類似P2SH的特性。
這裡以P2PKH為案例介紹比特幣指令碼的觸發方式,只有理解了其觸發方式才能理解更為複雜的Taproot和BitVM。P2PKH全名為「Pay to Public Key Hash」,在這種方案下,UTXO的鎖定指令碼中會設定一個公鑰hash,解鎖時需要提交對應該hash的公鑰,與比特幣轉帳思路基本一致。
這時,比特幣節點要確認解鎖指令碼中的公鑰和鎖定指令碼中指定的公鑰hash是否匹配,確保解鎖人提交的「鑰匙」和UTXO預設的「鎖」相符。
進一步來說,P2PKH方案下,交易發起人提交的解鎖指令碼中包含公鑰和數位簽名,該公鑰需與鎖定指令碼中指定的公鑰hash匹配,且交易的數位簽名正確,才能順利解鎖UTXO。