Skip to content

Commit 329d12f

Browse files
authored
Merge pull request #373 from OffchainLabs/run-mode-struct
replace MessageRunMode with a struct
2 parents 10fe4ef + 14abcb7 commit 329d12f

28 files changed

+216
-141
lines changed

arbitrum/apibackend.go

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,6 @@ var (
4747
type APIBackend struct {
4848
b *Backend
4949

50-
dbForAPICalls ethdb.Database
51-
5250
fallbackClient types.FallbackClient
5351
archiveClientsManager *archiveFallbackClientsManager
5452
sync SyncProgressBackend
@@ -131,12 +129,6 @@ func createRegisterAPIBackend(backend *Backend, filterConfig filters.Config, fal
131129
if err != nil {
132130
return nil, err
133131
}
134-
// discard stylus-tag on any call made from api database
135-
dbForAPICalls := backend.chainDb
136-
wasmStore, tag := backend.chainDb.WasmDataBase()
137-
if tag != 0 || len(backend.chainDb.WasmTargets()) > 1 {
138-
dbForAPICalls = rawdb.WrapDatabaseWithWasm(backend.chainDb, wasmStore, 0, []ethdb.WasmTarget{rawdb.LocalTarget()})
139-
}
140132
var archiveClientsManager *archiveFallbackClientsManager
141133
if len(archiveRedirects) != 0 {
142134
archiveClientsManager, err = newArchiveFallbackClientsManager(archiveRedirects)
@@ -146,7 +138,6 @@ func createRegisterAPIBackend(backend *Backend, filterConfig filters.Config, fal
146138
}
147139
backend.apiBackend = &APIBackend{
148140
b: backend,
149-
dbForAPICalls: dbForAPICalls,
150141
fallbackClient: fallbackClient,
151142
archiveClientsManager: archiveClientsManager,
152143
}
@@ -371,7 +362,7 @@ func (a *APIBackend) BlobBaseFee(ctx context.Context) *big.Int {
371362
}
372363

373364
func (a *APIBackend) ChainDb() ethdb.Database {
374-
return a.dbForAPICalls
365+
return a.b.chainDb
375366
}
376367

377368
func (a *APIBackend) AccountManager() *accounts.Manager {

arbitrum/recordingdb.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ func (r *RecordingDatabase) PrepareRecording(ctx context.Context, lastBlockHeade
266266
defer func() { r.Dereference(finalDereference) }()
267267
recordingKeyValue := newRecordingKV(r.db.TrieDB(), r.db.DiskDB())
268268

269-
recordingStateDatabase := state.NewDatabase(triedb.NewDatabase(rawdb.WrapDatabaseWithWasm(rawdb.NewDatabase(recordingKeyValue), r.db.WasmStore(), 0, r.db.WasmTargets()), nil), nil)
269+
recordingStateDatabase := state.NewDatabase(triedb.NewDatabase(rawdb.WrapDatabaseWithWasm(rawdb.NewDatabase(recordingKeyValue), r.db.WasmStore()), nil), nil)
270270
var prevRoot common.Hash
271271
if lastBlockHeader != nil {
272272
prevRoot = lastBlockHeader.Root

cmd/evm/internal/t8ntool/execution.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig,
236236
rejectedTxs = append(rejectedTxs, &rejectedTx{i, errMsg})
237237
continue
238238
}
239-
msg, err := core.TransactionToMessage(tx, signer, pre.Env.BaseFee, core.MessageCommitMode)
239+
msg, err := core.TransactionToMessage(tx, signer, pre.Env.BaseFee, core.NewMessageCommitContext(nil))
240240
if err != nil {
241241
log.Warn("rejected tx", "index", i, "hash", tx.Hash(), "error", err)
242242
rejectedTxs = append(rejectedTxs, &rejectedTx{i, err.Error()})

core/rawdb/accessors_state_arbitrum.go

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,16 @@ import (
2626
"github.com/ethereum/go-ethereum/log"
2727
)
2828

29+
type WasmTarget string
30+
2931
const (
30-
TargetWavm ethdb.WasmTarget = "wavm"
31-
TargetArm64 ethdb.WasmTarget = "arm64"
32-
TargetAmd64 ethdb.WasmTarget = "amd64"
33-
TargetHost ethdb.WasmTarget = "host"
32+
TargetWavm WasmTarget = "wavm"
33+
TargetArm64 WasmTarget = "arm64"
34+
TargetAmd64 WasmTarget = "amd64"
35+
TargetHost WasmTarget = "host"
3436
)
3537

36-
func LocalTarget() ethdb.WasmTarget {
38+
func LocalTarget() WasmTarget {
3739
if runtime.GOOS == "linux" {
3840
switch runtime.GOARCH {
3941
case "arm64":
@@ -45,7 +47,7 @@ func LocalTarget() ethdb.WasmTarget {
4547
return TargetHost
4648
}
4749

48-
func activatedAsmKeyPrefix(target ethdb.WasmTarget) (WasmPrefix, error) {
50+
func activatedAsmKeyPrefix(target WasmTarget) (WasmPrefix, error) {
4951
var prefix WasmPrefix
5052
switch target {
5153
case TargetWavm:
@@ -62,19 +64,19 @@ func activatedAsmKeyPrefix(target ethdb.WasmTarget) (WasmPrefix, error) {
6264
return prefix, nil
6365
}
6466

65-
func IsSupportedWasmTarget(target ethdb.WasmTarget) bool {
67+
func IsSupportedWasmTarget(target WasmTarget) bool {
6668
_, err := activatedAsmKeyPrefix(target)
6769
return err == nil
6870
}
6971

70-
func WriteActivation(db ethdb.KeyValueWriter, moduleHash common.Hash, asmMap map[ethdb.WasmTarget][]byte) {
72+
func WriteActivation(db ethdb.KeyValueWriter, moduleHash common.Hash, asmMap map[WasmTarget][]byte) {
7173
for target, asm := range asmMap {
7274
WriteActivatedAsm(db, target, moduleHash, asm)
7375
}
7476
}
7577

7678
// Stores the activated asm for a given moduleHash and target
77-
func WriteActivatedAsm(db ethdb.KeyValueWriter, target ethdb.WasmTarget, moduleHash common.Hash, asm []byte) {
79+
func WriteActivatedAsm(db ethdb.KeyValueWriter, target WasmTarget, moduleHash common.Hash, asm []byte) {
7880
prefix, err := activatedAsmKeyPrefix(target)
7981
if err != nil {
8082
log.Crit("Failed to store activated wasm asm", "err", err)
@@ -86,7 +88,7 @@ func WriteActivatedAsm(db ethdb.KeyValueWriter, target ethdb.WasmTarget, moduleH
8688
}
8789

8890
// Retrieves the activated asm for a given moduleHash and target
89-
func ReadActivatedAsm(db ethdb.KeyValueReader, target ethdb.WasmTarget, moduleHash common.Hash) []byte {
91+
func ReadActivatedAsm(db ethdb.KeyValueReader, target WasmTarget, moduleHash common.Hash) []byte {
9092
prefix, err := activatedAsmKeyPrefix(target)
9193
if err != nil {
9294
log.Crit("Failed to read activated wasm asm", "err", err)

core/rawdb/database.go

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,11 @@ type freezerdb struct {
4646
ancientRoot string
4747
}
4848

49-
func (frdb *freezerdb) WasmDataBase() (ethdb.KeyValueStore, uint32) {
50-
return frdb, 0
49+
func (frdb *freezerdb) WasmDataBase() ethdb.KeyValueStore {
50+
return frdb
5151
}
5252

53-
func (frdb *freezerdb) WasmTargets() []ethdb.WasmTarget {
53+
func (frdb *freezerdb) WasmTargets() []WasmTarget {
5454
return nil
5555
}
5656

@@ -165,11 +165,11 @@ func (db *nofreezedb) AncientDatadir() (string, error) {
165165
return "", errNotSupported
166166
}
167167

168-
func (db *nofreezedb) WasmDataBase() (ethdb.KeyValueStore, uint32) {
169-
return db, 0
168+
func (db *nofreezedb) WasmDataBase() ethdb.KeyValueStore {
169+
return db
170170
}
171171

172-
func (db *nofreezedb) WasmTargets() []ethdb.WasmTarget {
172+
func (db *nofreezedb) WasmTargets() []WasmTarget {
173173
return nil
174174
}
175175

@@ -181,17 +181,11 @@ func NewDatabase(db ethdb.KeyValueStore) ethdb.Database {
181181

182182
type dbWithWasmEntry struct {
183183
ethdb.Database
184-
wasmDb ethdb.KeyValueStore
185-
wasmCacheTag uint32
186-
wasmTargets []ethdb.WasmTarget
184+
wasmDb ethdb.KeyValueStore
187185
}
188186

189-
func (db *dbWithWasmEntry) WasmDataBase() (ethdb.KeyValueStore, uint32) {
190-
return db.wasmDb, db.wasmCacheTag
191-
}
192-
193-
func (db *dbWithWasmEntry) WasmTargets() []ethdb.WasmTarget {
194-
return db.wasmTargets
187+
func (db *dbWithWasmEntry) WasmDataBase() ethdb.KeyValueStore {
188+
return db.wasmDb
195189
}
196190

197191
func (db *dbWithWasmEntry) Close() error {
@@ -203,8 +197,8 @@ func (db *dbWithWasmEntry) Close() error {
203197
return wasmErr
204198
}
205199

206-
func WrapDatabaseWithWasm(db ethdb.Database, wasm ethdb.KeyValueStore, cacheTag uint32, targets []ethdb.WasmTarget) ethdb.Database {
207-
return &dbWithWasmEntry{db, wasm, cacheTag, targets}
200+
func WrapDatabaseWithWasm(db ethdb.Database, wasm ethdb.KeyValueStore) ethdb.Database {
201+
return &dbWithWasmEntry{db, wasm}
208202
}
209203

210204
// resolveChainFreezerDir is a helper function which resolves the absolute path

core/rawdb/table.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,10 @@ func (t *table) Close() error {
4040
return nil
4141
}
4242

43-
func (t *table) WasmDataBase() (ethdb.KeyValueStore, uint32) {
43+
func (t *table) WasmDataBase() ethdb.KeyValueStore {
4444
return t.db.WasmDataBase()
4545
}
4646

47-
func (t *table) WasmTargets() []ethdb.WasmTarget {
48-
return t.db.WasmTargets()
49-
}
50-
5147
// Has retrieves if a prefixed version of a key is present in the database.
5248
func (t *table) Has(key []byte) (bool, error) {
5349
return t.db.Has(append([]byte(t.prefix), key...))

core/state/database.go

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,8 @@ const (
4949
// Database wraps access to tries and contract code.
5050
type Database interface {
5151
// Arbitrum: Read activated Stylus contracts
52-
ActivatedAsm(target ethdb.WasmTarget, moduleHash common.Hash) (asm []byte, err error)
52+
ActivatedAsm(target rawdb.WasmTarget, moduleHash common.Hash) (asm []byte, err error)
5353
WasmStore() ethdb.KeyValueStore
54-
WasmCacheTag() uint32
55-
WasmTargets() []ethdb.WasmTarget
5654

5755
// Reader returns a state reader associated with the specified state root.
5856
Reader(root common.Hash) (Reader, error)
@@ -155,17 +153,15 @@ type Trie interface {
155153

156154
type activatedAsmCacheKey struct {
157155
moduleHash common.Hash
158-
target ethdb.WasmTarget
156+
target rawdb.WasmTarget
159157
}
160158

161159
// CachingDB is an implementation of Database interface. It leverages both trie and
162160
// state snapshot to provide functionalities for state access. It's meant to be a
163161
// long-live object and has a few caches inside for sharing between blocks.
164162
type CachingDB struct {
165163
// Arbitrum
166-
activatedAsmCache *lru.SizeConstrainedCache[activatedAsmCacheKey, []byte]
167-
wasmTag uint32
168-
wasmDatabaseRetriever ethdb.WasmDataBaseRetriever
164+
activatedAsmCache *lru.SizeConstrainedCache[activatedAsmCacheKey, []byte]
169165

170166
disk ethdb.KeyValueStore
171167
wasmdb ethdb.KeyValueStore
@@ -178,12 +174,10 @@ type CachingDB struct {
178174

179175
// NewDatabase creates a state database with the provided data sources.
180176
func NewDatabase(triedb *triedb.Database, snap *snapshot.Tree) *CachingDB {
181-
wasmdb, wasmTag := triedb.Disk().WasmDataBase()
177+
wasmdb := triedb.Disk().WasmDataBase()
182178
return &CachingDB{
183179
// Arbitrum only
184-
activatedAsmCache: lru.NewSizeConstrainedCache[activatedAsmCacheKey, []byte](activatedWasmCacheSize),
185-
wasmTag: wasmTag,
186-
wasmDatabaseRetriever: triedb.Disk(),
180+
activatedAsmCache: lru.NewSizeConstrainedCache[activatedAsmCacheKey, []byte](activatedWasmCacheSize),
187181

188182
disk: triedb.Disk(),
189183
wasmdb: wasmdb,
@@ -312,14 +306,6 @@ func (db *CachingDB) WasmStore() ethdb.KeyValueStore {
312306
return db.wasmdb
313307
}
314308

315-
func (db *CachingDB) WasmCacheTag() uint32 {
316-
return db.wasmTag
317-
}
318-
319-
func (db *CachingDB) WasmTargets() []ethdb.WasmTarget {
320-
return db.wasmDatabaseRetriever.WasmTargets()
321-
}
322-
323309
func (db *CachingDB) DiskDB() ethdb.KeyValueStore {
324310
return db.disk
325311
}

core/state/database_arbitrum.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@ import (
55

66
"github.com/ethereum/go-ethereum/common"
77
"github.com/ethereum/go-ethereum/core/rawdb"
8-
"github.com/ethereum/go-ethereum/ethdb"
98
)
109

11-
func (db *CachingDB) ActivatedAsm(target ethdb.WasmTarget, moduleHash common.Hash) ([]byte, error) {
10+
func (db *CachingDB) ActivatedAsm(target rawdb.WasmTarget, moduleHash common.Hash) ([]byte, error) {
1211
cacheKey := activatedAsmCacheKey{moduleHash, target}
1312
if asm, _ := db.activatedAsmCache.Get(cacheKey); len(asm) > 0 {
1413
return asm, nil

core/state/statedb_arbitrum.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ import (
2727

2828
"github.com/ethereum/go-ethereum/common"
2929
"github.com/ethereum/go-ethereum/common/lru"
30+
"github.com/ethereum/go-ethereum/core/rawdb"
3031
"github.com/ethereum/go-ethereum/core/types"
31-
"github.com/ethereum/go-ethereum/ethdb"
3232
"github.com/ethereum/go-ethereum/log"
3333
"github.com/ethereum/go-ethereum/rlp"
3434
"github.com/ethereum/go-ethereum/trie"
@@ -50,7 +50,7 @@ var (
5050
StylusDiscriminant = []byte{stylusEOFMagic, stylusEOFMagicSuffix, stylusEOFVersion}
5151
)
5252

53-
type ActivatedWasm map[ethdb.WasmTarget][]byte
53+
type ActivatedWasm map[rawdb.WasmTarget][]byte
5454

5555
// checks if a valid Stylus prefix is present
5656
func IsStylusProgram(b []byte) bool {
@@ -74,7 +74,7 @@ func NewStylusPrefix(dictionary byte) []byte {
7474
return append(prefix, dictionary)
7575
}
7676

77-
func (s *StateDB) ActivateWasm(moduleHash common.Hash, asmMap map[ethdb.WasmTarget][]byte) {
77+
func (s *StateDB) ActivateWasm(moduleHash common.Hash, asmMap map[rawdb.WasmTarget][]byte) {
7878
_, exists := s.arbExtraData.activatedWasms[moduleHash]
7979
if exists {
8080
return
@@ -85,7 +85,7 @@ func (s *StateDB) ActivateWasm(moduleHash common.Hash, asmMap map[ethdb.WasmTarg
8585
})
8686
}
8787

88-
func (s *StateDB) TryGetActivatedAsm(target ethdb.WasmTarget, moduleHash common.Hash) ([]byte, error) {
88+
func (s *StateDB) TryGetActivatedAsm(target rawdb.WasmTarget, moduleHash common.Hash) ([]byte, error) {
8989
asmMap, exists := s.arbExtraData.activatedWasms[moduleHash]
9090
if exists {
9191
if asm, exists := asmMap[target]; exists {
@@ -95,7 +95,7 @@ func (s *StateDB) TryGetActivatedAsm(target ethdb.WasmTarget, moduleHash common.
9595
return s.db.ActivatedAsm(target, moduleHash)
9696
}
9797

98-
func (s *StateDB) TryGetActivatedAsmMap(targets []ethdb.WasmTarget, moduleHash common.Hash) (map[ethdb.WasmTarget][]byte, error) {
98+
func (s *StateDB) TryGetActivatedAsmMap(targets []rawdb.WasmTarget, moduleHash common.Hash) (map[rawdb.WasmTarget][]byte, error) {
9999
asmMap := s.arbExtraData.activatedWasms[moduleHash]
100100
if asmMap != nil {
101101
for _, target := range targets {
@@ -106,7 +106,7 @@ func (s *StateDB) TryGetActivatedAsmMap(targets []ethdb.WasmTarget, moduleHash c
106106
return asmMap, nil
107107
}
108108
var err error
109-
asmMap = make(map[ethdb.WasmTarget][]byte, len(targets))
109+
asmMap = make(map[rawdb.WasmTarget][]byte, len(targets))
110110
for _, target := range targets {
111111
asm, dbErr := s.db.ActivatedAsm(target, moduleHash)
112112
if dbErr == nil {
@@ -267,7 +267,7 @@ func (s *StateDB) StartRecording() {
267267
s.arbExtraData.userWasms = make(UserWasms)
268268
}
269269

270-
func (s *StateDB) RecordProgram(targets []ethdb.WasmTarget, moduleHash common.Hash) {
270+
func (s *StateDB) RecordProgram(targets []rawdb.WasmTarget, moduleHash common.Hash) {
271271
if len(targets) == 0 {
272272
// nothing to record
273273
return

core/state/statedb_hooked.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ import (
2020
"math/big"
2121

2222
"github.com/ethereum/go-ethereum/common"
23+
"github.com/ethereum/go-ethereum/core/rawdb"
2324
"github.com/ethereum/go-ethereum/core/stateless"
2425
"github.com/ethereum/go-ethereum/core/tracing"
2526
"github.com/ethereum/go-ethereum/core/types"
2627
"github.com/ethereum/go-ethereum/crypto"
27-
"github.com/ethereum/go-ethereum/ethdb"
2828
"github.com/ethereum/go-ethereum/params"
2929
"github.com/ethereum/go-ethereum/trie/utils"
3030
"github.com/holiman/uint256"
@@ -278,7 +278,7 @@ func (s *hookedStateDB) Finalise(deleteEmptyObjects bool) {
278278
}
279279
}
280280

281-
func (s *hookedStateDB) ActivateWasm(moduleHash common.Hash, asmMap map[ethdb.WasmTarget][]byte) {
281+
func (s *hookedStateDB) ActivateWasm(moduleHash common.Hash, asmMap map[rawdb.WasmTarget][]byte) {
282282
s.inner.ActivateWasm(moduleHash, asmMap)
283283
}
284284

@@ -290,11 +290,11 @@ func (s *hookedStateDB) IntermediateRoot(deleteEmptyObjects bool) common.Hash {
290290
return s.inner.IntermediateRoot(deleteEmptyObjects)
291291
}
292292

293-
func (s *hookedStateDB) TryGetActivatedAsm(target ethdb.WasmTarget, moduleHash common.Hash) (asm []byte, err error) {
293+
func (s *hookedStateDB) TryGetActivatedAsm(target rawdb.WasmTarget, moduleHash common.Hash) (asm []byte, err error) {
294294
return s.inner.TryGetActivatedAsm(target, moduleHash)
295295
}
296296

297-
func (s *hookedStateDB) TryGetActivatedAsmMap(targets []ethdb.WasmTarget, moduleHash common.Hash) (asmMap map[ethdb.WasmTarget][]byte, err error) {
297+
func (s *hookedStateDB) TryGetActivatedAsmMap(targets []rawdb.WasmTarget, moduleHash common.Hash) (asmMap map[rawdb.WasmTarget][]byte, err error) {
298298
return s.inner.TryGetActivatedAsmMap(targets, moduleHash)
299299
}
300300

core/state_prefetcher.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,14 @@ func (p *statePrefetcher) Prefetch(block *types.Block, statedb *state.StateDB, c
5454
)
5555
// Iterate over and process the individual transactions
5656
byzantium := p.config.IsByzantium(block.Number())
57+
runCtx := NewMessageEthcallContext()
5758
for i, tx := range block.Transactions() {
5859
// If block precaching was interrupted, abort
5960
if interrupt != nil && interrupt.Load() {
6061
return
6162
}
6263
// Convert the transaction into an executable message and pre-cache its sender
63-
msg, err := TransactionToMessage(tx, signer, header.BaseFee, MessageEthcallMode)
64+
msg, err := TransactionToMessage(tx, signer, header.BaseFee, runCtx)
6465
if err != nil {
6566
return // Also invalid block, bail out
6667
}

0 commit comments

Comments
 (0)