@@ -86,7 +86,7 @@ type Blockchain struct {
8686 cachedFilters * AggregatedBloomFilterCache
8787 runningFilter * core.RunningEventFilter
8888 transactionLayout core.TransactionLayout
89- StateFactory * statefactory.StateFactory
89+ stateFactory * statefactory.StateFactory
9090}
9191
9292func New (database db.KeyValueStore , network * utils.Network , stateVersion bool ) * Blockchain {
@@ -115,7 +115,7 @@ func New(database db.KeyValueStore, network *utils.Network, stateVersion bool) *
115115 cachedFilters : & cachedFilters ,
116116 runningFilter : runningFilter ,
117117 transactionLayout : core .TransactionLayoutPerTx , // default to per-tx for backward compatibility
118- StateFactory : stateFactory ,
118+ stateFactory : stateFactory ,
119119 }
120120}
121121
@@ -322,7 +322,7 @@ func (b *Blockchain) Store(
322322) error {
323323 // old state
324324 // TODO(maksymmalick): remove this once we have a new state implementation
325- if ! b .StateFactory .UseNewState () {
325+ if ! b .stateFactory .UseNewState () {
326326 return b .deprecatedStore (block , blockCommitments , stateUpdate , newClasses )
327327 }
328328
@@ -406,7 +406,7 @@ func (b *Blockchain) store(
406406 return err
407407 }
408408
409- st , err := b .StateFactory .NewState (stateUpdate .OldRoot , nil , batch )
409+ st , err := b .stateFactory .NewState (stateUpdate .OldRoot , nil , batch )
410410 if err != nil {
411411 return err
412412 }
@@ -667,9 +667,9 @@ func (b *Blockchain) HeadState() (core.StateReader, StateCloser, error) {
667667 return nil , nil , err
668668 }
669669
670- state , err := b .StateFactory . NewState (header .GlobalStateRoot , txn , nil )
670+ st , err := b .stateFactory . NewStateReader (header .GlobalStateRoot , txn )
671671
672- return state , noopStateCloser , err
672+ return st , noopStateCloser , err
673673}
674674
675675// StateAtBlockNumber returns a StateReader that provides
@@ -685,12 +685,6 @@ func (b *Blockchain) StateAtBlockNumber(
685685 return nil , nil , err
686686 }
687687
688- if ! b .StateFactory .UseNewState () {
689- return core .NewDeprecatedStateHistory (
690- core .NewDeprecatedState (txn ), blockNumber ,
691- ), noopStateCloser , nil
692- }
693-
694688 height , err := core .GetChainHeight (txn )
695689 if err != nil {
696690 return nil , nil , err
@@ -701,11 +695,11 @@ func (b *Blockchain) StateAtBlockNumber(
701695 return nil , nil , err
702696 }
703697
704- history , err := state . NewStateHistory (blockNumber , header .GlobalStateRoot , b . stateDB )
698+ st , err := b . stateFactory . NewStateHistory (header .GlobalStateRoot , txn , blockNumber )
705699 if err != nil {
706700 return nil , nil , err
707701 }
708- return & history , noopStateCloser , nil
702+ return st , noopStateCloser , nil
709703}
710704
711705// StateAtBlockHash returns a StateReader that provides
@@ -715,7 +709,7 @@ func (b *Blockchain) StateAtBlockHash(
715709) (core.StateReader , StateCloser , error ) {
716710 b .listener .OnRead ("StateAtBlockHash" )
717711 if blockHash .IsZero () {
718- emptyState , err := b .StateFactory .EmptyState ()
712+ emptyState , err := b .stateFactory .EmptyState ()
719713 return emptyState , noopStateCloser , err
720714 }
721715
@@ -724,13 +718,6 @@ func (b *Blockchain) StateAtBlockHash(
724718 if err != nil {
725719 return nil , nil , err
726720 }
727- if ! b .StateFactory .UseNewState () {
728- return core .NewDeprecatedStateHistory (
729- core .NewDeprecatedState (txn ),
730- header .Number ,
731- ), noopStateCloser , nil
732- }
733-
734721 height , err := core .GetChainHeight (txn )
735722 if err != nil {
736723 return nil , nil , err
@@ -741,11 +728,11 @@ func (b *Blockchain) StateAtBlockHash(
741728 return nil , nil , err
742729 }
743730
744- history , err := state . NewStateHistory (header . Number , headHeader .GlobalStateRoot , b . stateDB )
731+ st , err := b . stateFactory . NewStateHistory (headHeader .GlobalStateRoot , txn , header . Number )
745732 if err != nil {
746733 return nil , nil , err
747734 }
748- return & history , noopStateCloser , nil
735+ return st , noopStateCloser , nil
749736}
750737
751738// EventFilter returns an EventFilter object that is tied to a snapshot of the blockchain
@@ -775,14 +762,14 @@ func (b *Blockchain) EventFilter(
775762
776763// RevertHead reverts the head block
777764func (b * Blockchain ) RevertHead () error {
778- if ! b .StateFactory .UseNewState () {
765+ if ! b .stateFactory .UseNewState () {
779766 return b .database .Update (b .deprecatedRevertHead )
780767 }
781768 return b .database .Write (b .revertHead )
782769}
783770
784771func (b * Blockchain ) GetReverseStateDiff () (core.StateDiff , error ) {
785- if ! b .StateFactory .UseNewState () {
772+ if ! b .stateFactory .UseNewState () {
786773 return b .deprecatedGetReverseStateDiff ()
787774 }
788775
@@ -822,12 +809,12 @@ func (b *Blockchain) getReverseStateDiff() (core.StateDiff, error) {
822809 if err != nil {
823810 return ret , err
824811 }
825- state , err := state .New (stateUpdate .NewRoot , b .stateDB , nil )
812+ st , err := state .NewStateReader (stateUpdate .NewRoot , b .stateDB )
826813 if err != nil {
827814 return ret , err
828815 }
829816
830- return state .GetReverseStateDiff (blockNum , stateUpdate .StateDiff )
817+ return st .GetReverseStateDiff (blockNum , stateUpdate .StateDiff )
831818}
832819
833820func (b * Blockchain ) deprecatedRevertHead (txn db.IndexedBatch ) error {
@@ -972,7 +959,14 @@ func (b *Blockchain) Simulate(
972959 txn := b .database .NewIndexedBatch ()
973960 defer txn .Close ()
974961
975- if err := b .updateStateRoots (txn , nil , block , stateUpdate , newClasses ); err != nil {
962+ // For the new state path, create a temporary batch that is intentionally never
963+ // committed — writes accumulate in memory and are discarded after simulation.
964+ var batch db.Batch
965+ if b .stateFactory .UseNewState () {
966+ batch = b .database .NewBatch ()
967+ }
968+
969+ if err := b .updateStateRoots (txn , batch , block , stateUpdate , newClasses ); err != nil {
976970 return SimulateResult {}, err
977971 }
978972
@@ -1005,7 +999,7 @@ func (b *Blockchain) Finalise(
1005999 newClasses map [felt.Felt ]core.ClassDefinition ,
10061000 sign utils.BlockSignFunc ,
10071001) error {
1008- if ! b .StateFactory .UseNewState () {
1002+ if ! b .stateFactory .UseNewState () {
10091003 err := b .database .Update (func (txn db.IndexedBatch ) error {
10101004 if err := b .updateStateRoots (txn , nil , block , stateUpdate , newClasses ); err != nil {
10111005 return err
@@ -1101,7 +1095,7 @@ func (b *Blockchain) updateStateRoots(
11011095 stateRoot = & felt .Zero
11021096 }
11031097
1104- state , err := b .StateFactory .NewState (stateRoot , txn , batch )
1098+ state , err := b .stateFactory .NewState (stateRoot , txn , batch )
11051099 if err != nil {
11061100 return err
11071101 }
0 commit comments