C++
如果我只有塊頭,如何獲得塊高度?
想像一下,我執行了ReadBlockFromDisk,現在我有了有效的 CBlock 實例。
我如何讀取這個塊的高度?
CBlock block = ...; CBlockIndex index(block); assert (index.nHeight != 0); // fails, nHeight is default initialized
看起來這個函式可以
validation.h
完成這項工作:CBlockIndex* LookupBlockIndex(const uint256& hash)
您需要通過呼叫
AppInitMain
來啟動一個完整的節點init.cpp
,以使索引子系統執行。否則無法查詢索引數據庫獲取塊高。
節點子系統必須預熱並執行才能直接執行從 C++ 連結的查詢。您還需要同步呼叫並尊重鎖 - 不容易。
執行 AppInitMain 與執行基本相同
bitcoind
,因此您最好從 C++ 呼叫 RPC 介面並將getblock <hash> 1
命令傳遞給它。處理生成的 JSON。
getblock <hash> 1
返回這樣的東西{ "hash": "00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048", "confirmations": 600340, "strippedsize": 215, "size": 215, "weight": 860, "height": 1, "version": 1, "versionHex": "00000001", "merkleroot": "0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098", "tx": [ "0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098" ], "time": 1231469665, "mediantime": 1231469665, "nonce": 2573394689, "bits": "1d00ffff", "difficulty": 1, "chainwork": "0000000000000000000000000000000000000000000000000000000200020002", "nTx": 1, "previousblockhash": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", "nextblockhash": "000000006a625f06636b8bb6ac7b960a8d03705d1ace08b1a19da3fdcc99ddbd" }
其中包括高度和其他數據。