Skip to content

Commit d8a8473

Browse files
authored
Remove last synchronous from NewVM (#5556)
1 parent a7b61f2 commit d8a8473

15 files changed

Lines changed: 105 additions & 126 deletions

File tree

graft/coreth/core/blockchain.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -530,6 +530,7 @@ func (bc *BlockChain) batchBlockAcceptedIndices(batch ethdb.Batch, b *types.Bloc
530530
if err := customrawdb.WriteAcceptorTip(batch, b.Hash()); err != nil {
531531
return fmt.Errorf("%w: failed to write acceptor tip key", err)
532532
}
533+
rawdb.WriteFinalizedBlockHash(batch, b.Hash())
533534
return nil
534535
}
535536

graft/coreth/core/genesis.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -393,12 +393,17 @@ func (g *Genesis) Commit(db ethdb.Database, triedb *triedb.Database) (*types.Blo
393393
if err := config.CheckConfigForkOrder(); err != nil {
394394
return nil, err
395395
}
396-
rawdb.WriteBlock(db, block)
397-
rawdb.WriteReceipts(db, block.Hash(), block.NumberU64(), nil)
398-
rawdb.WriteCanonicalHash(db, block.Hash(), block.NumberU64())
399-
rawdb.WriteHeadBlockHash(db, block.Hash())
400-
rawdb.WriteHeadHeaderHash(db, block.Hash())
401-
rawdb.WriteChainConfig(db, block.Hash(), config)
396+
batch := db.NewBatch()
397+
rawdb.WriteBlock(batch, block)
398+
rawdb.WriteReceipts(batch, block.Hash(), block.NumberU64(), nil)
399+
rawdb.WriteCanonicalHash(batch, block.Hash(), block.NumberU64())
400+
rawdb.WriteHeadBlockHash(batch, block.Hash())
401+
rawdb.WriteHeadHeaderHash(batch, block.Hash())
402+
rawdb.WriteFinalizedBlockHash(batch, block.Hash())
403+
rawdb.WriteChainConfig(batch, block.Hash(), config)
404+
if err := batch.Write(); err != nil {
405+
return nil, fmt.Errorf("failed to write genesis block: %w", err)
406+
}
402407
return block, nil
403408
}
404409

graft/subnet-evm/core/blockchain.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,7 @@ func (bc *BlockChain) batchBlockAcceptedIndices(batch ethdb.Batch, b *types.Bloc
547547
if err := customrawdb.WriteAcceptorTip(batch, b.Hash()); err != nil {
548548
return fmt.Errorf("%w: failed to write acceptor tip key", err)
549549
}
550+
rawdb.WriteFinalizedBlockHash(batch, b.Hash())
550551
return nil
551552
}
552553

graft/subnet-evm/core/genesis.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,7 @@ func (g *Genesis) Commit(db ethdb.Database, triedb *triedb.Database) (*types.Blo
428428
rawdb.WriteCanonicalHash(batch, block.Hash(), block.NumberU64())
429429
rawdb.WriteHeadBlockHash(batch, block.Hash())
430430
rawdb.WriteHeadHeaderHash(batch, block.Hash())
431+
rawdb.WriteFinalizedBlockHash(batch, block.Hash())
431432
customrawdb.WriteChainConfig(batch, block.Hash(), config, params.GetExtra(config).UpgradeConfig)
432433
if err := batch.Write(); err != nil {
433434
return nil, fmt.Errorf("failed to write genesis block: %w", err)

vms/saevm/blocks/blockstest/BUILD.bazel

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ go_library(
2020
"//vms/saevm/saetest",
2121
"@com_github_ava_labs_libevm//common",
2222
"@com_github_ava_labs_libevm//core",
23-
"@com_github_ava_labs_libevm//core/state",
2423
"@com_github_ava_labs_libevm//core/types",
2524
"@com_github_ava_labs_libevm//ethdb",
2625
"@com_github_ava_labs_libevm//event",

vms/saevm/blocks/blockstest/blocks.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import (
1515

1616
"github.com/ava-labs/libevm/common"
1717
"github.com/ava-labs/libevm/core"
18-
"github.com/ava-labs/libevm/core/state"
1918
"github.com/ava-labs/libevm/core/types"
2019
"github.com/ava-labs/libevm/ethdb"
2120
"github.com/ava-labs/libevm/libevm/options"
@@ -133,10 +132,9 @@ func NewGenesis(tb testing.TB, db ethdb.Database, config *params.ChainConfig, al
133132
BaseFee: new(big.Int).SetUint64(conf.baseFee),
134133
}
135134

136-
tdb := state.NewDatabaseWithConfig(db, conf.tdbConfig).TrieDB()
137-
_, hash, err := core.SetupGenesisBlock(db, tdb, gen)
135+
tdb := triedb.NewDatabase(db, conf.tdbConfig)
136+
_, _, err := core.SetupGenesisBlock(db, tdb, gen)
138137
require.NoError(tb, err, "core.SetupGenesisBlock()")
139-
require.NoErrorf(tb, tdb.Commit(hash, true), "%T.Commit(core.SetupGenesisBlock(...))", tdb)
140138

141139
h := hookstest.NewStub(conf.gasTarget)
142140
xdb := saetest.NewExecutionResultsDB()

vms/saevm/cchain/genesis.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -172,21 +172,21 @@ var (
172172
// It verifies that the genesis is compatible with any previously setup genesis
173173
// state by checking the genesis block hash along with the rules used to execute
174174
// the head block.
175-
func (g *genesis) setup(db ethdb.Database, trieConfig *triedb.Config) (_ *types.Block, retErr error) {
175+
func (g *genesis) setup(db ethdb.Database, trieConfig *triedb.Config) (retErr error) {
176176
block, err := g.block()
177177
if err != nil {
178-
return nil, fmt.Errorf("constructing genesis block: %w", err)
178+
return fmt.Errorf("constructing genesis block: %w", err)
179179
}
180180

181181
// We can't exit early here. Even if the genesis block is on disk, the
182182
// genesis state might not be.
183183
hash := block.Hash()
184184
if prev := rawdb.ReadCanonicalHash(db, genesisNumber); prev == (common.Hash{}) {
185185
if err := writeGenesisBlock(db, block, g.Config); err != nil {
186-
return nil, fmt.Errorf("writing block: %w", err)
186+
return fmt.Errorf("writing block: %w", err)
187187
}
188188
} else if prev != hash {
189-
return nil, &core.GenesisMismatchError{
189+
return &core.GenesisMismatchError{
190190
Stored: prev,
191191
New: hash,
192192
}
@@ -197,18 +197,18 @@ func (g *genesis) setup(db ethdb.Database, trieConfig *triedb.Config) (_ *types.
197197
{
198198
prev := rawdb.ReadChainConfig(db, hash)
199199
if prev == nil {
200-
return nil, errNoStoredChainConfig
200+
return errNoStoredChainConfig
201201
}
202202
head := rawdb.ReadHeadHeader(db)
203203
if head == nil {
204-
return nil, errNoHeadHeader
204+
return errNoHeadHeader
205205
}
206206
height, timestamp := head.Number.Uint64(), head.Time
207207
// TODO(JonathanOppenheimer): coreth exposes a `skip-upgrade-check` config
208208
// that bypasses this compatibility check; we need to make such a check
209209
// unnecessary for the c-chain.
210210
if err := prev.CheckCompatible(g.Config, height, timestamp); err != nil {
211-
return nil, fmt.Errorf("incompatible chain config: %w", err)
211+
return fmt.Errorf("incompatible chain config: %w", err)
212212
}
213213
// We will be executing new blocks based on the new chain config, so we
214214
// need to keep it up-to-date in the database for the next restart.
@@ -224,10 +224,10 @@ func (g *genesis) setup(db ethdb.Database, trieConfig *triedb.Config) (_ *types.
224224
// the trie to determine if the genesis was previously initialized.
225225
if !tdb.Initialized(block.Root()) {
226226
if _, err := g.writeState(db, tdb); err != nil {
227-
return nil, fmt.Errorf("writing genesis state: %w", err)
227+
return fmt.Errorf("writing genesis state: %w", err)
228228
}
229229
}
230-
return block, nil
230+
return nil
231231
}
232232

233233
func writeGenesisBlock(db ethdb.Database, block *types.Block, config *ethparams.ChainConfig) error {

vms/saevm/cchain/genesis_test.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -616,12 +616,11 @@ func TestSetupGenesis(t *testing.T) {
616616
)
617617
require.NoError(t, err, "parseGenesis(initial)")
618618

619-
block, err := g.setup(db, trieConfig)
620-
require.NoErrorf(t, err, "%T.setup(initial)", g)
619+
require.NoErrorf(t, g.setup(db, trieConfig), "%T.setup(initial)", g)
621620

621+
block, err := g.block()
622+
require.NoErrorf(t, err, "%T.block()", g)
622623
genesisHash := block.Hash()
623-
require.Equal(t, genesisHash, rawdb.ReadCanonicalHash(db, 0), "rawdb.ReadCanonicalHash(initial)")
624-
625624
gotConfig := rawdb.ReadChainConfig(db, genesisHash)
626625
cmpBaseConfig := cmp.Options{
627626
cmpopts.IgnoreUnexported(corethparams.ChainConfig{}),
@@ -646,7 +645,7 @@ func TestSetupGenesis(t *testing.T) {
646645
)
647646
require.NoError(t, err, "parseGenesis(restart)")
648647

649-
block, err = g.setup(db, trieConfig)
648+
err = g.setup(db, trieConfig)
650649
if diff := testerr.Diff(err, tt.wantErr); diff != "" {
651650
t.Fatalf("%T.setup(restart) error (-want +got)\n%s", g, diff)
652651
}
@@ -655,7 +654,6 @@ func TestSetupGenesis(t *testing.T) {
655654
return
656655
}
657656

658-
require.Equal(t, genesisHash, block.Hash(), "%T.setup(restart).Hash()", g)
659657
gotConfig = rawdb.ReadChainConfig(db, genesisHash)
660658
if diff := cmp.Diff(g.Config, gotConfig, cmpBaseConfig); diff != "" {
661659
t.Errorf("stored base config after restart (-want +got)\n%s", diff)

vms/saevm/cchain/vm.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,7 @@ func (vm *VM) Initialize(
109109
vm.chainConfig = genesis.Config
110110

111111
saeConfig := userConfig.saeConfig(vm.now)
112-
genesisBlock, err := genesis.setup(ethDB, saeConfig.DBConfig.TrieDBConfig)
113-
if err != nil {
112+
if err := genesis.setup(ethDB, saeConfig.DBConfig.TrieDBConfig); err != nil {
114113
return fmt.Errorf("setting up genesis: %w", err)
115114
}
116115

@@ -133,7 +132,7 @@ func (vm *VM) Initialize(
133132
vm.now,
134133
userConfig.desired(),
135134
)
136-
vm.VM, err = sae.NewVM(ctx, hooks, saeConfig, snowCtx, vm.chainConfig, ethDB, genesisBlock, appSender)
135+
vm.VM, err = sae.NewVM(ctx, hooks, saeConfig, snowCtx, vm.chainConfig, ethDB, appSender)
137136
if err != nil {
138137
return fmt.Errorf("creating SAE VM: %w", err)
139138
}

vms/saevm/sae/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ go_library(
5353
"@com_github_ava_labs_libevm//common",
5454
"@com_github_ava_labs_libevm//core",
5555
"@com_github_ava_labs_libevm//core/rawdb",
56+
"@com_github_ava_labs_libevm//core/state",
5657
"@com_github_ava_labs_libevm//core/txpool",
5758
"@com_github_ava_labs_libevm//core/txpool/legacypool",
5859
"@com_github_ava_labs_libevm//core/types",

0 commit comments

Comments
 (0)