Skip to content
Merged
Show file tree
Hide file tree
Changes from 27 commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
459db5d
implement logic to build genesis state for the sequencer
rianhughes Jan 13, 2025
fbae35c
comments: merge method, const string
rianhughes Jan 14, 2025
aad7fc7
lint
rianhughes Jan 15, 2025
c93213c
comments
rianhughes Jan 20, 2025
82064bd
comment: feltOne, function signature
rianhughes Jan 21, 2025
924d2dc
comments:execute txns altogether, setClass clarity
rianhughes Jan 23, 2025
41bd928
Merge branch 'main' into feature/sequencer-genesis
rianhughes Jan 23, 2025
23cc968
Merge branch 'main' into feature/sequencer-genesis
rianhughes Feb 12, 2025
dc14a90
Merge branch 'main' into feature/sequencer-genesis
rianhughes Feb 24, 2025
3d582a4
fix test, lint, allow users to call Contructor type
rianhughes Feb 24, 2025
d761b14
Merge branch 'main' into feature/sequencer-genesis
rianhughes Mar 5, 2025
b5dfa98
comment: predefined sizes
rianhughes Mar 5, 2025
0a28c00
genesis header
rianhughes Mar 5, 2025
78b8080
remove vm-blockifier writer functions, extract changes via state-diffs
rianhughes Mar 10, 2025
9b7d54c
Merge branch 'main' into feature/sequencer-genesis
rianhughes Mar 10, 2025
ef0cf02
Merge branch 'main' into feature/sequencer-genesis
rianhughes Mar 11, 2025
f53646c
address some comments (genesis.go, adapter.go)
rianhughes Mar 13, 2025
aaaf01a
comments
rianhughes Mar 13, 2025
1b96e34
comment: return emptystatediff by value
rianhughes Mar 13, 2025
74ff302
restructure GenesisStateDiff to remove nocyclo (thank you claude)
rianhughes Mar 13, 2025
a7c0a70
GenesisStateDiff returns core.StateDiff by value
rianhughes Mar 13, 2025
e313227
AdaptStateDiff no longer requires caller to predefine result
rianhughes Mar 13, 2025
533c923
make CONSTRUCTOR_ENTRY_POINT_FELT a global const and rm dead code
rianhughes Mar 14, 2025
dfb9226
state diff from(state_maps: StateMaps) fn now takes ownership, allowi…
rianhughes Mar 14, 2025
8d45cb6
initialise each field in fn from(state_maps: StateMaps) seperately
rianhughes Mar 14, 2025
7eaa3fc
Merge branch 'main' into feature/sequencer-genesis
rianhughes Mar 14, 2025
c560082
lint
rianhughes Mar 14, 2025
497a387
rename result to toSTateDiff
rianhughes Mar 17, 2025
5360617
Merge branch 'main' into feature/sequencer-genesis
rianhughes Mar 17, 2025
fd7fc4f
rm unneeded MergeStateDiffs
rianhughes Mar 17, 2025
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
48 changes: 48 additions & 0 deletions adapters/vm2core/vm2core.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
"slices"

"github.com/NethermindEth/juno/core"
"github.com/NethermindEth/juno/core/felt"
"github.com/NethermindEth/juno/utils"
"github.com/NethermindEth/juno/vm"
"github.com/ethereum/go-ethereum/common"
Expand Down Expand Up @@ -39,3 +40,50 @@
})
return utils.Map(events, AdaptOrderedEvent)
}

func AdaptStateDiff(fromStateDiff *vm.StateDiff) core.StateDiff {
var result core.StateDiff
if fromStateDiff == nil {
return result
}

Check warning on line 48 in adapters/vm2core/vm2core.go

View check run for this annotation

Codecov / codecov/patch

adapters/vm2core/vm2core.go#L47-L48

Added lines #L47 - L48 were not covered by tests

// Preallocate all maps with known sizes from fromStateDiff
result = core.StateDiff{
StorageDiffs: make(map[felt.Felt]map[felt.Felt]*felt.Felt, len(fromStateDiff.StorageDiffs)),
Nonces: make(map[felt.Felt]*felt.Felt, len(fromStateDiff.Nonces)),
DeployedContracts: make(map[felt.Felt]*felt.Felt, len(fromStateDiff.DeployedContracts)),
DeclaredV0Classes: make([]*felt.Felt, len(fromStateDiff.DeprecatedDeclaredClasses)),
DeclaredV1Classes: make(map[felt.Felt]*felt.Felt, len(fromStateDiff.DeclaredClasses)),
ReplacedClasses: make(map[felt.Felt]*felt.Felt, len(fromStateDiff.ReplacedClasses)),
}

for _, sd := range fromStateDiff.StorageDiffs {
entries := make(map[felt.Felt]*felt.Felt, len(sd.StorageEntries))
for _, entry := range sd.StorageEntries {
val := entry.Value
entries[entry.Key] = &val
}
result.StorageDiffs[sd.Address] = entries
}

for _, nonce := range fromStateDiff.Nonces {
newNonce := nonce.Nonce
result.Nonces[nonce.ContractAddress] = &newNonce
}

for _, dc := range fromStateDiff.DeployedContracts {
ch := dc.ClassHash
result.DeployedContracts[dc.Address] = &ch
}

for _, dc := range fromStateDiff.DeclaredClasses {
cch := dc.CompiledClassHash
result.DeclaredV1Classes[dc.ClassHash] = &cch
}

Check warning on line 82 in adapters/vm2core/vm2core.go

View check run for this annotation

Codecov / codecov/patch

adapters/vm2core/vm2core.go#L80-L82

Added lines #L80 - L82 were not covered by tests

for _, rc := range fromStateDiff.ReplacedClasses {
ch := rc.ClassHash
result.ReplacedClasses[rc.ContractAddress] = &ch
}

Check warning on line 87 in adapters/vm2core/vm2core.go

View check run for this annotation

Codecov / codecov/patch

adapters/vm2core/vm2core.go#L85-L87

Added lines #L85 - L87 were not covered by tests
return result
}
54 changes: 54 additions & 0 deletions core/state_update.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,31 @@
ReplacedClasses map[felt.Felt]*felt.Felt // addr -> class hash
}

func (d *StateDiff) MergeStateDiffs(incoming *StateDiff) {
mergeMaps := func(oldMap, newMap map[felt.Felt]*felt.Felt) {
for key, value := range newMap {
oldMap[key] = value
}
}

mergeStorageDiffs := func(oldMap, newMap map[felt.Felt]map[felt.Felt]*felt.Felt) {
for addr, newAddrStorage := range newMap {
if oldAddrStorage, exists := oldMap[addr]; exists {
mergeMaps(oldAddrStorage, newAddrStorage)
} else {
oldMap[addr] = newAddrStorage
}
}
}

mergeStorageDiffs(d.StorageDiffs, incoming.StorageDiffs)
mergeMaps(d.Nonces, incoming.Nonces)
mergeMaps(d.DeployedContracts, incoming.DeployedContracts)
mergeMaps(d.DeclaredV1Classes, incoming.DeclaredV1Classes)
mergeMaps(d.ReplacedClasses, incoming.ReplacedClasses)
d.DeclaredV0Classes = append(d.DeclaredV0Classes, incoming.DeclaredV0Classes...)
}

func (d *StateDiff) Length() uint64 {
var length int

Expand All @@ -39,6 +64,24 @@
return uint64(length)
}

func (d *StateDiff) Merge(incoming *StateDiff) {
mergeStorageDiffs := func(oldMap, newMap map[felt.Felt]map[felt.Felt]*felt.Felt) {
for addr, newAddrStorage := range newMap {
if oldAddrStorage, exists := oldMap[addr]; exists {
maps.Copy(oldAddrStorage, newAddrStorage)
} else {
oldMap[addr] = newAddrStorage
}

Check warning on line 74 in core/state_update.go

View check run for this annotation

Codecov / codecov/patch

core/state_update.go#L70-L74

Added lines #L70 - L74 were not covered by tests
}
}
maps.Copy(d.Nonces, incoming.Nonces)
maps.Copy(d.DeployedContracts, incoming.DeployedContracts)
maps.Copy(d.DeclaredV1Classes, incoming.DeclaredV1Classes)
maps.Copy(d.ReplacedClasses, incoming.ReplacedClasses)
mergeStorageDiffs(d.StorageDiffs, incoming.StorageDiffs)
d.DeclaredV0Classes = append(d.DeclaredV0Classes, incoming.DeclaredV0Classes...)
}

var starknetStateDiff0 = new(felt.Felt).SetBytes([]byte("STARKNET_STATE_DIFF0"))

func (d *StateDiff) Hash() *felt.Felt {
Expand Down Expand Up @@ -199,3 +242,14 @@
digest.Update(&addr, nonces[addr])
}
}

func EmptyStateDiff() StateDiff {
return StateDiff{
StorageDiffs: make(map[felt.Felt]map[felt.Felt]*felt.Felt),
Nonces: make(map[felt.Felt]*felt.Felt),
DeployedContracts: make(map[felt.Felt]*felt.Felt),
DeclaredV0Classes: make([]*felt.Felt, 0),
DeclaredV1Classes: make(map[felt.Felt]*felt.Felt),
ReplacedClasses: make(map[felt.Felt]*felt.Felt),
}
}
Loading
Loading