Leveldb

chainstate leveldb 是否僅包含 P2PKH 和 P2SH 的“地址”?

  • June 24, 2020

我正在編寫一個小腳本,它將 utxo 數據庫轉儲到文本文件中。據我所知,這些是type每個內部欄位指示的最常見的腳本模式value

e.g. value:    b98276a2ec7700cbc2986ff9aed6825920aece14aa6f5382ca5580
              <----><----><><-------------------------------------->
               /      /    \                   \
height/coinbase  value      type                script data


0x00 = P2PKH (hash160 public key)
0x01 = P2SH  (hash160 script)
0x02 = P2PK
0x03 = P2PK
0x04 = P2PK (uncompressed)
0x05 = P2PK (uncompressed)

似乎腳本類型就在那裡,因此您只需要在數據庫中儲存最少量的腳本數據(例如,P2PK、P2PKH 和 P2SH 中的唯一公鑰和腳本雜湊)。

無論如何,假設您只能從腳本類型01(通過對腳本數據進行 base58 編碼)中獲取地址,我是否正確?

換句話說,chainstate leveldb 不包含任何見證數據以允許您使用 P2WPKH 和 P2WSH 腳本獲取 utxos 的地址?

**編輯:**這是完成的工具:https ://github.com/in3rsha/bitcoin-utxo-dump

是的,Bitcoin Core 確實對標準輸出腳本進行了一些壓縮,以儲存所需的最少量數據。

無論如何,假設您只能從腳本類型01(通過對腳本數據進行 base58 編碼)中獲取地址,我是否正確?

是的

換句話說,chainstate leveldb 不包含任何見證數據以允許您使用 P2WPKH 和 P2WSH 腳本獲取 utxos 的地址?

如果通過見證數據,您的意思是隔離見證輸出,則不。所有輸出的 scriptPubKeys 都儲存在數據庫中,否則將無法驗證使用任意腳本和 segwit 腳本的交易。這些腳本在沒有特殊壓縮的情況下儲存(即這裡的類型內容)並且只是按原樣序列化。Segwit 輸出已經是最小形式,所以這裡不需要類型。

由於所有 scriptPubKey 都儲存在數據庫中,因此您可以計算每個 UTXO(如果有的話)的地址,包括 segwit UTXO。

此外,見證數據一詞指的是花費隔離見證輸出的交易的簽名和輸入數據。它不涉及任何與 segwit 相關的內容。在您的問題中使用“見證數據”一詞令人困惑。

引用自:https://bitcoin.stackexchange.com/questions/85710