Skip to content

Commit c64de27

Browse files
committed
move state commitment to the state reader
1 parent 0fcba84 commit c64de27

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
@@ -100,7 +100,7 @@ func (b *Blockchain) Network() *utils.Network {
100100
func (b *Blockchain) StateCommitment() (felt.Felt, error) {
101101
b.listener.OnRead("StateCommitment")
102102
batch := b.database.NewIndexedBatch() // this is a hack because we don't need to write to the db
103-
return core.NewState(batch).Commitment()
103+
return core.NewStateSnapshotReader(batch).Commitment()
104104
}
105105

106106
// 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
@@ -65,44 +65,6 @@ func (s *State) putNewContract(
6565
return s.updateContractCommitment(contractTrie, contract)
6666
}
6767

68-
// Root returns the state commitment.
69-
func (s *State) Commitment() (felt.Felt, error) {
70-
var storageRoot, classesRoot felt.Felt
71-
72-
sStorage, closer, err := contractTrie(s.txn)
73-
if err != nil {
74-
return felt.Felt{}, err
75-
}
76-
77-
if storageRoot, err = sStorage.Hash(); err != nil {
78-
return felt.Felt{}, err
79-
}
80-
81-
if err = closer(); err != nil {
82-
return felt.Felt{}, err
83-
}
84-
85-
classes, closer, err := classesTrie(s.txn)
86-
if err != nil {
87-
return felt.Felt{}, err
88-
}
89-
90-
if classesRoot, err = classes.Hash(); err != nil {
91-
return felt.Felt{}, err
92-
}
93-
94-
if err = closer(); err != nil {
95-
return felt.Felt{}, err
96-
}
97-
98-
if classesRoot.IsZero() {
99-
return storageRoot, nil
100-
}
101-
102-
root := crypto.PoseidonArray(stateVersion, &storageRoot, &classesRoot)
103-
return root, nil
104-
}
105-
10668
func (s *State) verifyStateUpdateRoot(root *felt.Felt) error {
10769
currentRoot, err := s.Commitment()
10870
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)