diff --git a/chronik/chronik-bridge/src/ffi.rs b/chronik/chronik-bridge/src/ffi.rs --- a/chronik/chronik-bridge/src/ffi.rs +++ b/chronik/chronik-bridge/src/ffi.rs @@ -214,6 +214,22 @@ block_index: &CBlockIndex, ) -> Result>; + /// Load the CTransaction and CTxUndo data from disk and turn it into a + /// bridged Tx, containing spent coins etc. + fn load_tx( + self: &ChronikBridge, + file_num: u32, + data_pos: u32, + undo_pos: u32, + ) -> Result; + + /// Load the CTransaction from disk and serialize it. + fn load_raw_tx( + self: &ChronikBridge, + file_num: u32, + data_pos: u32, + ) -> Result>; + /// Find at which block the given block_index forks off from the node. fn find_fork( self: &ChronikBridge, @@ -267,13 +283,6 @@ block_index: &CBlockIndex, ) -> Result; - /// Load the CTransaction and CTxUndo data from disk and turn it into a - /// bridged Tx, containing spent coins etc. - fn load_tx(file_num: u32, data_pos: u32, undo_pos: u32) -> Result; - - /// Load the CTransaction from disk and serialize it. - fn load_raw_tx(file_num: u32, data_pos: u32) -> Result>; - /// Get a BlockInfo for this CBlockIndex. fn get_block_info(block_index: &CBlockIndex) -> BlockInfo; diff --git a/chronik/chronik-cpp/chronik_bridge.h b/chronik/chronik-cpp/chronik_bridge.h --- a/chronik/chronik-cpp/chronik_bridge.h +++ b/chronik/chronik-cpp/chronik_bridge.h @@ -67,6 +67,10 @@ std::unique_ptr load_block_undo(const CBlockIndex &bindex) const; + Tx load_tx(uint32_t file_num, uint32_t data_pos, uint32_t undo_pos) const; + + rust::Vec load_raw_tx(uint32_t file_num, uint32_t data_pos) const; + const CBlockIndex &find_fork(const CBlockIndex &index) const; void lookup_spent_coins(Tx &, rust::Vec ¬_found, @@ -85,9 +89,6 @@ Block bridge_block(const CBlock &block, const CBlockUndo &block_undo, const CBlockIndex &bindex); -Tx load_tx(uint32_t file_num, uint32_t data_pos, uint32_t undo_pos); -rust::Vec load_raw_tx(uint32_t file_num, uint32_t data_pos); - BlockInfo get_block_info(const CBlockIndex &index); const CBlockIndex &get_block_ancestor(const CBlockIndex &index, int32_t height); diff --git a/chronik/chronik-cpp/chronik_bridge.cpp b/chronik/chronik-cpp/chronik_bridge.cpp --- a/chronik/chronik-cpp/chronik_bridge.cpp +++ b/chronik/chronik-cpp/chronik_bridge.cpp @@ -212,6 +212,34 @@ return std::make_unique(std::move(block_undo)); } +Tx ChronikBridge::load_tx(uint32_t file_num, uint32_t data_pos, + uint32_t undo_pos) const { + CMutableTransaction tx; + CTxUndo txundo{}; + const bool isCoinbase = undo_pos == 0; + if (!node::ReadTxFromDisk(tx, FlatFilePos(file_num, data_pos))) { + throw std::runtime_error("Reading tx data from disk failed"); + } + if (!isCoinbase) { + if (!node::ReadTxUndoFromDisk(txundo, + FlatFilePos(file_num, undo_pos))) { + throw std::runtime_error("Reading tx undo data from disk failed"); + } + } + return BridgeTx(isCoinbase, CTransaction(std::move(tx)), txundo.vprevout); +} + +rust::Vec ChronikBridge::load_raw_tx(uint32_t file_num, + uint32_t data_pos) const { + CMutableTransaction tx; + if (!node::ReadTxFromDisk(tx, FlatFilePos(file_num, data_pos))) { + throw std::runtime_error("Reading tx data from disk failed"); + } + CDataStream raw_tx{SER_NETWORK, PROTOCOL_VERSION}; + raw_tx << tx; + return chronik::util::ToRustVec(raw_tx); +} + Tx bridge_tx(const CTransaction &tx, const std::vector<::Coin> &spent_coins) { return BridgeTx(false, tx, spent_coins); } @@ -306,32 +334,6 @@ return BridgeBlock(block, block_undo, bindex); } -Tx load_tx(uint32_t file_num, uint32_t data_pos, uint32_t undo_pos) { - CMutableTransaction tx; - CTxUndo txundo{}; - const bool isCoinbase = undo_pos == 0; - if (!node::ReadTxFromDisk(tx, FlatFilePos(file_num, data_pos))) { - throw std::runtime_error("Reading tx data from disk failed"); - } - if (!isCoinbase) { - if (!node::ReadTxUndoFromDisk(txundo, - FlatFilePos(file_num, undo_pos))) { - throw std::runtime_error("Reading tx undo data from disk failed"); - } - } - return BridgeTx(isCoinbase, CTransaction(std::move(tx)), txundo.vprevout); -} - -rust::Vec load_raw_tx(uint32_t file_num, uint32_t data_pos) { - CMutableTransaction tx; - if (!node::ReadTxFromDisk(tx, FlatFilePos(file_num, data_pos))) { - throw std::runtime_error("Reading tx data from disk failed"); - } - CDataStream raw_tx{SER_NETWORK, PROTOCOL_VERSION}; - raw_tx << tx; - return chronik::util::ToRustVec(raw_tx); -} - BlockInfo get_block_info(const CBlockIndex &bindex) { return { .hash = chronik::util::HashToArray(bindex.GetBlockHash()), diff --git a/chronik/chronik-http/src/handlers.rs b/chronik/chronik-http/src/handlers.rs --- a/chronik/chronik-http/src/handlers.rs +++ b/chronik/chronik-http/src/handlers.rs @@ -4,7 +4,7 @@ use abc_rust_error::{Report, Result}; use bitcoinsuite_slp::token_id::TokenId; -use chronik_indexer::indexer::ChronikIndexer; +use chronik_indexer::indexer::{ChronikIndexer, Node}; use chronik_proto::proto; use hyper::Uri; use thiserror::Error; @@ -59,8 +59,9 @@ hash_or_height: String, query_params: &HashMap, indexer: &ChronikIndexer, + node: &Node, ) -> Result { - let blocks = indexer.blocks(); + let blocks = indexer.blocks(node); let page_num: u32 = get_param(query_params, "page")?.unwrap_or(0); let page_size: u32 = get_param(query_params, "page_size")?.unwrap_or(25); blocks.block_txs(hash_or_height, page_num as usize, page_size as usize) @@ -73,9 +74,10 @@ payload: &str, query_params: &HashMap, indexer: &ChronikIndexer, + node: &Node, ) -> Result { let script_variant = parse_script_variant_hex(script_type, payload)?; - let script_history = indexer.script_history()?; + let script_history = indexer.script_history(node)?; let page_num: u32 = get_param(query_params, "page")?.unwrap_or(0); let page_size: u32 = get_param(query_params, "page_size")?.unwrap_or(25); let script = script_variant.to_script(); @@ -90,9 +92,10 @@ payload: &str, query_params: &HashMap, indexer: &ChronikIndexer, + node: &Node, ) -> Result { let script_variant = parse_script_variant_hex(script_type, payload)?; - let script_history = indexer.script_history()?; + let script_history = indexer.script_history(node)?; let page_num: u32 = get_param(query_params, "page")?.unwrap_or(0); let page_size: u32 = get_param(query_params, "page_size")?.unwrap_or(25); let script = script_variant.to_script(); @@ -105,9 +108,10 @@ script_type: &str, payload: &str, indexer: &ChronikIndexer, + node: &Node, ) -> Result { let script_variant = parse_script_variant_hex(script_type, payload)?; - let script_history = indexer.script_history()?; + let script_history = indexer.script_history(node)?; let script = script_variant.to_script(); script_history.unconfirmed_txs(&script) } @@ -134,9 +138,10 @@ token_id_hex: &str, query_params: &HashMap, indexer: &ChronikIndexer, + node: &Node, ) -> Result { let token_id = token_id_hex.parse::()?; - let token_id_history = indexer.token_id_history(); + let token_id_history = indexer.token_id_history(node); let page_num: u32 = get_param(query_params, "page")?.unwrap_or(0); let page_size: u32 = get_param(query_params, "page_size")?.unwrap_or(25); token_id_history.confirmed_txs( @@ -153,9 +158,10 @@ token_id_hex: &str, query_params: &HashMap, indexer: &ChronikIndexer, + node: &Node, ) -> Result { let token_id = token_id_hex.parse::()?; - let token_id_history = indexer.token_id_history(); + let token_id_history = indexer.token_id_history(node); let page_num: u32 = get_param(query_params, "page")?.unwrap_or(0); let page_size: u32 = get_param(query_params, "page_size")?.unwrap_or(25); token_id_history.rev_history( @@ -169,9 +175,10 @@ pub async fn handle_token_id_unconfirmed_txs( token_id_hex: &str, indexer: &ChronikIndexer, + node: &Node, ) -> Result { let token_id = token_id_hex.parse::()?; - let token_id_history = indexer.token_id_history(); + let token_id_history = indexer.token_id_history(node); token_id_history.unconfirmed_txs(token_id) } diff --git a/chronik/chronik-http/src/server.rs b/chronik/chronik-http/src/server.rs --- a/chronik/chronik-http/src/server.rs +++ b/chronik/chronik-http/src/server.rs @@ -219,9 +219,10 @@ async fn handle_blockchain_info( Extension(indexer): Extension, + Extension(node): Extension, ) -> Result, ReportError> { let indexer = indexer.read().await; - let blocks = indexer.blocks(); + let blocks = indexer.blocks(&node); Ok(Protobuf(blocks.blockchain_info()?)) } @@ -237,18 +238,20 @@ async fn handle_block_range( Path((start_height, end_height)): Path<(i32, i32)>, Extension(indexer): Extension, + Extension(node): Extension, ) -> Result, ReportError> { let indexer = indexer.read().await; - let blocks = indexer.blocks(); + let blocks = indexer.blocks(&node); Ok(Protobuf(blocks.by_range(start_height, end_height)?)) } async fn handle_block( Path(hash_or_height): Path, Extension(indexer): Extension, + Extension(node): Extension, ) -> Result, ReportError> { let indexer = indexer.read().await; - let blocks = indexer.blocks(); + let blocks = indexer.blocks(&node); Ok(Protobuf(blocks.by_hash_or_height(hash_or_height)?)) } @@ -256,30 +259,38 @@ Path(hash_or_height): Path, Query(query_params): Query>, Extension(indexer): Extension, + Extension(node): Extension, ) -> Result, ReportError> { let indexer = indexer.read().await; Ok(Protobuf( - handlers::handle_block_txs(hash_or_height, &query_params, &indexer) - .await?, + handlers::handle_block_txs( + hash_or_height, + &query_params, + &indexer, + &node, + ) + .await?, )) } async fn handle_tx( Path(txid): Path, Extension(indexer): Extension, + Extension(node): Extension, ) -> Result, ReportError> { let indexer = indexer.read().await; let txid = txid.parse::().wrap_err(NotTxId(txid))?; - Ok(Protobuf(indexer.txs().tx_by_id(txid)?)) + Ok(Protobuf(indexer.txs(&node).tx_by_id(txid)?)) } async fn handle_token_info( Path(txid): Path, Extension(indexer): Extension, + Extension(node): Extension, ) -> Result, ReportError> { let indexer = indexer.read().await; let txid = txid.parse::().wrap_err(NotTxId(txid))?; - Ok(Protobuf(indexer.txs().token_info(&txid)?)) + Ok(Protobuf(indexer.txs(&node).token_info(&txid)?)) } async fn handle_broadcast_tx( @@ -343,16 +354,18 @@ async fn handle_raw_tx( Path(txid): Path, Extension(indexer): Extension, + Extension(node): Extension, ) -> Result, ReportError> { let indexer = indexer.read().await; let txid = txid.parse::().wrap_err(NotTxId(txid))?; - Ok(Protobuf(indexer.txs().raw_tx_by_id(&txid)?)) + Ok(Protobuf(indexer.txs(&node).raw_tx_by_id(&txid)?)) } async fn handle_script_confirmed_txs( Path((script_type, payload)): Path<(String, String)>, Query(query_params): Query>, Extension(indexer): Extension, + Extension(node): Extension, ) -> Result, ReportError> { let indexer = indexer.read().await; Ok(Protobuf( @@ -361,6 +374,7 @@ &payload, &query_params, &indexer, + &node, ) .await?, )) @@ -370,6 +384,7 @@ Path((script_type, payload)): Path<(String, String)>, Query(query_params): Query>, Extension(indexer): Extension, + Extension(node): Extension, ) -> Result, ReportError> { let indexer = indexer.read().await; Ok(Protobuf( @@ -378,6 +393,7 @@ &payload, &query_params, &indexer, + &node, ) .await?, )) @@ -386,6 +402,7 @@ async fn handle_script_unconfirmed_txs( Path((script_type, payload)): Path<(String, String)>, Extension(indexer): Extension, + Extension(node): Extension, ) -> Result, ReportError> { let indexer = indexer.read().await; Ok(Protobuf( @@ -393,6 +410,7 @@ &script_type, &payload, &indexer, + &node, ) .await?, )) @@ -412,6 +430,7 @@ Path(token_id_hex): Path, Query(query_params): Query>, Extension(indexer): Extension, + Extension(node): Extension, ) -> Result, ReportError> { let indexer = indexer.read().await; Ok(Protobuf( @@ -419,6 +438,7 @@ &token_id_hex, &query_params, &indexer, + &node, ) .await?, )) @@ -428,6 +448,7 @@ Path(token_id_hex): Path, Query(query_params): Query>, Extension(indexer): Extension, + Extension(node): Extension, ) -> Result, ReportError> { let indexer = indexer.read().await; Ok(Protobuf( @@ -435,6 +456,7 @@ &token_id_hex, &query_params, &indexer, + &node, ) .await?, )) @@ -443,11 +465,16 @@ async fn handle_token_id_unconfirmed_txs( Path(token_id_hex): Path, Extension(indexer): Extension, + Extension(node): Extension, ) -> Result, ReportError> { let indexer = indexer.read().await; Ok(Protobuf( - handlers::handle_token_id_unconfirmed_txs(&token_id_hex, &indexer) - .await?, + handlers::handle_token_id_unconfirmed_txs( + &token_id_hex, + &indexer, + &node, + ) + .await?, )) } diff --git a/chronik/chronik-indexer/src/indexer.rs b/chronik/chronik-indexer/src/indexer.rs --- a/chronik/chronik-indexer/src/indexer.rs +++ b/chronik/chronik-indexer/src/indexer.rs @@ -530,34 +530,40 @@ } /// Return [`QueryBlocks`] to read blocks from the DB. - pub fn blocks(&self) -> QueryBlocks<'_> { + pub fn blocks<'a>(&'a self, node: &'a Node) -> QueryBlocks<'a> { QueryBlocks { db: &self.db, avalanche: &self.avalanche, mempool: &self.mempool, + node, is_token_index_enabled: self.is_token_index_enabled, } } /// Return [`QueryTxs`] to return txs from mempool/DB. - pub fn txs(&self) -> QueryTxs<'_> { + pub fn txs<'a>(&'a self, node: &'a Node) -> QueryTxs<'a> { QueryTxs { db: &self.db, avalanche: &self.avalanche, mempool: &self.mempool, + node, is_token_index_enabled: self.is_token_index_enabled, } } /// Return [`QueryGroupHistory`] for scripts to query the tx history of /// scripts. - pub fn script_history(&self) -> Result> { + pub fn script_history<'a>( + &'a self, + node: &'a Node, + ) -> Result> { Ok(QueryGroupHistory { db: &self.db, avalanche: &self.avalanche, mempool: &self.mempool, mempool_history: self.mempool.script_history(), group: self.script_group.clone(), + node, is_token_index_enabled: self.is_token_index_enabled, }) } @@ -579,13 +585,17 @@ /// Return [`QueryGroupHistory`] for token IDs to query the tx history of /// token IDs. - pub fn token_id_history(&self) -> QueryGroupHistory<'_, TokenIdGroup> { + pub fn token_id_history<'a>( + &'a self, + node: &'a Node, + ) -> QueryGroupHistory<'a, TokenIdGroup> { QueryGroupHistory { db: &self.db, avalanche: &self.avalanche, mempool: &self.mempool, mempool_history: self.mempool.token_id_history(), group: TokenIdGroup, + node, is_token_index_enabled: self.is_token_index_enabled, } } diff --git a/chronik/chronik-indexer/src/query/blocks.rs b/chronik/chronik-indexer/src/query/blocks.rs --- a/chronik/chronik-indexer/src/query/blocks.rs +++ b/chronik/chronik-indexer/src/query/blocks.rs @@ -9,7 +9,6 @@ block::BlockHash, tx::{Tx, TxId}, }; -use chronik_bridge::ffi; use chronik_db::{ db::Db, io::{ @@ -23,6 +22,7 @@ use crate::{ avalanche::Avalanche, + indexer::Node, query::{make_tx_proto, HashOrHeight, OutputsSpent, TxTokenData}, }; @@ -42,6 +42,8 @@ pub avalanche: &'a Avalanche, /// Mempool pub mempool: &'a Mempool, + /// Access to bitcoind to read txs + pub node: &'a Node, /// Whether the SLP/ALP token index is enabled pub is_token_index_enabled: bool, } @@ -198,12 +200,14 @@ .tx_by_tx_num(tx_num)? .ok_or(BlockHasMissingTx(db_block.hash.clone(), tx_num))?; let tx = Tx::from( - ffi::load_tx( - db_block.file_num, - db_tx.entry.data_pos, - db_tx.entry.undo_pos, - ) - .wrap_err(ReadFailure(db_tx.entry.txid))?, + self.node + .bridge + .load_tx( + db_block.file_num, + db_tx.entry.data_pos, + db_tx.entry.undo_pos, + ) + .wrap_err(ReadFailure(db_tx.entry.txid))?, ); let outputs_spent = OutputsSpent::query( &spent_by_reader, diff --git a/chronik/chronik-indexer/src/query/group_history.rs b/chronik/chronik-indexer/src/query/group_history.rs --- a/chronik/chronik-indexer/src/query/group_history.rs +++ b/chronik/chronik-indexer/src/query/group_history.rs @@ -8,7 +8,6 @@ use abc_rust_error::Result; use bitcoinsuite_core::tx::{Tx, TxId}; -use chronik_bridge::ffi; use chronik_db::{ db::Db, group::Group, @@ -21,6 +20,7 @@ use crate::{ avalanche::Avalanche, + indexer::Node, query::{make_tx_proto, OutputsSpent, TxTokenData}, }; @@ -44,6 +44,8 @@ pub mempool_history: &'a MempoolGroupHistory, /// Group to query txs by pub group: G, + /// Access to bitcoind to read txs + pub node: &'a Node, /// Whether the SLP/ALP token index is enabled pub is_token_index_enabled: bool, } @@ -381,7 +383,7 @@ let block = block_reader .by_height(block_tx.block_height)? .ok_or(MissingDbTxBlock(tx_num))?; - let tx = Tx::from(ffi::load_tx( + let tx = Tx::from(self.node.bridge.load_tx( block.file_num, block_tx.entry.data_pos, block_tx.entry.undo_pos, diff --git a/chronik/chronik-indexer/src/query/txs.rs b/chronik/chronik-indexer/src/query/txs.rs --- a/chronik/chronik-indexer/src/query/txs.rs +++ b/chronik/chronik-indexer/src/query/txs.rs @@ -9,7 +9,6 @@ ser::BitcoinSer, tx::{Tx, TxId}, }; -use chronik_bridge::ffi; use chronik_db::{ db::Db, io::{BlockReader, SpentByReader, TxReader}, @@ -20,6 +19,7 @@ use crate::{ avalanche::Avalanche, + indexer::Node, query::{ make_genesis_info_proto, make_token_type_proto, make_tx_proto, read_token_info, OutputsSpent, QueryTxError::*, TxTokenData, @@ -35,6 +35,8 @@ pub avalanche: &'a Avalanche, /// Mempool pub mempool: &'a Mempool, + /// Access to bitcoind to read txs + pub node: &'a Node, /// Whether the SLP/ALP token index is enabled pub is_token_index_enabled: bool, } @@ -87,12 +89,14 @@ .by_height(block_tx.block_height)? .ok_or(DbTxHasNoBlock(txid))?; let tx = Tx::from( - ffi::load_tx( - block.file_num, - tx_entry.data_pos, - tx_entry.undo_pos, - ) - .wrap_err(ReadFailure(txid))?, + self.node + .bridge + .load_tx( + block.file_num, + tx_entry.data_pos, + tx_entry.undo_pos, + ) + .wrap_err(ReadFailure(txid))?, ); let outputs_spent = OutputsSpent::query( &spent_by_reader, @@ -134,7 +138,9 @@ let block = block_reader .by_height(block_tx.block_height)? .ok_or(DbTxHasNoBlock(*txid))?; - ffi::load_raw_tx(block.file_num, block_tx.entry.data_pos) + self.node + .bridge + .load_raw_tx(block.file_num, block_tx.entry.data_pos) .wrap_err(ReadFailure(*txid))? } }; diff --git a/chronik/test/bridgeprimitives_tests.cpp b/chronik/test/bridgeprimitives_tests.cpp --- a/chronik/test/bridgeprimitives_tests.cpp +++ b/chronik/test/bridgeprimitives_tests.cpp @@ -169,16 +169,16 @@ FlatFilePos(bridgedGenesisBlock.file_num, bridgedGenesisTx.data_pos))); BOOST_CHECK(genesisTxFromDisk.GetHash() == genesisBlock.vtx[0]->GetHash()); - CheckTxsEqual(chronik_bridge::load_tx(bridgedGenesisBlock.file_num, - bridgedGenesisTx.data_pos, - bridgedGenesisTx.undo_pos), + CheckTxsEqual(bridge.load_tx(bridgedGenesisBlock.file_num, + bridgedGenesisTx.data_pos, + bridgedGenesisTx.undo_pos), bridgedGenesisTx.tx); CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); ss << genesisBlock.vtx[0]; - BOOST_CHECK_EQUAL(HexStr(ss), HexStr(chronik_bridge::load_raw_tx( - bridgedGenesisBlock.file_num, - bridgedGenesisTx.data_pos))); + BOOST_CHECK_EQUAL(HexStr(ss), + HexStr(bridge.load_raw_tx(bridgedGenesisBlock.file_num, + bridgedGenesisTx.data_pos))); } BOOST_FIXTURE_TEST_CASE(test_bridge_detailled, TestChain100Setup) { @@ -324,16 +324,15 @@ CheckMatchesDisk(testBlock, bridgedTestBlock); for (const chronik_bridge::BlockTx &bridgedTx : bridgedTestBlock.txs) { - CheckTxsEqual(chronik_bridge::load_tx(bridgedTestBlock.file_num, - bridgedTx.data_pos, - bridgedTx.undo_pos), + CheckTxsEqual(bridge.load_tx(bridgedTestBlock.file_num, + bridgedTx.data_pos, bridgedTx.undo_pos), bridgedTx.tx); } for (size_t i = 0; i < testBlock.vtx.size(); ++i) { CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); ss << testBlock.vtx[i]; - BOOST_CHECK_EQUAL(HexStr(ss), HexStr(chronik_bridge::load_raw_tx( + BOOST_CHECK_EQUAL(HexStr(ss), HexStr(bridge.load_raw_tx( bridgedTestBlock.file_num, bridgedTestBlock.txs[i].data_pos))); } @@ -448,37 +447,40 @@ CheckMatchesDisk(testBlock, bridgedBlock); for (const chronik_bridge::BlockTx &bridgedTx : bridgedBlock.txs) { - CheckTxsEqual(chronik_bridge::load_tx(bridgedBlock.file_num, - bridgedTx.data_pos, - bridgedTx.undo_pos), + CheckTxsEqual(bridge.load_tx(bridgedBlock.file_num, + bridgedTx.data_pos, + bridgedTx.undo_pos), bridgedTx.tx); } } } BOOST_FIXTURE_TEST_CASE(test_load_tx_bad, TestChain100Setup) { + const CChainParams ¶ms = GetConfig().GetChainParams(); + const chronik_bridge::ChronikBridge bridge(params.GetConsensus(), m_node); + BOOST_CHECK_EXCEPTION( - chronik_bridge::load_tx(0x7fffffff, 0, 0), std::runtime_error, + bridge.load_tx(0x7fffffff, 0, 0), std::runtime_error, [](const std::runtime_error &ex) { BOOST_CHECK_EQUAL(ex.what(), "Reading tx data from disk failed"); return true; }); BOOST_CHECK_EXCEPTION( - chronik_bridge::load_tx(0, 0x7fffffff, 0), std::runtime_error, + bridge.load_tx(0, 0x7fffffff, 0), std::runtime_error, [](const std::runtime_error &ex) { BOOST_CHECK_EQUAL(ex.what(), "Reading tx data from disk failed"); return true; }); uint32_t genesisCbDataPos = 89; - BOOST_CHECK_EXCEPTION( - chronik_bridge::load_tx(0, genesisCbDataPos, 0x7fffffff), - std::runtime_error, [](const std::runtime_error &ex) { - BOOST_CHECK_EQUAL(ex.what(), - "Reading tx undo data from disk failed"); - return true; - }); + BOOST_CHECK_EXCEPTION(bridge.load_tx(0, genesisCbDataPos, 0x7fffffff), + std::runtime_error, [](const std::runtime_error &ex) { + BOOST_CHECK_EQUAL( + ex.what(), + "Reading tx undo data from disk failed"); + return true; + }); // sanity check - chronik_bridge::load_tx(0, genesisCbDataPos, 0); + bridge.load_tx(0, genesisCbDataPos, 0); } BOOST_AUTO_TEST_SUITE_END()