幫助壓縮區塊鏈的比特幣軟分叉想法
我考慮過一個可以降低儲存成本的軟分叉。
我們為什麼不強制礦工在 4 字節塊頭版本的前兩個字節中嵌入 TX Merkle 樹的高度呢?
它將有兩個優點:
- 它將修復葉節點暴力破解的弱點( CVE-2017-12842 ),目前僅通過標準規則而不是共識規則修復。
- 與BIP 141中的描述類似,我們可以引入一種既不是修剪節點也不是完整節點的節點,但它們可以
txindex=1
用於未花費輸出的交易。這些節點將首先儲存完整的塊。當下一個區塊到來時,他們會使用他們的 txindex 查找該區塊,找到交易並檢查是否所有輸出都已用完。如果是這樣,他們將從該塊的儲存中刪除交易,但只保留其雜湊值。這將節省大量空間,因為在我看來,查詢啟用 txindex 的節點的大多數場景都將用於gettransaction
未使用輸出的事務?任何意見?我認為這不值得發送到 bitcoin-ml。
我們為什麼不強制礦工在 4 字節塊頭版本的前兩個字節中嵌入 TX Merkle 樹的高度呢?
那將是一個理智的軟分叉,但它需要考慮到由於 BIP65,塊版本(它是一個有符號整數)需要至少為 4,將其限制為 2^31-4 個值。保持與 BIP9 和可能的 BIP340 的兼容性,為版本號中的某些位分配意義,會使事情進一步複雜化。
此外,很難說服礦工進行軟分叉,這會使他們的事情變得複雜,這意味著如果沒有成功的 UASF 式壓力,這種做法不太可能被採用。
它將修復葉節點暴力破解漏洞 (CVE-2017-12842),該漏洞目前僅由標準規則修復,而非共識規則。
確實!我認為強制執行最小事務大小的共識更改可能要少得多。
與 BIP 141 中的描述類似,我們可以引入一種既不是修剪節點也不是完整節點的節點,但對於未花費輸出的交易,它們的 txindex=1。這些節點將首先儲存完整的塊。當下一個區塊到來時,他們會使用他們的 txindex 查找該區塊,找到交易並檢查是否所有輸出都已用完。如果是這樣,他們將從該塊的儲存中刪除交易,但只保留其雜湊值。這將節省大量空間,因為在我看來,查詢啟用 txindex 的節點的大多數場景都會對未使用輸出的事務使用 gettransaction?
我看不出這種變化與這種潛在的操作模式有何關係。無論您建議塊在其標頭中送出什麼,它都可以在節點首次驗證塊時被節點記住,而無需更改共識。對於本地節點,如果它自己驗證了區塊中實際有多少交易,它永遠不會說服自己相信其他任何事情。
我也不認為這種模式有任何好處。它與 UTXO 之前的模型驗證(*)一樣緩慢,缺乏提供完整塊的能力(如目前修剪的節點),同時消耗更多的磁碟空間(它需要完全保持每筆交易至少有一個未花費輸出,而不是只保留未使用的輸出本身)。
(*) 在比特幣 0.8 之前,不是區塊鏈 + UTXO 集,而是區塊鏈 + 每筆交易的索引 + 每個輸出的布爾值,無論是否花費。這很慢,因為這意味著工作集(程式碼經常訪問的數據)實際上是整個區塊鏈(對每個花費的輸入進行許多隨機搜尋)。在 0.8 中引入的 UTXO 模型中,UTXO 集獨立於區塊鏈(它不包含指向區塊鏈的指針;它包含所有 UTXO 的副本),從而實現了僅 UTXO 的有效記憶體,並使區塊鏈變得漂亮對於正常操作是不必要的(除了向其他對等方提供塊或重新掃描)。該模型也啟用了修剪,因為區塊鏈本身不再用於驗證。