位元幣解析chainstate一種方案

2021-09-09 07:05:13 字數 927 閱讀 7028

首先看下位元幣的資料,它儲存在4個地方。具體如下:

blocks/blk*.dat的檔案中儲存了實際的塊資料,這些資料以網路格式儲存。它們僅用於重新掃瞄錢包中丟失的交易,將這些交易重新組織到鏈的不同部分,並將資料塊提供給其他正在同步資料的節點。

blocks/index/*是乙個leveldb資料庫,儲存著目前已知塊的元資料,這些元資料記錄所有已知的塊以及它們儲存在磁碟上的位置。沒有這些檔案,查詢乙個塊將是非常慢的。

chainstate/*是乙個leveldb資料庫,以緊湊的形式儲存所有當前未花費的交易以及它們的元資料。這裡的資料對於驗證新傳入的塊和交易是必要的。在理論上,這些資料可以從塊資料中重建,但是這需要很長時間。沒有這些資料也可以對資料進行驗證,但是需要現有塊資料進行掃面,這無疑是非常慢的。

blocks/rev*.dat中包含了「撤銷」資料,可以將區塊視為鏈的「補丁」(它們消耗一些未花費的輸出並生成新的輸出),那麼這些撤銷資料將是反向補丁。如果需要回滾鏈,這些資料將是必須的。

其中chainstate儲存的是utxos。換句話說,就是位元幣中的財富。那麼如何解析該資料呢?筆者提供一種方案。

筆者再介紹下大致使用的方法:

blockchain.py 裡面的 get_files 方法獲得位元幣的 blk 檔案,排好序的。

get_blocks 傳入 get_files 裡面的檔名,可以獲取裸塊的資料,這裡採用 yield 返回,不用擔心記憶體爆掉。

然後把獲取的裸資料傳入 block.py 裡的 block 類,可以解碼資料,後面就看各位盡情發揮了。

筆者用該開源庫嘗試做了乙個程式,查詢位址中位元幣數量超過乙個的公鑰。輸出位址,公鑰以及財富總數。然後對比了網路上的財富。是對的,當然有些在10日之後重新交易過。筆者在做的過程中,無法解碼多簽名的交易。

截止2023年1月10日,位元幣財富超過乙個幣的有 62萬多個位址,筆者能夠解碼出公鑰的大概5萬多個。

位元幣 位元幣的實現

位元幣系統是乙個基於交易的賬本,這意味著儲存在賬本中的是一筆筆交易。那麼在使用者進行轉賬交易時,首先就需要確保使用者所持有的數量要大於或等於將要交易的。這要做的目的是為了避免雙花問題。這種基於交易的賬本好處在於隱私保護性比較好,缺點在於每次交易都需要說明幣的 在位元幣的全節點中,會在記憶體中維護乙個...

位元幣簡單概念 位元幣是啥幣?

閒來無事,密碼技術 的確是本科普密碼學的好書,安利一波。看到最近大熱的位元幣,挺有趣,看看一些基礎概念,豐富下見識。簡寫bitcoin 位元幣的交易是在位址的基礎上實現的。那是怎樣的乙個交易流程呢?emmmm,這個也很好理解滴。假如你去去買一包辣條,老闆生成乙個位址,然後告訴你,你生成乙個位址,向老...

位元幣原始碼解析 RPC詳解

在這裡,我們暫時先拋開bitcoin 僅僅來談rpc,提到rpc大家肯定首先會想到遠端過程服務呼叫,既然是呼叫,那就肯定存在乙個client端和乙個server端,clent端與server端通過rpc這個黑盒通過http請求進行互動,那麼就有乙個問題,我自定義的json格式的字串 這裡拿json來...