@@ -25,8 +25,8 @@ pub use clarity::vm::clarity::{ClarityConnection, Error};
2525use clarity:: vm:: contexts:: { AssetMap , OwnedEnvironment } ;
2626use clarity:: vm:: costs:: { CostTracker , ExecutionCost , LimitedCostTracker } ;
2727use clarity:: vm:: database:: {
28- BurnStateDB , ClarityBackingStore , ClarityDatabase , HeadersDB , RollbackWrapper ,
29- RollbackWrapperPersistedLog , STXBalance , NULL_BURN_STATE_DB , NULL_HEADER_DB ,
28+ BurnStateDB , ClarityBackingStore , ClarityBackingStoreTransaction , ClarityDatabase , HeadersDB ,
29+ RollbackWrapper , RollbackWrapperPersistedLog , STXBalance , NULL_BURN_STATE_DB , NULL_HEADER_DB ,
3030} ;
3131use clarity:: vm:: errors:: Error as InterpreterError ;
3232use clarity:: vm:: events:: { STXEventType , STXMintEventData } ;
@@ -53,7 +53,7 @@ use crate::chainstate::stacks::{
5353 Error as ChainstateError , StacksMicroblockHeader , StacksTransaction , TransactionPayload ,
5454 TransactionSmartContract , TransactionVersion ,
5555} ;
56- use crate :: clarity_vm:: database:: marf:: { MarfedKV , ReadOnlyMarfStore , WritableMarfStore } ;
56+ use crate :: clarity_vm:: database:: marf:: MarfedKV ;
5757use crate :: core:: { StacksEpoch , StacksEpochId , FIRST_STACKS_BLOCK_ID , GENESIS_EPOCH } ;
5858use crate :: util_lib:: boot:: { boot_code_acc, boot_code_addr, boot_code_id, boot_code_tx_auth} ;
5959use crate :: util_lib:: db:: Error as DatabaseError ;
@@ -101,15 +101,15 @@ pub struct ClarityInstance {
101101/// issuring event dispatches, before the Clarity database commits.
102102///
103103pub struct PreCommitClarityBlock < ' a > {
104- datastore : WritableMarfStore < ' a > ,
104+ datastore : Box < dyn ClarityBackingStoreTransaction + ' a > ,
105105 commit_to : StacksBlockId ,
106106}
107107
108108///
109109/// A high-level interface for Clarity VM interactions within a single block.
110110///
111111pub struct ClarityBlockConnection < ' a , ' b > {
112- datastore : WritableMarfStore < ' a > ,
112+ datastore : Box < dyn ClarityBackingStoreTransaction + ' a > ,
113113 header_db : & ' b dyn HeadersDB ,
114114 burn_state_db : & ' b dyn BurnStateDB ,
115115 cost_track : Option < LimitedCostTracker > ,
@@ -160,7 +160,7 @@ impl<'a, 'b> ClarityTransactionConnection<'a, 'b> {
160160}
161161
162162pub struct ClarityReadOnlyConnection < ' a > {
163- datastore : ReadOnlyMarfStore < ' a > ,
163+ datastore : Box < dyn ClarityBackingStore + ' a > ,
164164 header_db : & ' a dyn HeadersDB ,
165165 burn_state_db : & ' a dyn BurnStateDB ,
166166 epoch : StacksEpochId ,
@@ -196,13 +196,13 @@ macro_rules! using {
196196impl ClarityBlockConnection < ' _ , ' _ > {
197197 #[ cfg( test) ]
198198 pub fn new_test_conn < ' a , ' b > (
199- datastore : WritableMarfStore < ' a > ,
199+ datastore : super :: database :: marf :: WritableMarfStore < ' a > ,
200200 header_db : & ' b dyn HeadersDB ,
201201 burn_state_db : & ' b dyn BurnStateDB ,
202202 epoch : StacksEpochId ,
203203 ) -> ClarityBlockConnection < ' a , ' b > {
204204 ClarityBlockConnection {
205- datastore,
205+ datastore : Box :: new ( datastore ) ,
206206 header_db,
207207 burn_state_db,
208208 cost_track : Some ( LimitedCostTracker :: new_free ( ) ) ,
@@ -251,7 +251,7 @@ impl ClarityBlockConnection<'_, '_> {
251251 & mut self ,
252252 burn_state_db : & dyn BurnStateDB ,
253253 ) -> Result < StacksEpochId , Error > {
254- let mut db = self . datastore . as_clarity_db ( self . header_db , burn_state_db) ;
254+ let mut db = ClarityDatabase :: new ( self . datastore . as_mut ( ) , self . header_db , burn_state_db) ;
255255 // NOTE: the begin/roll_back shouldn't be necessary with how this gets used in practice,
256256 // but is put here defensively.
257257 db. begin ( ) ;
@@ -328,7 +328,7 @@ impl ClarityInstance {
328328 } ;
329329
330330 ClarityBlockConnection {
331- datastore,
331+ datastore : Box :: new ( datastore ) ,
332332 header_db,
333333 burn_state_db,
334334 cost_track,
@@ -352,7 +352,7 @@ impl ClarityInstance {
352352 let cost_track = Some ( LimitedCostTracker :: new_free ( ) ) ;
353353
354354 ClarityBlockConnection {
355- datastore,
355+ datastore : Box :: new ( datastore ) ,
356356 header_db,
357357 burn_state_db,
358358 cost_track,
@@ -378,7 +378,7 @@ impl ClarityInstance {
378378 let cost_track = Some ( LimitedCostTracker :: new_free ( ) ) ;
379379
380380 let mut conn = ClarityBlockConnection {
381- datastore : writable,
381+ datastore : Box :: new ( writable) ,
382382 header_db,
383383 burn_state_db,
384384 cost_track,
@@ -477,7 +477,7 @@ impl ClarityInstance {
477477 let cost_track = Some ( LimitedCostTracker :: new_free ( ) ) ;
478478
479479 let mut conn = ClarityBlockConnection {
480- datastore : writable,
480+ datastore : Box :: new ( writable) ,
481481 header_db,
482482 burn_state_db,
483483 cost_track,
@@ -559,6 +559,7 @@ impl ClarityInstance {
559559
560560 pub fn drop_unconfirmed_state ( & mut self , block : & StacksBlockId ) -> Result < ( ) , Error > {
561561 let datastore = self . datastore . begin_unconfirmed ( block) ;
562+ let datastore: Box < dyn ClarityBackingStoreTransaction > = Box :: new ( datastore) ;
562563 datastore. rollback_unconfirmed ( ) ?;
563564 Ok ( ( ) )
564565 }
@@ -588,7 +589,7 @@ impl ClarityInstance {
588589 } ;
589590
590591 ClarityBlockConnection {
591- datastore,
592+ datastore : Box :: new ( datastore ) ,
592593 header_db,
593594 burn_state_db,
594595 cost_track,
@@ -628,7 +629,7 @@ impl ClarityInstance {
628629 } ?;
629630
630631 Ok ( ClarityReadOnlyConnection {
631- datastore,
632+ datastore : Box :: new ( datastore ) ,
632633 header_db,
633634 burn_state_db,
634635 epoch,
@@ -677,7 +678,8 @@ impl ClarityConnection for ClarityBlockConnection<'_, '_> {
677678 where
678679 F : FnOnce ( ClarityDatabase ) -> ( R , ClarityDatabase ) ,
679680 {
680- let mut db = ClarityDatabase :: new ( & mut self . datastore , self . header_db , self . burn_state_db ) ;
681+ let mut db =
682+ ClarityDatabase :: new ( self . datastore . as_mut ( ) , self . header_db , self . burn_state_db ) ;
681683 db. begin ( ) ;
682684 let ( result, mut db) = to_do ( db) ;
683685 db. roll_back ( )
@@ -689,7 +691,7 @@ impl ClarityConnection for ClarityBlockConnection<'_, '_> {
689691 where
690692 F : FnOnce ( & mut AnalysisDatabase ) -> R ,
691693 {
692- let mut db = AnalysisDatabase :: new ( & mut self . datastore ) ;
694+ let mut db = AnalysisDatabase :: new ( self . datastore . as_mut ( ) ) ;
693695 db. begin ( ) ;
694696 let result = to_do ( & mut db) ;
695697 db. roll_back ( )
@@ -708,9 +710,8 @@ impl ClarityConnection for ClarityReadOnlyConnection<'_> {
708710 where
709711 F : FnOnce ( ClarityDatabase ) -> ( R , ClarityDatabase ) ,
710712 {
711- let mut db = self
712- . datastore
713- . as_clarity_db ( self . header_db , self . burn_state_db ) ;
713+ let mut db =
714+ ClarityDatabase :: new ( self . datastore . as_mut ( ) , self . header_db , self . burn_state_db ) ;
714715 db. begin ( ) ;
715716 let ( result, mut db) = to_do ( db) ;
716717 db. roll_back ( )
@@ -722,7 +723,7 @@ impl ClarityConnection for ClarityReadOnlyConnection<'_> {
722723 where
723724 F : FnOnce ( & mut AnalysisDatabase ) -> R ,
724725 {
725- let mut db = self . datastore . as_analysis_db ( ) ;
726+ let mut db = AnalysisDatabase :: new ( self . datastore . as_mut ( ) ) ;
726727 db. begin ( ) ;
727728 let result = to_do ( & mut db) ;
728729 db. roll_back ( )
@@ -773,7 +774,8 @@ impl<'a> ClarityBlockConnection<'a, '_> {
773774 #[ cfg( test) ]
774775 pub fn commit_block ( self ) -> LimitedCostTracker {
775776 debug ! ( "Commit Clarity datastore" ) ;
776- self . datastore . test_commit ( ) ;
777+ let bhh = self . datastore . get_block_hash ( ) ;
778+ self . datastore . commit_to ( & bhh) . unwrap ( ) ;
777779
778780 self . cost_track . unwrap ( )
779781 }
@@ -1709,7 +1711,7 @@ impl<'a> ClarityBlockConnection<'a, '_> {
17091711
17101712 pub fn start_transaction_processing ( & mut self ) -> ClarityTransactionConnection < ' _ , ' _ > {
17111713 ClarityTransactionConnection :: new (
1712- & mut self . datastore ,
1714+ self . datastore . as_mut ( ) ,
17131715 self . header_db ,
17141716 self . burn_state_db ,
17151717 & mut self . cost_track ,
@@ -1761,7 +1763,7 @@ impl<'a> ClarityBlockConnection<'a, '_> {
17611763 self . datastore . seal ( )
17621764 }
17631765
1764- pub fn destruct ( self ) -> WritableMarfStore < ' a > {
1766+ pub fn destruct ( self ) -> Box < dyn ClarityBackingStoreTransaction + ' a > {
17651767 self . datastore
17661768 }
17671769
0 commit comments