Skip to content

Commit 459db5d

Browse files
committed
implement logic to build genesis state for the sequencer
wip - fix test fix stuff
1 parent d99e28b commit 459db5d

25 files changed

+24231
-119
lines changed

adapters/vm2core/vm2core.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"slices"
66

77
"github.com/NethermindEth/juno/core"
8+
"github.com/NethermindEth/juno/core/felt"
89
"github.com/NethermindEth/juno/utils"
910
"github.com/NethermindEth/juno/vm"
1011
"github.com/ethereum/go-ethereum/common"
@@ -39,3 +40,52 @@ func AdaptOrderedEvents(events []vm.OrderedEvent) []*core.Event {
3940
})
4041
return utils.Map(events, AdaptOrderedEvent)
4142
}
43+
44+
func AdaptStateDiff(trace *vm.TransactionTrace) *core.StateDiff {
45+
if trace.StateDiff == nil {
46+
return nil
47+
}
48+
stateDiff := trace.StateDiff
49+
newStorageDiffs := make(map[felt.Felt]map[felt.Felt]*felt.Felt)
50+
for _, sd := range stateDiff.StorageDiffs {
51+
entries := make(map[felt.Felt]*felt.Felt)
52+
for _, entry := range sd.StorageEntries {
53+
val := entry.Value
54+
entries[entry.Key] = &val
55+
}
56+
newStorageDiffs[sd.Address] = entries
57+
}
58+
59+
newNonces := make(map[felt.Felt]*felt.Felt)
60+
for _, nonce := range stateDiff.Nonces {
61+
nonc := nonce.Nonce
62+
newNonces[nonce.ContractAddress] = &nonc
63+
}
64+
65+
newDeployedContracts := make(map[felt.Felt]*felt.Felt)
66+
for _, dc := range stateDiff.DeployedContracts {
67+
ch := dc.ClassHash
68+
newDeployedContracts[dc.Address] = &ch
69+
}
70+
71+
newDeclaredV1Classes := make(map[felt.Felt]*felt.Felt)
72+
for _, dc := range stateDiff.DeclaredClasses {
73+
cch := dc.CompiledClassHash
74+
newDeclaredV1Classes[dc.ClassHash] = &cch
75+
}
76+
77+
newReplacedClasses := make(map[felt.Felt]*felt.Felt)
78+
for _, rc := range stateDiff.ReplacedClasses {
79+
ch := rc.ClassHash
80+
newReplacedClasses[rc.ContractAddress] = &ch
81+
}
82+
83+
return &core.StateDiff{
84+
StorageDiffs: newStorageDiffs,
85+
Nonces: newNonces,
86+
DeployedContracts: newDeployedContracts,
87+
DeclaredV0Classes: stateDiff.DeprecatedDeclaredClasses,
88+
DeclaredV1Classes: newDeclaredV1Classes,
89+
ReplacedClasses: newReplacedClasses,
90+
}
91+
}

core/state_update.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,3 +199,41 @@ func noncesDigest(nonces map[felt.Felt]*felt.Felt, digest *crypto.PoseidonDigest
199199
digest.Update(&addr, nonces[addr])
200200
}
201201
}
202+
203+
func EmptyStateDiff() *StateDiff {
204+
return &StateDiff{
205+
StorageDiffs: make(map[felt.Felt]map[felt.Felt]*felt.Felt),
206+
Nonces: make(map[felt.Felt]*felt.Felt),
207+
DeployedContracts: make(map[felt.Felt]*felt.Felt),
208+
DeclaredV0Classes: make([]*felt.Felt, 0),
209+
DeclaredV1Classes: make(map[felt.Felt]*felt.Felt),
210+
ReplacedClasses: make(map[felt.Felt]*felt.Felt),
211+
}
212+
}
213+
214+
func MergeStateDiffs(oldStateDiff, newStateDiff *StateDiff) *StateDiff {
215+
mergeMaps := func(oldMap, newMap map[felt.Felt]*felt.Felt) {
216+
for key, value := range newMap {
217+
oldMap[key] = value
218+
}
219+
}
220+
221+
mergeStorageDiffs := func(oldMap, newMap map[felt.Felt]map[felt.Felt]*felt.Felt) {
222+
for addr, newAddrStorage := range newMap {
223+
if oldAddrStorage, exists := oldMap[addr]; exists {
224+
mergeMaps(oldAddrStorage, newAddrStorage)
225+
} else {
226+
oldMap[addr] = newAddrStorage
227+
}
228+
}
229+
}
230+
231+
mergeStorageDiffs(oldStateDiff.StorageDiffs, newStateDiff.StorageDiffs)
232+
mergeMaps(oldStateDiff.Nonces, newStateDiff.Nonces)
233+
mergeMaps(oldStateDiff.DeployedContracts, newStateDiff.DeployedContracts)
234+
mergeMaps(oldStateDiff.DeclaredV1Classes, newStateDiff.DeclaredV1Classes)
235+
mergeMaps(oldStateDiff.ReplacedClasses, newStateDiff.ReplacedClasses)
236+
oldStateDiff.DeclaredV0Classes = append(oldStateDiff.DeclaredV0Classes, newStateDiff.DeclaredV0Classes...)
237+
238+
return oldStateDiff
239+
}

0 commit comments

Comments
 (0)