Skip to content

Commit 42d5a18

Browse files
authored
ovm: new initial state (#23)
* ovm: new initial state * ovm: initial testnet state tests * initial state: update * state: update contracts * initial state: document deployment addresses
1 parent f9bef88 commit 42d5a18

File tree

2 files changed

+74
-1
lines changed

2 files changed

+74
-1
lines changed

core/vm/ovm_constants.go

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

tests/ovm_test.go

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,78 @@ const GAS_LIMIT = 15000000
4343
var ZERO_ADDRESS = common.HexToAddress("0000000000000000000000000000000000000000")
4444
var OTHER_FROM_ADDR = common.HexToAddress("8888888888888888888888888888888888888888")
4545

46+
// Test that only the expected accounts exist in the initial state.
47+
func TestInitialState(t *testing.T) {
48+
statedb := newState()
49+
dump := statedb.RawDump(false, false, false)
50+
51+
codeHashes := map[string]bool{
52+
"0xe5ac91913949a832a99293323b31665ca6bd007bca03154d64e1236aeba0b197": false, // l2ToL1MessagePasser
53+
"0x08c32c18cdaf8b92c32b2c5cd181f7cba6656d404c3892f264decb22fd3c7510": false, // l1MessageSender
54+
"0xe8c7ea1431f29500679b1382b4456796fc3bc1b9e28b87db81843ffc313b5c1a": false, // l1ToL2TransactionQueue
55+
"0xeb6841864a7bb7884ae85ade69b0bb164a62a46de81749d9b5ef5716a2a8be0c": false, // safetyTransactionQueue
56+
"0xd39c5a5b3b7637c20e47ed8afd352b115256d6d7a4f4e2c3b9c31eb8a715dcf9": false, // canonicalTransactionChain
57+
"0xad1736290b4f564f37bae2c6083f4673ef6782670faffadc1339ad54311cd280": false, // stateCommitmentChain
58+
"0xab0448158015a88b7858056922ac7dc309d6fa1a1fad33cbe2f6bb6183e1a709": false, // stateManager
59+
"0x41c5aca1c7140c5a7725b92923bb8078b8eb299bb455932d1f009a9db0a20b42": false, // executionManager
60+
"0x438eec98a6a47190006c4165134d48232cc4c3d7df5281bb310efe90846e7af2": false, // safetyChecker
61+
"0x5598c6213e53b6f5cb5411e5caf67633f0e6df42a44a37c10d896b20580e4c31": false, // fraudVerifier
62+
"0xc6e120fbc52b6d76231bea4c12088810b3f2f785cffb4d6e51be9441e7958198": false, // rollupMerkleUtils
63+
"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470": false, // deployment EOA
64+
"0xe87f70d10b89a185d4d7dd8cbd4d57dc0dab3e098a6bc6189d02e9e5ab6f7ed2": false, // deployerWhitelist
65+
"0x2ddfa25b687d8e01d56c9082a21496e277838bb506590105064e8030b10f710b": false, // gasConsumer
66+
"0x73d9ed53f1efc616ffb09773a97586fd3534d2aa2d1b313dcc4b82ade559d6ee": false, // addressResolver
67+
}
68+
69+
addresses := map[string]bool{
70+
"0x00000000000000000000000000000000DEAD0002": false, // addressResolver
71+
"0x4200000000000000000000000000000000000001": false, // l1MessageSender
72+
"0x00000000000000000000000000000000DEad0003": false, // rollupMerkleUtils
73+
"0x00000000000000000000000000000000DEAD0001": false, // stateManager
74+
"0x00000000000000000000000000000000DeAd0006": false, // gasConsumer
75+
"0x4200000000000000000000000000000000000000": false, // l2ToL1MessagePasser
76+
"0x00000000000000000000000000000000DEaD000b": false, // safetyTransactionQueue
77+
"0x00000000000000000000000000000000DeAd0000": false, // executionManager
78+
"0x00000000000000000000000000000000DEaD000C": false, // l1ToL2TransactionQueue
79+
"0x00000000000000000000000000000000dEad0005": false, // stateCommitmentChain
80+
"0x00000000000000000000000000000000deaD000a": false, // safetyChecker
81+
"0x00000000000000000000000000000000deaD0007": false, // fraudVerifier
82+
"0x00000000000000000000000000000000deAD000E": false, // deployment EOA
83+
"0x00000000000000000000000000000000DEAD0009": false, // deployerWhitelist
84+
"0x00000000000000000000000000000000DeAD000D": false, // canonicalTransactionChain
85+
}
86+
87+
for address, account := range dump.Accounts {
88+
_, ok := addresses[address.Hex()]
89+
if !ok {
90+
t.Fatalf("Unknown account in initial state: %s", address.Hex())
91+
}
92+
addresses[address.Hex()] = true
93+
94+
codeHash := "0x" + account.CodeHash
95+
seen, ok := codeHashes[codeHash]
96+
if !ok {
97+
t.Fatalf("Unknown code hash in initial state. Account %s, hash %s", address.Hex(), codeHash)
98+
}
99+
if seen {
100+
t.Fatalf("Code hash seen more than once")
101+
}
102+
codeHashes[codeHash] = true
103+
}
104+
105+
for k, v := range codeHashes {
106+
if v != true {
107+
t.Fatalf("Code hash %s not found in initial state", k)
108+
}
109+
}
110+
111+
for k, v := range addresses {
112+
if v != true {
113+
t.Fatalf("Address %s not found in initial state", k)
114+
}
115+
}
116+
}
117+
46118
func TestContractCreationAndSimpleStorageTxs(t *testing.T) {
47119
currentState := newState()
48120

@@ -216,6 +288,7 @@ func newState() *state.StateDB {
216288
db := state.NewDatabase(rawdb.NewMemoryDatabase())
217289
state, _ := state.New(common.Hash{}, db)
218290
core.ApplyOvmStateToState(state)
291+
_, _ = state.Commit(false)
219292
return state
220293
}
221294

0 commit comments

Comments
 (0)