Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package statefactory
package factory

import (
"github.com/NethermindEth/juno/core"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package statefactory
package factory

import (
"testing"
Expand Down
14 changes: 7 additions & 7 deletions core/state/history.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ var _ core.StateReader = (*stateHistory)(nil)
// StateHistory represents a snapshot of the blockchain state at a specific block number.
type stateHistory struct {
blockNum uint64
state *State
state *StateReader
}

func NewStateHistory(blockNum uint64, stateRoot *felt.Felt, db *StateDB) (stateHistory, error) {
Expand All @@ -28,33 +28,33 @@ func NewStateHistory(blockNum uint64, stateRoot *felt.Felt, db *StateDB) (stateH

func (s *stateHistory) ContractClassHash(addr *felt.Felt) (felt.Felt, error) {
if err := s.checkDeployed(addr); err != nil {
return felt.Felt{}, err
return felt.Zero, err
}
ret, err := s.state.ContractClassHashAt(addr, s.blockNum)
if err != nil {
return felt.Felt{}, err
return felt.Zero, err
}
return ret, nil
}

func (s *stateHistory) ContractNonce(addr *felt.Felt) (felt.Felt, error) {
if err := s.checkDeployed(addr); err != nil {
return felt.Felt{}, err
return felt.Zero, err
}
ret, err := s.state.ContractNonceAt(addr, s.blockNum)
if err != nil {
return felt.Felt{}, err
return felt.Zero, err
}
return ret, nil
}

func (s *stateHistory) ContractStorage(addr, key *felt.Felt) (felt.Felt, error) {
if err := s.checkDeployed(addr); err != nil {
return felt.Felt{}, err
return felt.Zero, err
}
ret, err := s.state.ContractStorageAt(addr, key, s.blockNum)
if err != nil {
return felt.Felt{}, err
return felt.Zero, err
}
return ret, nil
}
Expand Down
46 changes: 11 additions & 35 deletions core/state/object.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ import (
"github.com/NethermindEth/juno/core/felt"
"github.com/NethermindEth/juno/core/trie2"
"github.com/NethermindEth/juno/core/trie2/trienode"
"github.com/NethermindEth/juno/core/trie2/trieutils"
"github.com/NethermindEth/juno/db"
"golang.org/x/exp/maps"
)

Expand Down Expand Up @@ -40,40 +38,15 @@ func (s *stateObject) setNonce(nonce *felt.Felt) {
s.contract.Nonce = *nonce
}

func (s *stateObject) getStorage(key *felt.Felt) (felt.Felt, error) {
Copy link
Copy Markdown
Contributor Author

@MaksymMalicki MaksymMalicki Apr 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This method was only used in the (s *State) ContractStorage. Removal reason explained here

if value, ok := s.dirtyStorage[*key]; ok {
return *value, nil
}

tr, err := s.getStorageTrie()
if err != nil {
return felt.Zero, err
}

path := tr.FeltToPath(key)
v, err := trieutils.GetNodeByPath(
s.state.db.disk,
db.ContractTrieStorage,
(*felt.Address)(&s.addr),
&path,
true,
)
if err != nil {
return felt.Zero, err
}

var val felt.Felt
val.SetBytes(v)

return val, nil
}

func (s *stateObject) getStorageTrie() (*trie2.Trie, error) {
if s.storageTrie != nil {
return s.storageTrie, nil
}

storageTrie, err := s.state.db.ContractStorageTrie(&s.state.initRoot, &s.addr)
storageTrie, err := s.state.db.ContractStorageTrie(
&s.state.initRoot,
&s.addr,
)
if err != nil {
return nil, err
}
Expand All @@ -82,17 +55,20 @@ func (s *stateObject) getStorageTrie() (*trie2.Trie, error) {
return storageTrie, nil
}

func (s *stateObject) getStorageRoot() felt.Felt {
func (s *stateObject) getStorageRoot() (felt.Felt, error) {
// If the storage trie is loaded, it may be modified somewhere already.
// Return the hash of the trie and update the contract's storage root.
if s.storageTrie != nil {
root, _ := s.storageTrie.Hash()
root, err := s.storageTrie.Hash()
if err != nil {
return felt.Zero, err
}
s.contract.StorageRoot = root
return root
return root, nil
}

// Otherwise, return the storage root from the contract.
return s.contract.StorageRoot
return s.contract.StorageRoot, nil
}

func (s *stateObject) commit() (*trienode.NodeSet, error) {
Expand Down
Loading
Loading