Skip to content

Commit 8a52f69

Browse files
committed
improve combined database construction readability
1 parent 609d0fd commit 8a52f69

File tree

1 file changed

+23
-16
lines changed
  • forc-plugins/forc-node/src/local

1 file changed

+23
-16
lines changed

forc-plugins/forc-node/src/local/mod.rs

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use fuel_core::{
1111
combined_database::CombinedDatabase,
1212
database::{database_description::on_chain::OnChain, Database, RegularStage},
1313
service::FuelService,
14-
state::data_source::{DataSource, DataSourceType},
14+
state::data_source::DataSource,
1515
};
1616
use fuel_core_types::fuel_types::BlockHeight;
1717
use std::sync::Arc;
@@ -22,7 +22,7 @@ use std::sync::Arc;
2222
pub async fn run(cmd: cmd::LocalCmd, dry_run: bool) -> anyhow::Result<Option<FuelService>> {
2323
check_and_update_chain_config(ChainConfig::Local).await?;
2424

25-
let fork_url = cmd.fork_url.clone();
25+
let fork_url = cmd.fork_url.to_owned();
2626
let fork_block_number = cmd.fork_block_number;
2727
let config = fuel_core::service::Config::from(cmd);
2828

@@ -54,21 +54,28 @@ pub async fn run(cmd: cmd::LocalCmd, dry_run: bool) -> anyhow::Result<Option<Fue
5454
fork_settings.fork_block_height,
5555
)?);
5656

57-
let off_chain = combined_database.off_chain().clone();
58-
let relayer = combined_database.relayer().clone();
59-
let gas_price = combined_database.gas_price().clone();
60-
let compression = combined_database.compression().clone();
61-
let on_chain = {
62-
let on_chain = combined_database.on_chain().clone();
63-
let (_, metadata) = on_chain.clone().into_inner();
64-
let stage: RegularStage<OnChain> = Default::default();
65-
let forking_storage: DataSourceType<OnChain> =
66-
Arc::new(ForkingOnChainStorage::new(on_chain, fork_client));
67-
let data_source = DataSource::new(forking_storage, stage);
68-
Database::from_storage_and_metadata(data_source, metadata)
57+
// extract all attributes from combined database (as they are all private); reconstruct them in a new combined database with forked storage
58+
let combined_database = {
59+
let off_chain = combined_database.off_chain().to_owned();
60+
let relayer = combined_database.relayer().to_owned();
61+
let gas_price = combined_database.gas_price().to_owned();
62+
let compression = combined_database.compression().to_owned();
63+
64+
// reconstruct on-chain database with forked storage
65+
let on_chain = {
66+
let on_chain = combined_database.on_chain().to_owned();
67+
let (_, metadata) = on_chain.clone().into_inner();
68+
let data_source = DataSource::new(
69+
Arc::new(ForkingOnChainStorage::new(on_chain, fork_client)),
70+
RegularStage::<OnChain>::default(),
71+
);
72+
Database::from_storage_and_metadata(data_source, metadata)
73+
};
74+
75+
// reconstruct combined database with forked on-chain storage
76+
CombinedDatabase::new(on_chain, off_chain, relayer, gas_price, compression)
6977
};
70-
let combined_database =
71-
CombinedDatabase::new(on_chain, off_chain, relayer, gas_price, compression);
78+
7279
FuelService::from_combined_database(combined_database, config)
7380
.await
7481
.map_err(|e| anyhow::anyhow!("Failed to start fuel-core service: {}", e))?

0 commit comments

Comments
 (0)