From f7276a773bb6a6fe6d13ec3447b985961ca3e673 Mon Sep 17 00:00:00 2001 From: jjy Date: Mon, 31 Oct 2022 17:00:51 +0800 Subject: [PATCH 01/10] refactor: use layered StateDB to operate the state --- .../benches/benches/benchmarks/dummy_state.rs | 53 ++ .../benches/benches/benchmarks/fee_queue.rs | 15 +- crates/benches/benches/benchmarks/mod.rs | 1 + crates/benches/benches/benchmarks/smt.rs | 30 +- crates/benches/benches/benchmarks/sudt.rs | 4 +- .../block-producer/src/block_sync_client.rs | 4 +- crates/block-producer/src/produce_block.rs | 14 +- crates/block-producer/src/replay_block.rs | 9 +- crates/block-producer/src/sync_l1.rs | 6 +- .../block-producer/src/test_mode_control.rs | 2 +- crates/chain/src/chain.rs | 39 +- crates/challenge/src/context.rs | 11 +- crates/challenge/src/offchain.rs | 14 +- crates/challenge/src/offchain/mock_block.rs | 30 +- crates/common/src/state.rs | 7 +- crates/generator/src/generator.rs | 18 +- crates/generator/src/genesis.rs | 16 +- crates/generator/src/lib.rs | 1 - .../generator/src/{ => tests}/dummy_state.rs | 2 +- crates/generator/src/tests/genesis.rs | 10 +- crates/generator/src/tests/mod.rs | 1 + crates/generator/src/traits.rs | 10 +- .../generator/src/types/run_result_state.rs | 2 +- .../src/subcommand/db_block_validator.rs | 4 +- .../src/subcommand/import_block.rs | 2 +- crates/mem-pool/src/deposit.rs | 6 +- crates/mem-pool/src/fee/queue.rs | 55 +- crates/mem-pool/src/pool.rs | 142 ++-- .../src/mem_execute_tx_state.rs | 2 +- crates/replay-chain/src/replay.rs | 11 +- crates/rpc-server/src/registry.rs | 129 ++-- crates/store/src/mem_pool_state.rs | 240 +------ crates/store/src/smt/smt_store/mod.rs | 7 + .../{smt_store.rs => smt_store/smt_block.rs} | 54 +- .../src/smt/smt_store/smt_reverted_block.rs | 105 +++ crates/store/src/smt/smt_store/smt_state.rs | 116 ++++ crates/store/src/snapshot.rs | 18 +- .../state/{ => history}/block_state_record.rs | 0 .../store/src/state/history/history_state.rs | 247 +++++++ crates/store/src/state/history/mod.rs | 2 + crates/store/src/state/mod.rs | 16 +- .../{mem_state_db.rs => overlay/mem_state.rs} | 80 ++- crates/store/src/state/overlay/mem_store.rs | 161 +++++ crates/store/src/state/overlay/mod.rs | 2 + crates/store/src/state/state_db.rs | 630 ++++++++++++++---- crates/store/src/state/state_tracker.rs | 39 -- crates/store/src/state/traits.rs | 5 + crates/store/src/store_impl.rs | 20 +- crates/store/src/tests/state_db.rs | 44 +- crates/store/src/tests/transaction.rs | 32 +- .../store/src/transaction/code_store_impl.rs | 30 + .../src/transaction/history_store_impl.rs | 98 +++ crates/store/src/transaction/mod.rs | 2 + .../src/transaction/store_transaction.rs | 169 +---- crates/tests/src/testing_tool/chain.rs | 2 +- crates/tests/src/tests/chain.rs | 27 +- crates/tests/src/tests/deposit_withdrawal.rs | 22 +- crates/tests/src/tests/export_import_block.rs | 2 +- crates/tests/src/tests/mem_block_repackage.rs | 7 +- crates/tests/src/tests/meta_contract_args.rs | 8 +- .../src/tests/polyjuice_sender_recover.rs | 9 +- crates/tests/src/tests/restore_mem_block.rs | 5 +- .../tests/rpc_server/execute_l2transaction.rs | 41 +- .../block_max_cycles_limit.rs | 13 +- .../rpc_server/execute_raw_l2transaction.rs | 56 +- .../block_max_cycles_limit.rs | 13 +- .../tests/rpc_server/submit_l2transaction.rs | 63 +- .../block_max_cycles_limit.rs | 18 +- .../rpc_server/submit_withdrawal_request.rs | 6 +- .../polyjuice_contract_creator_allowlist.rs | 2 +- crates/utils/src/export_block.rs | 5 +- 71 files changed, 1939 insertions(+), 1127 deletions(-) create mode 100644 crates/benches/benches/benchmarks/dummy_state.rs rename crates/generator/src/{ => tests}/dummy_state.rs (99%) create mode 100644 crates/store/src/smt/smt_store/mod.rs rename crates/store/src/smt/{smt_store.rs => smt_store/smt_block.rs} (60%) create mode 100644 crates/store/src/smt/smt_store/smt_reverted_block.rs create mode 100644 crates/store/src/smt/smt_store/smt_state.rs rename crates/store/src/state/{ => history}/block_state_record.rs (100%) create mode 100644 crates/store/src/state/history/history_state.rs create mode 100644 crates/store/src/state/history/mod.rs rename crates/store/src/state/{mem_state_db.rs => overlay/mem_state.rs} (56%) create mode 100644 crates/store/src/state/overlay/mem_store.rs create mode 100644 crates/store/src/state/overlay/mod.rs delete mode 100644 crates/store/src/state/state_tracker.rs create mode 100644 crates/store/src/state/traits.rs create mode 100644 crates/store/src/transaction/code_store_impl.rs create mode 100644 crates/store/src/transaction/history_store_impl.rs diff --git a/crates/benches/benches/benchmarks/dummy_state.rs b/crates/benches/benches/benchmarks/dummy_state.rs new file mode 100644 index 000000000..229621638 --- /dev/null +++ b/crates/benches/benches/benchmarks/dummy_state.rs @@ -0,0 +1,53 @@ +use gw_common::{ + error::Error, + smt::{default_store::DefaultStore, H256, SMT}, + state::State, +}; +use gw_traits::CodeStore; +use gw_types::{bytes::Bytes, packed::Script}; +use std::collections::HashMap; + +#[derive(Default)] +pub struct DummyState { + tree: SMT>, + account_count: u32, + scripts: HashMap, + codes: HashMap, +} + +impl State for DummyState { + fn get_raw(&self, key: &H256) -> Result { + let v = self.tree.get(key)?; + Ok(v) + } + fn update_raw(&mut self, key: H256, value: H256) -> Result<(), Error> { + self.tree.update(key, value)?; + Ok(()) + } + fn finalise_root(&mut self) -> Result { + let root = *self.tree.root(); + Ok(root) + } + fn get_account_count(&self) -> Result { + Ok(self.account_count) + } + fn set_account_count(&mut self, count: u32) -> Result<(), Error> { + self.account_count = count; + Ok(()) + } +} + +impl CodeStore for DummyState { + fn insert_script(&mut self, script_hash: H256, script: Script) { + self.scripts.insert(script_hash, script); + } + fn get_script(&self, script_hash: &H256) -> Option