Skip to content

Commit 8f413db

Browse files
committed
move state commitment to the state reader
1 parent 74a3401 commit 8f413db

File tree

3 files changed

+34
-39
lines changed

3 files changed

+34
-39
lines changed

blockchain/blockchain.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ func (b *Blockchain) Network() *utils.Network {
128128
func (b *Blockchain) StateCommitment() (felt.Felt, error) {
129129
b.listener.OnRead("StateCommitment")
130130
batch := b.database.NewIndexedBatch() // this is a hack because we don't need to write to the db
131-
return core.NewState(batch).Commitment()
131+
return core.NewStateSnapshotReader(batch).Commitment()
132132
}
133133

134134
// Height returns the latest block height. If blockchain is empty nil is returned.

core/state.go

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -87,44 +87,6 @@ func (s *State) putNewContract(
8787
return s.updateContractCommitment(contractTrie, contract)
8888
}
8989

90-
// Root returns the state commitment.
91-
func (s *State) Commitment() (felt.Felt, error) {
92-
var storageRoot, classesRoot felt.Felt
93-
94-
sStorage, closer, err := contractTrie(s.txn)
95-
if err != nil {
96-
return felt.Felt{}, err
97-
}
98-
99-
if storageRoot, err = sStorage.Hash(); err != nil {
100-
return felt.Felt{}, err
101-
}
102-
103-
if err = closer(); err != nil {
104-
return felt.Felt{}, err
105-
}
106-
107-
classes, closer, err := classesTrie(s.txn)
108-
if err != nil {
109-
return felt.Felt{}, err
110-
}
111-
112-
if classesRoot, err = classes.Hash(); err != nil {
113-
return felt.Felt{}, err
114-
}
115-
116-
if err = closer(); err != nil {
117-
return felt.Felt{}, err
118-
}
119-
120-
if classesRoot.IsZero() {
121-
return storageRoot, nil
122-
}
123-
124-
root := crypto.PoseidonArray(stateVersion, &storageRoot, &classesRoot)
125-
return root, nil
126-
}
127-
12890
func (s *State) verifyStateUpdateRoot(root *felt.Felt) error {
12991
currentRoot, err := s.Commitment()
13092
if err != nil {

core/state_reader.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"encoding/binary"
66
"errors"
77

8+
"github.com/NethermindEth/juno/core/crypto"
89
"github.com/NethermindEth/juno/core/felt"
910
"github.com/NethermindEth/juno/core/state/commontrie"
1011
"github.com/NethermindEth/juno/core/trie"
@@ -47,6 +48,38 @@ func NewStateSnapshotReader(txn db.KeyValueReader) *StateSnapshotReader {
4748
}
4849
}
4950

51+
// Root returns the state commitment.
52+
func (s *StateSnapshotReader) Commitment() (felt.Felt, error) {
53+
var storageRoot, classesRoot felt.Felt
54+
55+
sStorage, err := contractTrieReader(s.txn)
56+
if err != nil {
57+
return felt.Felt{}, err
58+
}
59+
60+
storageRoot, err = sStorage.Hash()
61+
if err != nil {
62+
return felt.Felt{}, err
63+
}
64+
65+
classes, err := classesTrieReader(s.txn)
66+
if err != nil {
67+
return felt.Felt{}, err
68+
}
69+
70+
classesRoot, err = classes.Hash()
71+
if err != nil {
72+
return felt.Felt{}, err
73+
}
74+
75+
if classesRoot.IsZero() {
76+
return storageRoot, nil
77+
}
78+
79+
root := crypto.PoseidonArray(stateVersion, &storageRoot, &classesRoot)
80+
return root, nil
81+
}
82+
5083
// ContractStorageAt returns the value of a storage location
5184
// of the given contract at the height `height`
5285
func (s *StateSnapshotReader) ContractStorageAt(

0 commit comments

Comments
 (0)