Storage-Footprint

壓縮的 UTXO 集如何儲存在 4GB 中?

  • June 15, 2020

根據 S. Delgado-Segura、C. Pérez-Sola、G. Navarro-Arribas、J. Herrera-Joancomartí,“比特幣 UTXO 集分析”,金融密碼學和數據安全,第 78-91 頁,2019 年,截至 2017 年的 UTXO 集的分佈是:

No of UTXO                  52,543,649   100%      Size
Pay-to-PubkeyHash (P2PKH)   43,079,604    81.99%   147-179 bytes
Pay-to-ScriptHash(P2SH)      8,987,799    17.11%   40 - ? bytes
Pay-to-Pubkey(P2PK)             66,759     0.1%    113 bytes
Others                         409,487     0.8%    114-1483 bytes

2020年4月有6660萬個UTXO。假設分佈相同,UTXO集合的大小應該約為:

No of UTXO: 66.6 million = 100%
Pay-to-PubkeyHash (P2PKH)   81.99%    147-179 bytes   7.475712318GB
Pay-to-ScriptHash(P2SH)     17.11%    40 - ? bytes    0.424506515GB
Pay-to-Pubkey(P2PK)          0.1%     113 bytes       0.007008947GB
Others                       0.8%     114-1483bytes   0.056567788GB
Total                                                 7.963795569GB

根據statoshi.info,截至 2020 年 4 月,序列化的 UTXO 集為 4GB。

我了解 UTXO 數據沒有很多前導零。序列化的 UTXO 集如何壓縮到 4GB?

您提供的尺寸與紙張不符。我什至找不到您在論文中給出的尺寸。這些尺寸是非常錯誤的,而且太大了。它們似乎用於輸入大小,而不是輸出大小。輸入大小與 UTXO 集無關。

P2PKH 是 21 字節,P2SH 是 21 字節,P2PK 是 33 字節,其他都是它們的實際腳本大小。

  • P2PKH = 1.147 GB
  • P2SH = 0.2393 GB

我決定省略其他輸出類型,因為它們太少了,以至於它們的大小可以忽略不計。

數量最多為 0.5328 GB。然而,數量被壓縮,所以實際上應該更小。

輸出點(txid 和輸出索引)最多為 2.398 GB。

因此,序列化的 UTXO 集總共約為 4.3171 GB,與我們實際觀察到的接近。

由於省略了腳本和 LevelDB 的成本,還有更多字節,但應該不會太多(當然不會有幾個 GB)。此外,數量和輸出索引被壓縮,這顯著減少了序列化大小。因此,總共約為 4 GB。我的節點報告 3.9 GB。

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