@@ -292,8 +292,18 @@ typedef struct btck_TransactionOutPoint btck_TransactionOutPoint;
292292 */
293293typedef struct btck_PrecomputedTransactionData btck_PrecomputedTransactionData;
294294
295+ /* *
296+ * Opaque data structure for holding a btck_Txid.
297+ *
298+ * This is a type-safe identifier for a transaction.
299+ */
295300typedef struct btck_Txid btck_Txid;
296301
302+ /* *
303+ * Opaque data structure for holding a btck_BlockHeader.
304+ */
305+ typedef struct btck_BlockHeader btck_BlockHeader;
306+
297307/* * Current sync state passed to tip changed callbacks. */
298308typedef uint8_t btck_SynchronizationState;
299309#define btck_SynchronizationState_INIT_REINDEX ((btck_SynchronizationState)(0 ))
@@ -958,6 +968,15 @@ BITCOINKERNEL_API void btck_context_destroy(btck_Context* context);
958968BITCOINKERNEL_API const btck_BlockTreeEntry* BITCOINKERNEL_WARN_UNUSED_RESULT btck_block_tree_entry_get_previous (
959969 const btck_BlockTreeEntry* block_tree_entry) BITCOINKERNEL_ARG_NONNULL(1 );
960970
971+ /* *
972+ * @brief Return the btck_BlockHeader associated with this entry.
973+ *
974+ * @param[in] block_tree_entry Non-null.
975+ * @return btck_BlockHeader.
976+ */
977+ BITCOINKERNEL_API btck_BlockHeader* BITCOINKERNEL_WARN_UNUSED_RESULT btck_block_tree_entry_get_block_header (
978+ const btck_BlockTreeEntry* block_tree_entry) BITCOINKERNEL_ARG_NONNULL(1 );
979+
961980/* *
962981 * @brief Return the height of a certain block tree entry.
963982 *
@@ -1083,6 +1102,29 @@ BITCOINKERNEL_API void btck_chainstate_manager_options_destroy(btck_ChainstateMa
10831102BITCOINKERNEL_API btck_ChainstateManager* BITCOINKERNEL_WARN_UNUSED_RESULT btck_chainstate_manager_create (
10841103 const btck_ChainstateManagerOptions* chainstate_manager_options) BITCOINKERNEL_ARG_NONNULL(1 );
10851104
1105+ /* *
1106+ * @brief Get the btck_BlockTreeEntry whose associated btck_BlockHeader has the most
1107+ * known cumulative proof of work.
1108+ *
1109+ * @param[in] chainstate_manager Non-null.
1110+ * @return The btck_BlockTreeEntry.
1111+ */
1112+ BITCOINKERNEL_API const btck_BlockTreeEntry* BITCOINKERNEL_WARN_UNUSED_RESULT btck_chainstate_manager_get_best_entry (
1113+ const btck_ChainstateManager* chainstate_manager) BITCOINKERNEL_ARG_NONNULL(1 );
1114+
1115+ /* *
1116+ * @brief Processes and validates the provided btck_BlockHeader.
1117+ *
1118+ * @param[in] chainstate_manager Non-null.
1119+ * @param[in] header Non-null btck_BlockHeader to be validated.
1120+ * @param[out] block_validation_state The result of the btck_BlockHeader validation.
1121+ * @return 0 if btck_BlockHeader processing completed successfully, non-zero on error.
1122+ */
1123+ BITCOINKERNEL_API int BITCOINKERNEL_WARN_UNUSED_RESULT btck_chainstate_manager_process_block_header (
1124+ btck_ChainstateManager* chainstate_manager,
1125+ const btck_BlockHeader* header,
1126+ btck_BlockValidationState* block_validation_state) BITCOINKERNEL_ARG_NONNULL(1 , 2 , 3 );
1127+
10861128/* *
10871129 * @brief Triggers the start of a reindex if the wipe options were previously
10881130 * set for the chainstate manager. Can also import an array of existing block
@@ -1214,6 +1256,17 @@ BITCOINKERNEL_API size_t BITCOINKERNEL_WARN_UNUSED_RESULT btck_block_count_trans
12141256BITCOINKERNEL_API const btck_Transaction* BITCOINKERNEL_WARN_UNUSED_RESULT btck_block_get_transaction_at (
12151257 const btck_Block* block, size_t transaction_index) BITCOINKERNEL_ARG_NONNULL(1 );
12161258
1259+ /* *
1260+ * @brief Get the btck_BlockHeader from the block.
1261+ *
1262+ * Creates a new btck_BlockHeader object from the block's header data.
1263+ *
1264+ * @param[in] block Non-null btck_Block
1265+ * @return btck_BlockHeader.
1266+ */
1267+ BITCOINKERNEL_API btck_BlockHeader* BITCOINKERNEL_WARN_UNUSED_RESULT btck_block_get_header (
1268+ const btck_Block* block) BITCOINKERNEL_ARG_NONNULL(1 );
1269+
12171270/* *
12181271 * @brief Calculate and return the hash of a block.
12191272 *
@@ -1635,6 +1688,92 @@ BITCOINKERNEL_API void btck_block_hash_destroy(btck_BlockHash* block_hash);
16351688
16361689// /@}
16371690
1691+ /* *
1692+ * @name Block Header
1693+ * Functions for working with block headers.
1694+ */
1695+ // /@{
1696+
1697+ /* *
1698+ * @brief Create a btck_BlockHeader from serialized data.
1699+ *
1700+ * @param[in] raw_block_header Non-null, serialized header data (80 bytes)
1701+ * @param[in] raw_block_header_len Length of serialized header (must be 80)
1702+ * @return btck_BlockHeader, or null on error.
1703+ */
1704+ BITCOINKERNEL_API btck_BlockHeader* BITCOINKERNEL_WARN_UNUSED_RESULT btck_block_header_create (
1705+ const void * raw_block_header, size_t raw_block_header_len);
1706+
1707+ /* *
1708+ * @brief Copy a btck_BlockHeader.
1709+ *
1710+ * @param[in] header Non-null btck_BlockHeader.
1711+ * @return Copied btck_BlockHeader.
1712+ */
1713+ BITCOINKERNEL_API btck_BlockHeader* BITCOINKERNEL_WARN_UNUSED_RESULT btck_block_header_copy (
1714+ const btck_BlockHeader* header) BITCOINKERNEL_ARG_NONNULL(1 );
1715+
1716+ /* *
1717+ * @brief Get the btck_BlockHash.
1718+ *
1719+ * @param[in] header Non-null header
1720+ * @return btck_BlockHash.
1721+ */
1722+ BITCOINKERNEL_API btck_BlockHash* BITCOINKERNEL_WARN_UNUSED_RESULT btck_block_header_get_hash (
1723+ const btck_BlockHeader* header) BITCOINKERNEL_ARG_NONNULL(1 );
1724+
1725+ /* *
1726+ * @brief Get the previous btck_BlockHash from btck_BlockHeader. The returned hash is unowned and only valid for the lifetime of the btck_BlockHeader.
1727+ *
1728+ * @param[in] header Non-null btck_BlockHeader
1729+ * @return Previous btck_BlockHash
1730+ */
1731+ BITCOINKERNEL_API const btck_BlockHash* BITCOINKERNEL_WARN_UNUSED_RESULT btck_block_header_get_prev_hash (
1732+ const btck_BlockHeader* header) BITCOINKERNEL_ARG_NONNULL(1 );
1733+
1734+ /* *
1735+ * @brief Get the timestamp from btck_BlockHeader.
1736+ *
1737+ * @param[in] header Non-null btck_BlockHeader
1738+ * @return Block timestamp (Unix epoch seconds)
1739+ */
1740+ BITCOINKERNEL_API uint32_t BITCOINKERNEL_WARN_UNUSED_RESULT btck_block_header_get_timestamp (
1741+ const btck_BlockHeader* header) BITCOINKERNEL_ARG_NONNULL(1 );
1742+
1743+ /* *
1744+ * @brief Get the nBits difficulty target from btck_BlockHeader.
1745+ *
1746+ * @param[in] header Non-null btck_BlockHeader
1747+ * @return Difficulty target (compact format)
1748+ */
1749+ BITCOINKERNEL_API uint32_t BITCOINKERNEL_WARN_UNUSED_RESULT btck_block_header_get_bits (
1750+ const btck_BlockHeader* header) BITCOINKERNEL_ARG_NONNULL(1 );
1751+
1752+ /* *
1753+ * @brief Get the version from btck_BlockHeader.
1754+ *
1755+ * @param[in] header Non-null btck_BlockHeader
1756+ * @return Block version
1757+ */
1758+ BITCOINKERNEL_API int32_t BITCOINKERNEL_WARN_UNUSED_RESULT btck_block_header_get_version (
1759+ const btck_BlockHeader* header) BITCOINKERNEL_ARG_NONNULL(1 );
1760+
1761+ /* *
1762+ * @brief Get the nonce from btck_BlockHeader.
1763+ *
1764+ * @param[in] header Non-null btck_BlockHeader
1765+ * @return Nonce
1766+ */
1767+ BITCOINKERNEL_API uint32_t BITCOINKERNEL_WARN_UNUSED_RESULT btck_block_header_get_nonce (
1768+ const btck_BlockHeader* header) BITCOINKERNEL_ARG_NONNULL(1 );
1769+
1770+ /* *
1771+ * Destroy the btck_BlockHeader.
1772+ */
1773+ BITCOINKERNEL_API void btck_block_header_destroy (btck_BlockHeader* header);
1774+
1775+ // /@}
1776+
16381777#ifdef __cplusplus
16391778} // extern "C"
16401779#endif // __cplusplus
0 commit comments