C++

如果我只有塊頭,如何獲得塊高度?

  • October 31, 2019

想像一下,我執行了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"
}

其中包括高度和其他數據。

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