diff --git a/rust-bins/duniter-dbex/src/migrate.rs b/rust-bins/duniter-dbex/src/migrate.rs index 149791a136fd1bd2c88c90ced9a68e166af5a3e3..b4bcc7abf868780453ad8a1921a1f7191d75a7df 100644 --- a/rust-bins/duniter-dbex/src/migrate.rs +++ b/rust-bins/duniter-dbex/src/migrate.rs @@ -26,15 +26,15 @@ const CHUNK_SIZE: usize = 250; pub(crate) fn migrate(profile_path: PathBuf) -> anyhow::Result<()> { let start_time = Instant::now(); - let dbs = duniter_dbs::open_dbs(Some(profile_path.as_path())); + let (bc_db, dbs) = duniter_dbs::open_dbs(Some(profile_path.as_path())); // Clear bc_db and gva_db - dbs.bc_db.clear()?; + bc_db.clear()?; dbs.gva_db.clear()?; - if let Err(e) = migrate_inner(dbs.clone(), profile_path, start_time) { + if let Err(e) = migrate_inner(&bc_db, dbs.clone(), profile_path, start_time) { // Clear bc_db and gva_db - dbs.bc_db.clear()?; + bc_db.clear()?; dbs.gva_db.clear()?; Err(e) @@ -44,6 +44,7 @@ pub(crate) fn migrate(profile_path: PathBuf) -> anyhow::Result<()> { } fn migrate_inner( + bc_db: &BcV2Db<FileBackend>, dbs: DuniterDbs<FileBackend>, profile_path: PathBuf, start_time: Instant, @@ -121,7 +122,7 @@ fn migrate_inner( }) .expect("gva:apply_chunk: dbs pool disconnected"); current = Some(duniter_dbs_write_ops::apply_block::apply_chunk( - current, &dbs_pool, chunk, + bc_db, current, &dbs_pool, chunk, )?); gva_handle .join() @@ -133,8 +134,8 @@ fn migrate_inner( parser_handle.join().expect("parser thread panic")?; println!("Flush DBs caches on disk..."); + bc_db.save()?; dbs_pool.execute(|dbs| { - dbs.bc_db.save()?; dbs.gva_db.save()?; Ok::<(), KvError>(()) })??; diff --git a/rust-libs/duniter-dbs-write-ops/src/apply_block.rs b/rust-libs/duniter-dbs-write-ops/src/apply_block.rs index 216b9354a144a700e35082a30602c85b463daa2e..756d07b81cf83972d133d39feb4d87e0af5fbd06 100644 --- a/rust-libs/duniter-dbs-write-ops/src/apply_block.rs +++ b/rust-libs/duniter-dbs-write-ops/src/apply_block.rs @@ -16,6 +16,7 @@ use crate::*; pub fn apply_block( + bc_db: &BcV2Db<FileBackend>, block: Arc<DubpBlockV10>, current_opt: Option<BlockMetaV2>, dbs_pool: &fast_threadpool::ThreadPoolSyncHandler<DuniterDbs<FileBackend>>, @@ -23,7 +24,7 @@ pub fn apply_block( ) -> KvResult<BlockMetaV2> { if let Some(current) = current_opt { if block.number().0 == current.number + 1 { - apply_block_inner(dbs_pool, block) + apply_block_inner(bc_db, dbs_pool, block) } else if throw_chainability { Err(KvError::Custom( format!( @@ -37,7 +38,7 @@ pub fn apply_block( Ok(current) } } else if block.number() == BlockNumber(0) { - apply_block_inner(dbs_pool, block) + apply_block_inner(bc_db, dbs_pool, block) } else { Err(KvError::Custom( "Try to apply non genesis block on empty blockchain".into(), @@ -47,12 +48,13 @@ pub fn apply_block( #[inline(always)] pub fn apply_chunk( + bc_db: &BcV2Db<FileBackend>, current_opt: Option<BlockMetaV2>, dbs_pool: &fast_threadpool::ThreadPoolSyncHandler<DuniterDbs<FileBackend>>, blocks: Arc<[DubpBlockV10]>, ) -> KvResult<BlockMetaV2> { verify_chunk_chainability(current_opt, &blocks)?; - apply_chunk_inner(dbs_pool, blocks) + apply_chunk_inner(bc_db, dbs_pool, blocks) } fn verify_chunk_chainability( @@ -100,57 +102,58 @@ fn verify_chunk_chainability( } fn apply_block_inner( + bc_db: &BcV2Db<FileBackend>, dbs_pool: &fast_threadpool::ThreadPoolSyncHandler<DuniterDbs<FileBackend>>, block: Arc<DubpBlockV10>, ) -> KvResult<BlockMetaV2> { - // Bc - let block_arc = Arc::clone(&block); - let bc_recv = dbs_pool - .launch(move |dbs| crate::bc::apply_block(&dbs.bc_db, &block_arc)) - .expect("dbs pool disconnected"); + let block_arc_clone = Arc::clone(&block); + //TxsMp - let block_arc = Arc::clone(&block); let txs_mp_recv = dbs_pool .launch(move |dbs| { - crate::txs_mp::apply_block(block_arc.transactions(), &dbs.txs_mp_db)?; + crate::txs_mp::apply_block(block_arc_clone.transactions(), &dbs.txs_mp_db)?; Ok::<_, KvError>(()) }) .expect("dbs pool disconnected"); + // Bc + let new_current = crate::bc::apply_block(bc_db, &block)?; + txs_mp_recv.join().expect("dbs pool disconnected")?; - bc_recv.join().expect("dbs pool disconnected") + + Ok(new_current) } fn apply_chunk_inner( + bc_db: &BcV2Db<FileBackend>, dbs_pool: &fast_threadpool::ThreadPoolSyncHandler<DuniterDbs<FileBackend>>, blocks: Arc<[DubpBlockV10]>, ) -> KvResult<BlockMetaV2> { - // Bc let blocks_len = blocks.len(); - let blocks_arc = Arc::clone(&blocks); - //log::info!("apply_chunk: launch bc job..."); - let bc_handle = dbs_pool - .launch(move |dbs| { - for block in &blocks_arc[..(blocks_len - 1)] { - crate::bc::apply_block(&dbs.bc_db, block)?; - } - crate::bc::apply_block(&dbs.bc_db, &blocks_arc[blocks_len - 1]) - }) - .expect("apply_chunk_inner:bc: dbs pool disconnected"); + let blocks_arc_clone = Arc::clone(&blocks); + //TxsMp - let blocks_arc = Arc::clone(&blocks); //log::info!("apply_chunk: launch txs_mp job..."); let txs_mp_handle = dbs_pool .launch(move |dbs| { - for block in blocks_arc.deref() { + for block in blocks_arc_clone.deref() { crate::txs_mp::apply_block(block.transactions(), &dbs.txs_mp_db)?; } Ok::<_, KvError>(()) }) .expect("apply_chunk_inner:txs_mp: dbs pool disconnected"); + + // Bc + //log::info!("apply_chunk: launch bc job..."); + for block in &blocks[..(blocks_len - 1)] { + crate::bc::apply_block(bc_db, block)?; + } + let current_block = crate::bc::apply_block(bc_db, &blocks[blocks_len - 1])?; + txs_mp_handle .join() .expect("txs_mp_recv: dbs pool disconnected")?; //log::info!("apply_chunk: txs_mp job finish."); - bc_handle.join().expect("bc_recv: dbs pool disconnected") + + Ok(current_block) } diff --git a/rust-libs/duniter-dbs-write-ops/src/lib.rs b/rust-libs/duniter-dbs-write-ops/src/lib.rs index d97f5c75fb493d8a6015969521ce0298f40e9e82..04edc631a143ea7e156f60bf13e0770d8a52514b 100644 --- a/rust-libs/duniter-dbs-write-ops/src/lib.rs +++ b/rust-libs/duniter-dbs-write-ops/src/lib.rs @@ -37,9 +37,9 @@ use dubp::documents::{ }; use dubp::wallet::prelude::*; use duniter_dbs::{ - kv_typed::prelude::*, BlockMetaV2, DuniterDbs, FileBackend, HashKeyV2, PendingTxDbV2, - PubKeyKeyV2, PubKeyValV2, SourceAmountValV2, TxsMpV2Db, TxsMpV2DbReadable, TxsMpV2DbWritable, - UtxoValV2, WalletConditionsV2, + bc_v2::BcV2Db, kv_typed::prelude::*, BlockMetaV2, DuniterDbs, FileBackend, HashKeyV2, + PendingTxDbV2, PubKeyKeyV2, PubKeyValV2, SourceAmountValV2, TxsMpV2Db, TxsMpV2DbReadable, + TxsMpV2DbWritable, UtxoValV2, WalletConditionsV2, }; use resiter::filter_map::FilterMap; use resiter::flatten::Flatten; diff --git a/rust-libs/duniter-dbs/src/lib.rs b/rust-libs/duniter-dbs/src/lib.rs index 550b9d63c94c2ab9c2482e2b271686c1d614270c..4ff45f4362517a739e43659e593ec19bf2463b76 100644 --- a/rust-libs/duniter-dbs/src/lib.rs +++ b/rust-libs/duniter-dbs/src/lib.rs @@ -121,7 +121,7 @@ pub type FileBackend = kv_typed::backend::memory::Mem; #[derive(Clone, Debug)] pub struct DuniterDbs<B: Backend> { - pub bc_db: bc_v2::BcV2Db<B>, + pub bc_db_ro: bc_v2::BcV2DbRo<B>, pub cm_db: cm_v1::CmV1Db<MemSingleton>, pub gva_db: GvaV1Db<B>, pub txs_mp_db: TxsMpV2Db<B>, @@ -132,7 +132,7 @@ impl DuniterDbs<Mem> { use bc_v2::BcV2DbWritable as _; use cm_v1::CmV1DbWritable as _; Ok(DuniterDbs { - bc_db: bc_v2::BcV2Db::<Mem>::open(MemConf::default())?, + bc_db_ro: bc_v2::BcV2Db::<Mem>::open(MemConf::default())?.get_ro_handler(), cm_db: cm_v1::CmV1Db::<MemSingleton>::open(MemSingletonConf::default())?, gva_db: GvaV1Db::<Mem>::open(MemConf::default())?, txs_mp_db: TxsMpV2Db::<Mem>::open(MemConf::default())?, diff --git a/rust-libs/duniter-dbs/src/open_dbs.rs b/rust-libs/duniter-dbs/src/open_dbs.rs index 8a01ae5507262bfeb57a5dcf9fd66008e42a8c61..001a06718c591ec1661728d3389d10c7684285eb 100644 --- a/rust-libs/duniter-dbs/src/open_dbs.rs +++ b/rust-libs/duniter-dbs/src/open_dbs.rs @@ -17,17 +17,21 @@ use crate::bc_v2::BcV2DbWritable as _; use crate::cm_v1::CmV1DbWritable as _; use crate::*; -pub fn open_dbs<B: BackendConf>(home_path_opt: Option<&Path>) -> DuniterDbs<B> { - DuniterDbs { - bc_db: crate::bc_v2::BcV2Db::<B>::open(B::gen_backend_conf("bc_v2", home_path_opt)) - .expect("fail to open BcV2 DB"), +pub fn open_dbs<B: BackendConf>( + home_path_opt: Option<&Path>, +) -> (crate::bc_v2::BcV2Db<B>, DuniterDbs<B>) { + let bc_db = crate::bc_v2::BcV2Db::<B>::open(B::gen_backend_conf("bc_v2", home_path_opt)) + .expect("fail to open BcV2 DB"); + let dbs = DuniterDbs { + bc_db_ro: bc_db.get_ro_handler(), cm_db: crate::cm_v1::CmV1Db::<MemSingleton>::open(MemSingletonConf::default()) .expect("fail to open CmV1 DB"), gva_db: GvaV1Db::<B>::open(B::gen_backend_conf("gva_v1", home_path_opt)) .expect("fail to open Gva DB"), txs_mp_db: TxsMpV2Db::<B>::open(B::gen_backend_conf("txs_mp_v2", home_path_opt)) .expect("fail to open TxsMp DB"), - } + }; + (bc_db, dbs) } pub trait BackendConf: Backend { diff --git a/rust-libs/duniter-server/src/lib.rs b/rust-libs/duniter-server/src/lib.rs index 1b9c6375def724c6a35acb5fa254dbf6e483ea04..6068fce648e2a1d2f51910276df71dbd88fedba4 100644 --- a/rust-libs/duniter-server/src/lib.rs +++ b/rust-libs/duniter-server/src/lib.rs @@ -33,6 +33,7 @@ use dubp::documents::{prelude::*, transaction::TransactionDocumentV10}; use dubp::{ block::prelude::*, common::crypto::hashs::Hash, documents_parser::prelude::FromStringObject, }; +use duniter_dbs::bc_v2::BcV2Db; use duniter_dbs::cm_v1::{CmV1DbReadable, CmV1DbWritable}; use duniter_dbs::{ kv_typed::prelude::*, GvaV1DbReadable, HashKeyV2, PendingTxDbV2, TxsMpV2DbReadable, @@ -52,6 +53,7 @@ pub enum DuniterCommand { } pub struct DuniterServer { + bc_db: BcV2Db<FileBackend>, conf: DuniterConf, current: Option<BlockMetaV2>, dbs_pool: fast_threadpool::ThreadPoolSyncHandler<DuniterDbs<FileBackend>>, @@ -77,9 +79,9 @@ impl DuniterServer { let txs_mempool = TxsMempool::new(conf.txs_mempool_size); log::info!("open duniter databases..."); - let dbs = duniter_dbs::open_dbs(home_path_opt); + let (bc_db, dbs) = duniter_dbs::open_dbs(home_path_opt); log::info!("Databases successfully opened."); - let current = duniter_dbs_read_ops::get_current_block_meta(&dbs.bc_db) + let current = duniter_dbs_read_ops::get_current_block_meta(&dbs.bc_db_ro) .context("Fail to get current")?; if let Some(current) = current { log::info!("Current block: #{}-{}", current.number, current.hash); @@ -123,6 +125,7 @@ impl DuniterServer { }; Ok(DuniterServer { + bc_db, conf, current, dbs_pool: threadpool.into_sync_handler(), @@ -154,7 +157,7 @@ impl DuniterServer { match self .dbs_pool .execute(move |dbs| { - txs_mempool.accept_new_tx(&dbs.bc_db, server_pubkey, tx, &dbs.txs_mp_db) + txs_mempool.accept_new_tx(&dbs.bc_db_ro, server_pubkey, tx, &dbs.txs_mp_db) }) .expect("dbs pool discorrected") { @@ -262,16 +265,17 @@ impl DuniterServer { .map_err(|e| KvError::DeserError(format!("{}", e)))?, ); let block_arc_clone = Arc::clone(&block); - self.current = self + let txs_mp_job_handle = self .dbs_pool - .execute(move |dbs| { + .launch(move |dbs| { duniter_dbs_write_ops::txs_mp::revert_block( block_arc_clone.transactions(), &dbs.txs_mp_db, - )?; - duniter_dbs_write_ops::bc::revert_block(&dbs.bc_db, &block_arc_clone) + ) }) - .expect("dbs pool disconnected")?; + .expect("dbs pool disconnected"); + self.current = duniter_dbs_write_ops::bc::revert_block(&self.bc_db, &block)?; + txs_mp_job_handle.join().expect("dbs pool disconnected")?; revert_block_modules(block, &self.conf, &self.dbs_pool, None) } pub fn apply_block(&mut self, block: DubpBlockV10Stringified) -> KvResult<()> { @@ -280,6 +284,7 @@ impl DuniterServer { .map_err(|e| KvError::DeserError(format!("{}", e)))?, ); self.current = Some(duniter_dbs_write_ops::apply_block::apply_block( + &self.bc_db, block.clone(), self.current, &self.dbs_pool, @@ -297,6 +302,7 @@ impl DuniterServer { .map_err(|e| KvError::DeserError(format!("{}", e)))?, ); self.current = Some(duniter_dbs_write_ops::apply_block::apply_chunk( + &self.bc_db, self.current, &self.dbs_pool, blocks.clone(), diff --git a/rust-libs/modules/gva/dbs-reader/src/lib.rs b/rust-libs/modules/gva/dbs-reader/src/lib.rs index 5b8667c44ed5171980c5e1c7c7688a2071075f77..b7c7c59d730bdf095df507f165c89b02fdcaeb47 100644 --- a/rust-libs/modules/gva/dbs-reader/src/lib.rs +++ b/rust-libs/modules/gva/dbs-reader/src/lib.rs @@ -35,7 +35,7 @@ use dubp::common::crypto::hashs::Hash; use dubp::common::crypto::keys::ed25519::PublicKey; use dubp::documents::transaction::TransactionDocumentV10; use dubp::{common::prelude::BlockNumber, wallet::prelude::*}; -use duniter_dbs::bc_v2::BcV2DbReadable; +use duniter_dbs::bc_v2::{BcV2DbReadable, BcV2DbRo}; use duniter_dbs::{ kv_typed::prelude::*, GvaV1DbReadable, HashKeyV2, PubKeyKeyV2, SourceAmountValV2, TxDbV2, TxsMpV2DbReadable, UtxoIdDbV2, diff --git a/rust-libs/modules/gva/dbs-reader/src/uds_of_pubkey.rs b/rust-libs/modules/gva/dbs-reader/src/uds_of_pubkey.rs index adb197a413de0f67ee6779e5c88f3e37d21bf345..454d6be377088e1ed243b0fc559660e2900bd758 100644 --- a/rust-libs/modules/gva/dbs-reader/src/uds_of_pubkey.rs +++ b/rust-libs/modules/gva/dbs-reader/src/uds_of_pubkey.rs @@ -16,7 +16,7 @@ use crate::*; use duniter_dbs::smallvec::SmallVec; use duniter_dbs::{ - bc_v2::{BcV2Db, UdsEvent, UdsRevalEvent}, + bc_v2::{UdsEvent, UdsRevalEvent}, GvaIdtyDbV1, GvaV1Db, UdIdV2, }; @@ -27,7 +27,7 @@ pub struct UdsWithSum { } pub fn all_uds_of_pubkey<B: Backend>( - bc_db: &BcV2Db<B>, + bc_db: &BcV2DbRo<B>, gva_db: &GvaV1Db<B>, pubkey: PublicKey, page_info: PageInfo<BlockNumber>, @@ -531,6 +531,7 @@ mod tests { }; let bc_db = duniter_dbs::bc_v2::BcV2Db::<Mem>::open(MemConf::default())?; + let bc_db_ro = bc_db.get_ro_handler(); let gva_db = duniter_dbs::gva_v1::GvaV1Db::<Mem>::open(MemConf::default())?; bc_db @@ -555,7 +556,7 @@ mod tests { data: UdsWithSum { uds, sum }, has_previous_page, has_next_page, - } = all_uds_of_pubkey(&bc_db, &gva_db, pk, PageInfo::default())?; + } = all_uds_of_pubkey(&bc_db_ro, &gva_db, pk, PageInfo::default())?; assert_eq!( uds, vec![ @@ -574,7 +575,7 @@ mod tests { has_previous_page, has_next_page, } = all_uds_of_pubkey( - &bc_db, + &bc_db_ro, &gva_db, pk, PageInfo { @@ -599,7 +600,7 @@ mod tests { has_previous_page, has_next_page, } = all_uds_of_pubkey( - &bc_db, + &bc_db_ro, &gva_db, pk, PageInfo { @@ -624,7 +625,7 @@ mod tests { has_previous_page, has_next_page, } = all_uds_of_pubkey( - &bc_db, + &bc_db_ro, &gva_db, pk, PageInfo { @@ -650,7 +651,7 @@ mod tests { has_previous_page, has_next_page, } = all_uds_of_pubkey( - &bc_db, + &bc_db_ro, &gva_db, pk, PageInfo { @@ -676,7 +677,7 @@ mod tests { has_previous_page, has_next_page, } = all_uds_of_pubkey( - &bc_db, + &bc_db_ro, &gva_db, pk, PageInfo { diff --git a/rust-libs/modules/gva/src/mutations.rs b/rust-libs/modules/gva/src/mutations.rs index 7ee8dff61ea9c2bdcc4bdab52ffb1830972fea8a..04fb31309111fd85c0cf08b24ce7f1108d2b9e42 100644 --- a/rust-libs/modules/gva/src/mutations.rs +++ b/rust-libs/modules/gva/src/mutations.rs @@ -40,7 +40,7 @@ impl MutationRoot { .dbs_pool .execute(move |dbs| { txs_mempool - .add_pending_tx(&dbs.bc_db, server_pubkey, &dbs.txs_mp_db, &tx) + .add_pending_tx(&dbs.bc_db_ro, server_pubkey, &dbs.txs_mp_db, &tx) .map(|()| tx) }) .await??; @@ -72,7 +72,7 @@ impl MutationRoot { .dbs_pool .execute(move |dbs| { txs_mempool - .add_pending_tx(&dbs.bc_db, server_pubkey, &dbs.txs_mp_db, &tx) + .add_pending_tx(&dbs.bc_db_ro, server_pubkey, &dbs.txs_mp_db, &tx) .map(|()| tx) }) .await??; diff --git a/rust-libs/modules/gva/src/queries/gen_tx.rs b/rust-libs/modules/gva/src/queries/gen_tx.rs index 61ce75360762682141481f3741ce251d28b8fe41..82de55336e75efca7be741b9e16877610ff9991f 100644 --- a/rust-libs/modules/gva/src/queries/gen_tx.rs +++ b/rust-libs/modules/gva/src/queries/gen_tx.rs @@ -119,12 +119,12 @@ impl GenTxsQuery { .dbs_pool .execute(move |dbs| { if let Some(current_block) = - duniter_dbs_read_ops::get_current_block_meta(&dbs.bc_db)? + duniter_dbs_read_ops::get_current_block_meta(&dbs.bc_db_ro)? { Ok(( current_block, duniter_gva_dbs_reader::find_inputs::find_inputs( - &dbs.bc_db, + &dbs.bc_db_ro, &dbs.gva_db, &dbs.txs_mp_db, SourceAmount::new(amount as i64, current_block.unit_base as i64), @@ -195,13 +195,13 @@ impl GenTxsQuery { .dbs_pool .execute(move |dbs| { if let Some(current_block) = - duniter_dbs_read_ops::get_current_block_meta(&dbs.bc_db)? + duniter_dbs_read_ops::get_current_block_meta(&dbs.bc_db_ro)? { let mut issuers_inputs_with_sum = Vec::new(); for issuer in issuers { issuers_inputs_with_sum.push(( duniter_gva_dbs_reader::find_inputs::find_inputs( - &dbs.bc_db, + &dbs.bc_db_ro, &dbs.gva_db, &dbs.txs_mp_db, SourceAmount::new( diff --git a/rust-libs/modules/gva/src/queries/uds.rs b/rust-libs/modules/gva/src/queries/uds.rs index e8252485e42780d5457d7886cd8747891f3831a8..5473f059d13eeb323dce7c3b379c40c9b3c8f5bc 100644 --- a/rust-libs/modules/gva/src/queries/uds.rs +++ b/rust-libs/modules/gva/src/queries/uds.rs @@ -32,7 +32,7 @@ impl UdsQuery { Ok(data .dbs_pool - .execute(move |dbs| dbs_reader.get_current_ud(&dbs.bc_db)) + .execute(move |dbs| dbs_reader.get_current_ud(&dbs.bc_db_ro)) .await?? .map(|sa| CurrentUdGva { amount: sa.amount(), @@ -67,18 +67,18 @@ impl UdsQuery { .dbs_pool .execute(move |dbs| { if let Some(current_block) = - duniter_dbs_read_ops::get_current_block_meta(&dbs.bc_db)? + duniter_dbs_read_ops::get_current_block_meta(&dbs.bc_db_ro)? { let paged_data = match filter { UdsFilter::All => duniter_gva_dbs_reader::uds_of_pubkey::all_uds_of_pubkey( - &dbs.bc_db, + &dbs.bc_db_ro, &dbs.gva_db, pubkey, pagination, ), UdsFilter::Unspent => { duniter_gva_dbs_reader::uds_of_pubkey::unspent_uds_of_pubkey( - &dbs.bc_db, + &dbs.bc_db_ro, pubkey, pagination, None, @@ -144,7 +144,7 @@ impl UdsQuery { Ok(data .dbs_pool .execute(move |dbs| { - dbs.bc_db.uds_reval().iter(.., |it| { + dbs.bc_db_ro.uds_reval().iter(.., |it| { it.map_ok(|(block_number, sa)| RevalUdGva { amount: sa.0.amount(), base: sa.0.base(), @@ -165,9 +165,9 @@ mod tests { #[tokio::test] async fn query_current_ud() -> anyhow::Result<()> { let mut dbs_reader = MockDbsReader::new(); - use duniter_dbs::bc_v2::BcV2Db; + use duniter_dbs::bc_v2::BcV2DbRo; dbs_reader - .expect_get_current_ud::<BcV2Db<FileBackend>>() + .expect_get_current_ud::<BcV2DbRo<FileBackend>>() .times(1) .returning(|_| Ok(Some(SourceAmount::with_base0(100)))); let schema = create_schema(dbs_reader)?; diff --git a/rust-libs/modules/gva/src/queries/utxos_of_script.rs b/rust-libs/modules/gva/src/queries/utxos_of_script.rs index 8892ac8ee7380439bc905eb99f40b0cb243af3e4..e9837962b3ee00fe5a37530e40e9dc0f2e390a61 100644 --- a/rust-libs/modules/gva/src/queries/utxos_of_script.rs +++ b/rust-libs/modules/gva/src/queries/utxos_of_script.rs @@ -51,7 +51,7 @@ impl UtxosQuery { .dbs_pool .execute(move |dbs| { if let Some(current_block) = - duniter_dbs_read_ops::get_current_block_meta(&dbs.bc_db)? + duniter_dbs_read_ops::get_current_block_meta(&dbs.bc_db_ro)? { let paged_data = duniter_gva_dbs_reader::utxos::find_script_utxos( &dbs.gva_db,