diff --git a/stackslib/src/clarity_vm/clarity.rs b/stackslib/src/clarity_vm/clarity.rs index 4d413200cc..634ff07252 100644 --- a/stackslib/src/clarity_vm/clarity.rs +++ b/stackslib/src/clarity_vm/clarity.rs @@ -25,8 +25,8 @@ pub use clarity::vm::clarity::{ClarityConnection, Error}; use clarity::vm::contexts::{AssetMap, Environment, OwnedEnvironment}; use clarity::vm::costs::{CostTracker, ExecutionCost, LimitedCostTracker}; use clarity::vm::database::{ - BurnStateDB, ClarityDatabase, HeadersDB, RollbackWrapper, RollbackWrapperPersistedLog, - STXBalance, SqliteConnection, NULL_BURN_STATE_DB, NULL_HEADER_DB, + BurnStateDB, ClarityBackingStore, ClarityDatabase, HeadersDB, RollbackWrapper, + RollbackWrapperPersistedLog, STXBalance, SqliteConnection, NULL_BURN_STATE_DB, NULL_HEADER_DB, }; use clarity::vm::errors::Error as InterpreterError; use clarity::vm::representations::SymbolicExpression; @@ -132,7 +132,7 @@ pub struct ClarityBlockConnection<'a, 'b> { /// rollback the transaction by dropping this struct. pub struct ClarityTransactionConnection<'a, 'b> { log: Option, - store: &'a mut WritableMarfStore<'b>, + store: &'b mut dyn ClarityBackingStore, header_db: &'a dyn HeadersDB, burn_state_db: &'a dyn BurnStateDB, cost_track: &'a mut Option, @@ -141,6 +141,31 @@ pub struct ClarityTransactionConnection<'a, 'b> { epoch: StacksEpochId, } +impl<'a, 'b> ClarityTransactionConnection<'a, 'b> { + pub fn new( + store: &'b mut dyn ClarityBackingStore, + header_db: &'a dyn HeadersDB, + burn_state_db: &'a dyn BurnStateDB, + cost_track: &'a mut Option, + mainnet: bool, + chain_id: u32, + epoch: StacksEpochId, + ) -> ClarityTransactionConnection<'a, 'b> { + let mut log = RollbackWrapperPersistedLog::new(); + log.nest(); + ClarityTransactionConnection { + log: Some(log), + store, + header_db, + burn_state_db, + cost_track, + mainnet, + chain_id, + epoch, + } + } +} + pub struct ClarityReadOnlyConnection<'a> { datastore: ReadOnlyMarfStore<'a>, header_db: &'a dyn HeadersDB, @@ -1565,25 +1590,16 @@ impl<'a> ClarityBlockConnection<'a, '_> { }) } - pub fn start_transaction_processing<'c>(&'c mut self) -> ClarityTransactionConnection<'c, 'a> { - let store = &mut self.datastore; - let cost_track = &mut self.cost_track; - let header_db = self.header_db; - let burn_state_db = self.burn_state_db; - let mainnet = self.mainnet; - let chain_id = self.chain_id; - let mut log = RollbackWrapperPersistedLog::new(); - log.nest(); - ClarityTransactionConnection { - store, - cost_track, - header_db, - burn_state_db, - log: Some(log), - mainnet, - chain_id, - epoch: self.epoch, - } + pub fn start_transaction_processing(&mut self) -> ClarityTransactionConnection { + ClarityTransactionConnection::new( + &mut self.datastore, + self.header_db, + self.burn_state_db, + &mut self.cost_track, + self.mainnet, + self.chain_id, + self.epoch, + ) } /// Execute `todo` as a transaction in this block. The execution