如何讓比特幣支持ZK:從OP_CAT到狀態證明和BitVM

作者:Janos Nick,Blockstream

編譯:白丁 & Faust,極客Web3

摘要: 這篇文章簡明扼但又一針見血的指出了如何讓比特幣支持ZK驗證功能,涉及的具體話題包含比特幣UTXO和腳本在功能性上的缺陷、Taproot和OP_CAT以及BitVM和Chain State Proof等概念的大致內容。文中拋出了比較鮮明的觀點:

比特幣協議引入ZK是必然趨勢,對此有兩種路線: 一種是讓比特幣腳本直接支持SNARK驗證,需要藉助OP_CAT操作碼,而OP_CAT最終通過的概率很大;第二種路線是基於BitVM的,需要引入欺詐證明的方式,而ZeroSync團隊還針對性的提出了Chain State Proofs來降低節點客戶端驗證歷史數據的成本。

正文: 為了更深刻的理解比特幣,我們最好把它當做一個社會系統來看待。 比特幣早期啟動的時候,開發者就確定了比特幣節點需要運行的軟體程序,就像確定了一套社會系統所遵循的規則。比特幣這個社會系統之所以能夠穩定運轉,是因為大家在「比特幣的本質是什麼」、「應該是什麼「等關鍵問題上存在某種共識。當然,共識的達成並不容易,人們在面對上述問題時,仍然存在廣泛且不斷演化的分歧。

這可以追溯到比特幣的歷史來源問題。當初中本聰在發布比特幣白皮書時,曾說:”我在研究一套全新的電子支付系統,這套系統完全是P2P的,不需要依賴於任何第三方”。這段話發表於密碼朋克郵件列表(一個成立於1992年的電子郵件討論組,由一群關注隱私保護和密碼學技術的密碼學家及技術愛好者組成)。

然而,比特幣在產品設計層面限制了數據吞吐量。 其單位時間內能處理的交易筆數有限,如果待處理的交易數量快速上升,用戶為了快點交易成功,就會發起價格戰,迅速拉高付出的手續費。比特幣網絡內手續費最高的單筆交易出現在2024年出塊獎勵減半後,一筆上鏈優先級中等的交易手續費達到150美元。可以說,比特幣網絡昂貴的交易手續費已成為一個難題。

為了解決交易手續費問題,人們把很多資源投入到閃電網絡開發工作中。但根據一篇發布於2016年的論文,閃電網絡在實踐中最多只能支持數千萬用戶,無法實現其全球支付系統的願景。

除了交易手續費過於昂貴外,還有一個問題,就是 比特幣始終無法實現其願景中想達到的匿名性。 中本聰在曾在密碼朋克郵件討論組中指出,比特幣具有隱私保護功能,交易發起者可以是完全匿名的。然而,雖然交易發起人不需要KYC,但比特幣鏈上的交易數據洩露了許多信息,很大程度上暴露了用戶隱私。

雖然有一些附帶隱私功能的錢包客戶端一定程度解決了上述問題,但這些錢包客戶端的開發者卻面臨著大大小小的威脅。比如,Samourai CoinJoin錢包的開發者在2024年4月被FBI逮捕,而在一周後,Wasabi錢包的開發者就關閉了他們的CoinJoin協調組件。顯然,這些所謂的隱私錢包並不完全值得用戶信任。

總結下來,直到今天比特幣的許多理念還遠未實現,相關技術仍處於不斷發展中。即使這樣,比特幣社區中很多人還認為比特幣的協議設計應該保持不變,但也有很多人像我一樣,熱衷於對比特幣做出改進。 那麼,比特幣應該向何種方向改進呢?

針對上述問題, 比特幣社區中有很多提案,理論效果最好的應該是和ZK及SNARKs相關的。藉助ZK和SNARKs, 可以實現如下特性:

1. 顯著改善隱私性:使用同態Peterson承諾對交易數額和Range Proof顯著提高用戶隱私性(如Blockstream的 Element側鏈中所做的);通過可連結籤名(如Monero )隱藏交易痕跡;實現真正的私密交易(如 Zcash)。

2. 提高交易吞吐量

其實有很多技術手段可以解決比特幣身上存在的問題,但為什麼直到今天,這些技術仍沒有被加入到比特幣協議中? 這是因為比特幣協議很難被修改。比特幣生態裡沒有類似於以太坊基金會的組織,對協議的任何修改都需要社區達到高度共識才行,這裡涉及到大量的博弈和權力制衡, 所以不同於以太坊那樣每年都會有EVM操作碼的更新,比特幣協議自問世以來,變更就非常少。

其實,協議難以被修改在某種程度上是好事,如果修改比特幣協議很容易,那麼對其進行惡意更改和攻擊也會很容易。這就引出了一個問題: 在不改變比特幣協議設計的情況下,有什麼手段可以改善比特幣的性能?

要回答這個問題,我們要先回顧關於比特幣的知識。如果我們要將比特幣轉帳給別人,需要先創建一筆交易,將其廣播到比特幣網絡中。交易的輸出數據會說明轉帳的BTC數額,BTC接收者可以再創建一筆新的交易,來花費收到的BTC。此後,這筆新的交易又會產生新的輸出數據,並將BTC發送給其他人。

這裡要注意的是,比特幣沒有以太坊那樣的全局狀態,特別是沒有帳戶的狀態,只有交易輸出數據。每筆交易的輸出有兩種狀態:已被接收者花費或未被花費。 未被花費的交易輸出就是我們熟悉的UTXO。

當然, 除了關聯的BTC數額外,每個交易輸出都有一段附加程序,用一種叫比特幣腳本的語言來編寫。誰能向這段程序出示正確的證明Witness,誰就能花費這筆交易輸出(UTXO)。 比特幣腳本本身是一種基於堆棧的程式語言,包含一系列操作碼,前述UTXO的附加程序往往由多個操作碼組成,它們基於堆棧完成計算並將結果再放回堆棧。

常見的比特幣腳本有很多種類型,從比特幣啟動之初就已經存在了。舉個例子,比特幣中最常見的腳本程序由公鑰+檢查數字籤名的操作碼組成。該操作碼規定,要花費/解鎖某個UTXO,必須出示對應公鑰的數字籤名。

推薦閱讀:《走近BTC:理解BitVM所需的背景知識(1)》

這裡我們來總結一下比特幣腳本的功能。首先比特幣腳本能做什麼?

  • 可以重排堆棧,等式檢查(使用等式檢查來驗證特定條件是否滿足,從而確保交易的安全性和有效性),可以進行類似於if-else的分支操作。

  • 可以對32位數字進行有限的算術運算,即加法和減法。

  • 可以將數據哈希化,且可以檢查ECDSA和Schnorr籤名。

比特幣腳本不能做什麼?

  • 沒有循環、跳轉、遞歸,即非圖靈完備,編程能力非常有限。

  • 不能進行按位操作。

  • 缺乏進行乘除法的操作碼。

  • 不能連接堆棧上的元素。

  • 幾乎沒有讀取並檢查鏈上交易數據的能力。比特幣腳本不能直接訪問每筆交易的金額,也沒有辦法傳遞狀態(UTXO都是一次性使用的,每次轉帳都會銷毀舊的生成新的)。

在比特幣早期版本中,上述腳本中」不能做「的事情,有一些其實可以做,但部分功能後來被中本聰禁用了,原因是中本聰發現這些操作碼存在漏洞。 例如,可以把堆棧中2個元素合併的操作碼OP_CAT可以被用於遠程攻擊比特幣節點致其崩潰,中本聰出于謹慎,禁用了OP_CAT,其他的一些操作碼也遭到了禁用。

那麼, 比特幣腳本是否可以驗證SNARK?理論上雖然比特幣腳本非圖靈完備,但它的基本操作足以驗證任何計算,可在實踐中SNARK驗證還是無法實現, 因為驗證步驟所需的程序尺寸超過比特幣的最大區塊限制——4MB。

也許我們可以儘量在大型有限域中進行算術運算,但這樣的成本非常高,比如BitVM實現的兩個254位整數的乘法,相關的比特幣腳本尺寸達到近8KB。

而且, 在沒有OP_CAT的情況下驗證Merkle證明的成本也很高, 因為這需要類似於for循環的操作。

那麼 再回到前面的問題:為什麼我們不能簡單地改變比特幣協議,添加功能更強大的操作碼?

正如之前提到的,要在新的協議規則上達成多數共識非常困難,因為比特幣生態沒有中心化決策者, 任何對比特幣腳本的改進提案都有很多反對意見, 大家的立場、角度都是不同的。在比特幣網絡中,沒有很好的辦法來衡量社區是否達成了多數共識,在這種情況下強行推動更新,會導致鏈分叉。

當然, 比特幣也不是完全一成不變的,最近的更新是2017年的SegWit和2021年的Taproot。

Taproot升級改變了許多規則,從理論發布到真正被激活落地,花了三年半。Taproot被啟用的關鍵因素是:它沒有改變現有安全假設,並對比特幣協議做出了明顯改進。例如,它允許使用 Schnorr籤名代替ECDSA,二者都是基於離散對數假設,並使用相同的橢圓曲線,但前者比後者效率更高、計算量更少。

進一步說,Taproot對比特幣的改進主要分為以下三部分:

第一,Taproot降低了有大量選擇性分支的腳本的驗證成本,可以讓比特幣支持更複雜的程序;

第二,Taproot縮減了需要在鏈上揭示的腳本數據,你可以將多段腳本程序組裝為一棵Merkle樹,每段腳本位於不同的葉子上,如果你要觸發某段腳本,只需揭示出示其所在的葉子及Merkle證明;

第三,Taproot還添加了其他的機制設計。

話說回來, 既然比特幣有Tarpoot這樣添加較強大功能的先例,為什麼不添加一個專用的操作碼來驗證SNARK呢? 這是因為添加一個所謂的OP_SNARK操作碼與Taproot升級有很大不同。

首先,OP_SNARK的設計思路有很多,很難讓大多數人都支持某種單一方案;其次,如果這類提案通過了,所有比特幣節點都要支持該特定的OP_SNARK方案,這將增加巨大的技術負擔。

此外,OP_SNARK本身的複雜性也是不小的挑戰。如果不包括測試的話,Taproot只添加了約1600行代碼,這是人們可以接受的,而相比之下,OP_SNARK包含的代碼要複雜得多。

再有,誰來審核OP_SNARK操作碼該不該被激活?如何在沒有幾個人理解其細節的情況下在比特幣生態內獲得共識?這些都是問題。因此 綜合來看,OP_SNARK升級是不會在短時間內發生的。

但是,還有其他途徑可以在比特幣腳本中驗證SNARK。我們可以添加較為簡單的操作碼使比特幣腳本功能性更強大,讓人們可以在腳本中實現SNARK驗證器程序。 但事實上用比特幣腳本語言編寫SNARK驗證程序的難度很大。

因此,Blockstream研究團隊正在開發Simplicity,這是一種旨在替代比特幣腳本的程式語言。Simplicity專為區塊鏈共識系統設計,故意設計成不圖靈完備的,易於靜態分析和形式化驗證。

下面我們要談及一個非常簡單但又很重量級的提案,它可以使比特幣腳本變得更強大,即 OP_CAT操作碼。 前面我們提到,OP_CAT存在於比特幣的最初版本中,但這個操作碼可以在特定條件下讓比特幣節點被DOS攻擊,所以被中本聰禁用,現在比特幣社區中有一些人想重新啟用它。

OP_CAT的功能是彈出堆棧頂部的兩個元素,將它們連接起來,然後再放回堆棧。這聽起來非常簡單,但卻能給比特幣腳本帶來巨大的功能改進。

例如,比特幣腳本程序本來無法訪問鏈上交易的金額等狀態信息,但有了OP_CAT這將成為可能;OP_CAT還可以用於驗證Merkle證明。總之OP_CAT是屬於底層操作碼級別的升級,會衍生出非常多的新功能,很多人都提出過使用 OP_CAT能達成的效果。

而OP_CAT是否有助於在腳本中驗證SNARK呢? 答案是有幫助,因為支持驗證Merkle證明就有助於驗證基於FRI的SNARK,而OP_CAT可以支持這點。在過去,涉及SNARK驗證的腳本程序可能尺寸太大而無法放入比特幣區塊,有了OP_CAT則可以壓縮程序大小。

過去OP_CAT已經被討論很多年,越來越多的人認識到它在交易檢查(introspection)中的作用。與其他提案相比,OP_CAT的優勢在於它以前在比特幣腳本中存在過,因此更容易在社區中達成共識。然而,OP_CAT啟用後也可能導致某些人的MEV收益受損,所以比特幣社區對其還未達成共識。

綜上, 比特幣可能會有一個潛在路徑,通過啟用如OP_CAT這樣的簡單操作碼,讓大家可以用比特幣腳本中驗證SNARK。 另外值得一提的是,最近有一個名為「Great Script Restoration」的提案,啟用了乘法操作碼,允許所有算術操作碼以任意精度操作。

此外,當我們考慮OP_CAT對比特幣網絡的影響時,可以考察它通過後對比特幣節點運行者的影響。為了使比特幣具有抗審查性和去中心化,比特幣社區希望儘可能多的人運行節點驗證數據。 如果比特幣支持了SNARK驗證操作,運行比特幣節點的成本仍不會顯著增加,這對於比特幣的安全性和抗審查性並無多少危害。

目前,一個比特幣區塊可以包含最多4MB的數據,預計每10分鐘挖出一個區塊,幾乎所有的區塊都可以填滿比特幣腳本和Witness見證(類似於數字籤名)。折算下來,每個區塊目前最多可以包含80K次籤名驗證,平均每個區塊支持7K到10K次籤名驗證,我的2020年版英特爾CPU驗證一個比特幣區塊平均耗時3.2 秒。當然,影響區塊驗證速度的不只有籤名驗證的耗時。

此外,如果比特幣交易日後支持ZK化,就算因此延長交易生成時間似乎也無傷大雅。 對於用於長期存儲資產的硬體錢包而言,它們往往帶有屏幕且體積並不大,功能是存儲密鑰並生成籤名。硬體錢包的CPU一般比較弱,如240MHz雙核CPU,並帶有一定內存,在籤署比特幣交易時響應非常迅速。

我做了一個小調查,詢問用戶能接受的籤名設備生成證明的最長延時,許多人可以接受較長的等待時間,特別是能獲得顯著收益的時候。所以如果我們將ZK引入比特幣交易中,似乎也沒有太多麻煩。

上面我們花了很多篇幅來討論應如何變更比特幣的底層設計,但其實還有不少無需變更比特幣就可以實現的應用場景。 這裡我想強調一個與BitVM相關的應用——Chain State Proofs,它結合了ZK,可以證明區塊哈希的有效性。

這項技術給比特幣帶來了什麼變化?首先, 有了Chain State Proofs,就可以壓縮比特幣歷數據的同步與驗證工作量,大幅度降低運行節點的成本。 目前在一臺硬體好的設備上從創世區塊同步並驗證到最新的比特幣區塊,需要5小時30分鐘,而在樹莓派級別的設備上則需要幾天,如果引入狀態證明則可以大幅度壓縮這個耗時。其次, 鏈狀態證明是與BitVM可以用到的重要部分,會對BitVM的實現有推動作用。

ZeroSync團隊對Chain State Proofs進行了深入研究,並創建了一種更輕量的「header chain Proofs」,這種方案結合ZK,只證明比特幣區塊頭的有效性,以此構成一條」header chain「,包含比特幣歷史上全部的85萬個區塊頭,並針對每個區塊頭生成80位元組的哈希。

這種方案需要對每個比特幣區塊頭進行雙重SHA-256計算以驗證對應的PoW證明。ZeroSync的使用STARKs來生成比特幣的header chain Proof,生成證明的成本約為4000美元,用我的瀏覽器驗證該證明則只需要3秒鐘。

但由於不包含區塊中交易內容的驗證過程,header chain proof只能假設擁有最多POW證明的區塊鏈是有效的,並默認讓比特幣客戶端同步這條鏈上的最新區塊。這種場景下,雖然攻擊者可以創建包含無效交易的區塊,並在該區塊之後添加更多區塊,並生成header chain proof來蒙蔽同步歷史數據的比特幣客戶端,但這樣做的話攻擊成本極其昂貴,並且會被現有的比特幣全節點客戶端直接揭穿。

然而,儘管這種攻擊場景的成功率很低,但如果可以讓攻擊者竊取巨大金額的BTC,那麼header chain proof就無法被認作是萬無一失的方案。如果我們想證明完整的鏈狀態,就需要直接證明比特幣區塊中所有的內容都有效,包括基於secp256k1橢圓曲線的ECDSA和Schnorr籤名驗證。

比特幣每個月的歷史區塊中都可以包含3000萬個籤名,歷史上總計包含25億次籤名運算,以及大量的SHA-256運算。這樣下來比特幣網絡每個月產生的區塊數據約7GB,所有歷史數據總計超過650GB。而實際情況中這個數字可能是2到3倍。

現在我們再來看BitVM。 BitVM使得比特幣可以驗證任何計算任務,是無需變更協議來實現 SNARK驗證的最佳路徑。BitVM使用兩種技術繞開了比特幣區塊對腳本大小的限制。首先,它使用了Taproot MerkleTree的腳本結構;

其次,它啟用了可以跨單個腳本訪問的KV存儲方案,允許連接到超級多的腳本程序。不過,比特幣協議不強制保證上述KV存儲方案的完整性, BitVM需要通過欺詐證明來檢查惡意Prover,如果Prover發布無效聲明或有問題的KV存儲,其他人可以在比特幣鏈上發起一筆交易,表明Prover行為不當,並取走其事先質押的資產。

總結一下,比特幣正面臨重大挑戰,大家提出了各種方案解決這些問題,然而,這些提案不會很快被比特幣社區採納,對協議的改變也非短期內能完成的,這既是好事也是壞事,這也意味著比特幣是去中心化的、較為安全的。

比特幣社區許多人對SNARK/STARK的潛力感到興奮。在中長期內實現SNARK驗證的最可行方法,很大概率是BitVM,但它需要更多的研發投入才能在實踐中發揮作用;

重新啟用OP_CAT操作碼也是一種思路,但需要證明重啟該操作碼的收益遠大於風險,並調查哪些簡單的操作碼可以允許在比特幣腳本中驗證SNARK,或者探究類似OP_CAT的功能可以實現什麼場景。無論選擇哪種方案,比特幣社區的最終宗旨一定是讓產品變得實用,支持更多可落地的場景。

原文連結:https://www.youtube.com/watch?v=GrSCZmFuy7U

  • Related Posts

    幣安推出Alpha積分 規則一文全讀懂

    Jessy,比特鏈視界 參與幣安錢包TGE的要求越來越高了!…

    Bankless:有哪些值得關注的去中心化內容創作平臺?

    作者:William M. Peaster,Bankless…

    發佈留言

    發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

    You Missed

    以太坊基金會新紀元:雙重領導與戰略轉型

    • By jakiro
    • 29 4 月, 2025
    • 4 views
    以太坊基金會新紀元:雙重領導與戰略轉型

    三上悠亞發幣:一場頂級流量的加密妖風

    • By jakiro
    • 29 4 月, 2025
    • 4 views
    三上悠亞發幣:一場頂級流量的加密妖風

    Pectra主網確定將在5月7日激活 有哪些更新?

    • By jakiro
    • 29 4 月, 2025
    • 4 views
    Pectra主網確定將在5月7日激活 有哪些更新?

    以太坊基金會再出發:新管理層、願景和未來一年重點

    • By jakiro
    • 29 4 月, 2025
    • 5 views
    以太坊基金會再出發:新管理層、願景和未來一年重點

    資本主義每天都在扼殺 Web3 的靈魂

    • By jakiro
    • 29 4 月, 2025
    • 6 views
    資本主義每天都在扼殺 Web3 的靈魂

    Coingecko:2025 年各國政府持有多少比特幣?

    • By jakiro
    • 29 4 月, 2025
    • 6 views
    Coingecko:2025 年各國政府持有多少比特幣?
    Home
    News
    School
    Search