Skip to content

Commit

Permalink
implement logic to build genesis state for the sequencer
Browse files Browse the repository at this point in the history
  • Loading branch information
rianhughes committed Jan 13, 2025
1 parent 0fb6380 commit ac076ca
Show file tree
Hide file tree
Showing 22 changed files with 24,210 additions and 125 deletions.
36 changes: 36 additions & 0 deletions adapters/vm2core/vm2core.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"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,38 @@ func AdaptOrderedEvents(events []vm.OrderedEvent) []*core.Event {
})
return utils.Map(events, AdaptOrderedEvent)
}

func AdaptStateDiff(sd *vm.StateDiff) *core.StateDiff {
result := core.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: []*felt.Felt{},
DeclaredV1Classes: make(map[felt.Felt]*felt.Felt),
ReplacedClasses: make(map[felt.Felt]*felt.Felt),
}
if sd == nil {
return &result
}
for _, entries := range sd.StorageDiffs {
KeyVals := map[felt.Felt]*felt.Felt{}
for _, entry := range entries.StorageEntries {
KeyVals[entry.Key] = &entry.Value
}
result.StorageDiffs[entries.Address] = KeyVals
}
for _, addrNonce := range sd.Nonces {
result.Nonces[addrNonce.ContractAddress] = &addrNonce.Nonce
}
for _, addrClassHash := range sd.DeployedContracts {
result.Nonces[addrClassHash.Address] = &addrClassHash.ClassHash
}
for _, hashes := range sd.DeclaredClasses {
result.DeclaredV1Classes[hashes.ClassHash] = &hashes.CompiledClassHash
}
for _, addrClassHash := range sd.ReplacedClasses {
result.ReplacedClasses[addrClassHash.ClassHash] = &addrClassHash.ClassHash
}
result.DeclaredV0Classes = append(result.DeclaredV0Classes, sd.DeprecatedDeclaredClasses...)
return &result
}
38 changes: 38 additions & 0 deletions core/state_update.go
Original file line number Diff line number Diff line change
Expand Up @@ -199,3 +199,41 @@ func noncesDigest(nonces map[felt.Felt]*felt.Felt, digest *crypto.PoseidonDigest
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),
}
}

func MergeStateDiffs(oldStateDiff, newStateDiff *StateDiff) *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(oldStateDiff.StorageDiffs, newStateDiff.StorageDiffs)
mergeMaps(oldStateDiff.Nonces, newStateDiff.Nonces)
mergeMaps(oldStateDiff.DeployedContracts, newStateDiff.DeployedContracts)
mergeMaps(oldStateDiff.DeclaredV1Classes, newStateDiff.DeclaredV1Classes)
mergeMaps(oldStateDiff.ReplacedClasses, newStateDiff.ReplacedClasses)
oldStateDiff.DeclaredV0Classes = append(oldStateDiff.DeclaredV0Classes, newStateDiff.DeclaredV0Classes...)

return oldStateDiff
}
Loading

0 comments on commit ac076ca

Please sign in to comment.