Api

比特幣 API 呼叫的時間/記憶體複雜度

  • May 15, 2018

有沒有辦法查看比特幣 API 的時間/記憶體複雜性?例如,**bitcoin-cli getblock “some-header-hash”**獲取具有匹配雜湊的塊。

這是如何在幕後實現的?它是一直對整個區塊鏈進行線性掃描,還是保留一個(鍵,值)表,其中鍵是標頭雜湊?我關心<http://chainquery.com/bitcoin-api>中給出的實現。

比特幣核心維護了一個包含鏈狀態數據的 LevelDB 數據庫(一個鍵值數據庫)。這些數據包括塊頭、磁碟上的塊位置、UTXO 集和其他一些東西。

對於區塊,chainstate 數據庫將區塊雜湊作為鍵和區塊頭,並附加一些額外的數據作為值。額外數據還包括塊在 blk*.dat 文件中的位置(文件中的文件號和字節偏移量,用於塊的開頭)。所以看起來呼叫getblock只是意味著塊雜湊的鍵值對取自LevelDB數據庫,我認為它是O(nlog(n))(IIRC它使用某種樹作為支持結構)。要獲取塊本身,查找是 O(1),因為它只需要讀取特定偏移量的特定文件。

Bitcoin Core 中很少有 RPC 呼叫實際上在區塊鏈中進行任何類型的搜尋。大多數東西要麼儲存在數據庫中,要麼對其位置的引用儲存在數據庫中,因此可以通過數據庫讀取或在數據庫讀取之後快速檢索項目本身。

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