交易到特定區塊的映射如何/在哪裡儲存?
根據比特幣白皮書,一個區塊包含“Previous Hash”、“Nonce”和“Root Hash”欄位。根雜湊是該特定區塊中已確認的所有交易的默克爾樹根節點。
我在什麼是默克爾根?:
如果我們有一個聲稱來自 #234133 塊的交易,我們可以獲取該塊的交易,驗證 Merkle 樹,並知道該交易是有效的。
假設區塊
b
鏈中某處的一個塊包含t
交易。特定交易集到特定區塊的映射儲存在哪里以及如何儲存?因為區塊鏈本身只包含所有交易的根雜湊以節省空間。那麼是否還有其他隱藏組件尚未在白皮書中發布,是否有資源可以全面了解它們?謝謝。
merkle 樹是動態重新創建的以在一個塊中對其進行驗證,塊中事務的順序隱含地描述了 merkle 樹在重建時應該是什麼樣子。交易儲存為塊的一部分,字面意思是標題,一個表示要遵循的交易數量的數字,然後是所有交易的列表。
白皮書只是給出了比特幣的概念概述,但肯定不是完整的規範。無論如何,除了區塊鏈本身之外,跟踪交易和 UTXO 更多的是實現細節,而不是協議問題。各種瀏覽器、節點和錢包的方法會有所不同,但通常出於不同目的,交易和區塊之間存在一些不同的映射:
區塊鏈:區塊到交易的映射
首先,區塊鏈中包含的區塊包括他們確認的交易。完整的區塊鏈由歸檔完整節點保留。正如 Anonymous 已經解釋的那樣,默克爾樹僅隱式儲存在每個區塊的區塊鏈中,只是按順序列出其完整的交易集。全節點通過在塊驗證期間以及在向它們請求 Merkle 證明時重新散列塊的交易來按需重新創建完整的 merkle 樹。
具體興趣:交易到區塊映射
錢包通常會保留涉及其地址的交易副本。這些交易對像一般應該保持區塊高度和區塊雜湊,以便錢包可以處理鏈重組並跟踪確認計數。我懷疑某些錢包實現也可能會保留 Merkle 證明,例如,如果他們希望能夠向其他設備證明資金的存在。
配置啟動索引時,比特幣核心將保留完整的交易索引
-tindex=1
。UTXO 集:輸出到交易/區塊映射
全節點以未使用交易輸出 (UTXO) 集的形式維護所有比特幣資金的分類賬。UTXO 通過其輸出點 ([txid:vout]) 唯一標識,這意味著它們固有地引用相應的交易。UTXO 對象通常還應包含對確認創建 UTXO 的交易的塊的直接或間接引用。
探險家
探索者通常會保留更全面的交易、區塊、地址和 UTXO 數據庫。