Skip to content

Commit c3953c0

Browse files
authored
implement logic to build genesis state for the sequencer (#2371)
* implement genesis pkg necessary for the upcoming sequencer feature
1 parent adf229e commit c3953c0

27 files changed

+24227
-113
lines changed

adapters/vm2core/vm2core.go

Lines changed: 48 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,50 @@ func AdaptOrderedEvents(events []vm.OrderedEvent) []*core.Event {
3940
})
4041
return utils.Map(events, AdaptOrderedEvent)
4142
}
43+
44+
func AdaptStateDiff(fromStateDiff *vm.StateDiff) core.StateDiff {
45+
var toStateDiff core.StateDiff
46+
if fromStateDiff == nil {
47+
return toStateDiff
48+
}
49+
50+
// Preallocate all maps with known sizes from fromStateDiff
51+
toStateDiff = core.StateDiff{
52+
StorageDiffs: make(map[felt.Felt]map[felt.Felt]*felt.Felt, len(fromStateDiff.StorageDiffs)),
53+
Nonces: make(map[felt.Felt]*felt.Felt, len(fromStateDiff.Nonces)),
54+
DeployedContracts: make(map[felt.Felt]*felt.Felt, len(fromStateDiff.DeployedContracts)),
55+
DeclaredV0Classes: make([]*felt.Felt, len(fromStateDiff.DeprecatedDeclaredClasses)),
56+
DeclaredV1Classes: make(map[felt.Felt]*felt.Felt, len(fromStateDiff.DeclaredClasses)),
57+
ReplacedClasses: make(map[felt.Felt]*felt.Felt, len(fromStateDiff.ReplacedClasses)),
58+
}
59+
60+
for _, sd := range fromStateDiff.StorageDiffs {
61+
entries := make(map[felt.Felt]*felt.Felt, len(sd.StorageEntries))
62+
for _, entry := range sd.StorageEntries {
63+
val := entry.Value
64+
entries[entry.Key] = &val
65+
}
66+
toStateDiff.StorageDiffs[sd.Address] = entries
67+
}
68+
69+
for _, nonce := range fromStateDiff.Nonces {
70+
newNonce := nonce.Nonce
71+
toStateDiff.Nonces[nonce.ContractAddress] = &newNonce
72+
}
73+
74+
for _, dc := range fromStateDiff.DeployedContracts {
75+
ch := dc.ClassHash
76+
toStateDiff.DeployedContracts[dc.Address] = &ch
77+
}
78+
79+
for _, dc := range fromStateDiff.DeclaredClasses {
80+
cch := dc.CompiledClassHash
81+
toStateDiff.DeclaredV1Classes[dc.ClassHash] = &cch
82+
}
83+
84+
for _, rc := range fromStateDiff.ReplacedClasses {
85+
ch := rc.ClassHash
86+
toStateDiff.ReplacedClasses[rc.ContractAddress] = &ch
87+
}
88+
return toStateDiff
89+
}

core/state_update.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,24 @@ func (d *StateDiff) Length() uint64 {
3939
return uint64(length)
4040
}
4141

42+
func (d *StateDiff) Merge(incoming *StateDiff) {
43+
mergeStorageDiffs := func(oldMap, newMap map[felt.Felt]map[felt.Felt]*felt.Felt) {
44+
for addr, newAddrStorage := range newMap {
45+
if oldAddrStorage, exists := oldMap[addr]; exists {
46+
maps.Copy(oldAddrStorage, newAddrStorage)
47+
} else {
48+
oldMap[addr] = newAddrStorage
49+
}
50+
}
51+
}
52+
maps.Copy(d.Nonces, incoming.Nonces)
53+
maps.Copy(d.DeployedContracts, incoming.DeployedContracts)
54+
maps.Copy(d.DeclaredV1Classes, incoming.DeclaredV1Classes)
55+
maps.Copy(d.ReplacedClasses, incoming.ReplacedClasses)
56+
mergeStorageDiffs(d.StorageDiffs, incoming.StorageDiffs)
57+
d.DeclaredV0Classes = append(d.DeclaredV0Classes, incoming.DeclaredV0Classes...)
58+
}
59+
4260
var starknetStateDiff0 = new(felt.Felt).SetBytes([]byte("STARKNET_STATE_DIFF0"))
4361

4462
func (d *StateDiff) Hash() *felt.Felt {
@@ -199,3 +217,14 @@ func noncesDigest(nonces map[felt.Felt]*felt.Felt, digest *crypto.PoseidonDigest
199217
digest.Update(&addr, nonces[addr])
200218
}
201219
}
220+
221+
func EmptyStateDiff() StateDiff {
222+
return StateDiff{
223+
StorageDiffs: make(map[felt.Felt]map[felt.Felt]*felt.Felt),
224+
Nonces: make(map[felt.Felt]*felt.Felt),
225+
DeployedContracts: make(map[felt.Felt]*felt.Felt),
226+
DeclaredV0Classes: make([]*felt.Felt, 0),
227+
DeclaredV1Classes: make(map[felt.Felt]*felt.Felt),
228+
ReplacedClasses: make(map[felt.Felt]*felt.Felt),
229+
}
230+
}

0 commit comments

Comments
 (0)