Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
11 changes: 10 additions & 1 deletion cl/spectest/spectest/suite.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,15 @@ import (
func RunCases(t *testing.T, app Appendix, machineImpl machine.Interface, root fs.FS) {
cases, err := ReadTestCases(root)
require.NoError(t, err, "reading cases")
excludedForks := map[string]struct{}{
"eip6110": {},
"eip7441": {},
"eip7594": {},
"eip7732": {},
"eip7805": {},
"gloas": {},
"whisk": {},
}
// prepare for gore.....
type (
K1 = string
Expand All @@ -40,7 +49,7 @@ func RunCases(t *testing.T, app Appendix, machineImpl machine.Interface, root fs
t.Run(s, func(t *testing.T) {
t.Parallel()
m.Range0(func(key string, value TestCase) bool {
if value.ForkPhaseName == "whisk" || value.ForkPhaseName == "eip7594" {
if _, ok := excludedForks[value.ForkPhaseName]; ok {
t.Skipf("skipping %s", value.ForkPhaseName)
return true
}
Expand Down
6 changes: 6 additions & 0 deletions cmd/integration/commands/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ var (
batchSizeStr string
domain string
reset, noCommit, squeeze, yes bool
useGevm bool
bucket string
datadirCli, toChaindata string
migration string
Expand Down Expand Up @@ -101,6 +102,10 @@ func withNoCommit(cmd *cobra.Command) {
cmd.Flags().BoolVar(&noCommit, "no-commit", false, "run everything in 1 transaction, but doesn't commit it")
}

func withUseGevm(cmd *cobra.Command) {
cmd.Flags().BoolVar(&useGevm, "use-gevm", false, "Use GEVM for block execution")
}

func withPruneTo(cmd *cobra.Command) {
cmd.Flags().Uint64Var(&pruneTo, "prune.to", 0, "how much blocks unwind on each iteration")
}
Expand Down Expand Up @@ -223,6 +228,7 @@ func withStageBase(cmd *cobra.Command) {
// withTraceFlags applies flags shared by exec-style tracing commands.
func withTraceFlags(cmd *cobra.Command) {
withNoCommit(cmd)
withUseGevm(cmd)
withBatchSize(cmd)
withTxTrace(cmd)
withWorkers(cmd)
Expand Down
3 changes: 2 additions & 1 deletion cmd/integration/commands/stages.go
Original file line number Diff line number Diff line change
Expand Up @@ -629,7 +629,7 @@ func stageSenders(db kv.TemporalRwDB, ctx context.Context, logger log.Logger) er

func stageExec(db kv.TemporalRwDB, ctx context.Context, logger log.Logger) error {
if _, ok := os.LookupEnv("EXEC3_PARALLEL"); !ok {
dbg.Exec3Parallel = true // default for integration tool
dbg.Exec3Parallel = !useGevm
}
if chainTipMode && noCommit {
return errors.New("--sync.mode.chaintip cannot work with --no-commit to be false")
Expand All @@ -640,6 +640,7 @@ func stageExec(db kv.TemporalRwDB, ctx context.Context, logger log.Logger) error
}

_, engine, vmConfig, sync := newSync(ctx, db, nil /* miningConfig */, logger)
vmConfig.UseGevm = useGevm
defer engine.Close()
must(sync.SetCurrentStage(stages.Execution))
if reset {
Expand Down
38 changes: 21 additions & 17 deletions execution/builder/exec.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,15 +88,6 @@ func StageBuilderExecCfg(

// execBlock builds a block by executing transactions from the txpool,
// then computes the state root from the accumulated domain writes.
//
// State changes flow through a single execution path:
// 1. IBS executes transactions using a NoopWriter / in-memory buffer (no per-tx writes to sd)
// 2. FinalizeBlockExecution applies the accumulated IBS changes to sd via the block assembler writer
// 3. ComputeCommitment(sd) produces the state root
// 4. sd writes are discarded when Builder.Build returns (tx is read-only, sd is never flushed)
//
// TODO:
// - resubmitAdjustCh - variable is not implemented
func execBlock(ctx context0.Context, sd *execctx.SharedDomains, tx kv.TemporalTx, executionAt uint64, cfg BuilderExecCfg, execCfg stagedsync.ExecuteBlockCfg, logger log.Logger) (err error) {
const logPrefix = "BuilderExec"

Expand Down Expand Up @@ -137,9 +128,12 @@ func execBlock(ctx context0.Context, sd *execctx.SharedDomains, tx kv.TemporalTx
filterWriter := state.NewWriter(filterSd.AsPutDel(filterMb), nil, txNum)
filterReader := state.NewReaderV3(filterSd.AsGetter(filterMb))

ibs := state.New(stateReader)
defer ibs.Release(false)
ibs.SetTxContext(current.Header.Number.Uint64(), -1)
var ibs *state.IntraBlockState
if !cfg.vmConfig.UseGevm {
ibs = state.New(stateReader)
defer ibs.Release(false)
ibs.SetTxContext(current.Header.Number.Uint64(), -1)
}

current.PayloadId = cfg.payloadId
ba := exec.NewBlockAssembler(exec.AssemblerCfg{
Expand All @@ -148,9 +142,13 @@ func execBlock(ctx context0.Context, sd *execctx.SharedDomains, tx kv.TemporalTx
BlockReader: cfg.blockReader,
ExperimentalBAL: execCfg.IsExperimentalBAL(),
}, current)
defer ba.Release()
ba.SetStateWriter(stateWriter)
if cfg.vmConfig.UseGevm {
ba.SetGevmStateReader(stateReader)
}

if ba.HasBAL() {
if ba.HasBAL() && ibs != nil {
ibs.SetVersionMap(state.NewVersionMap(nil))
}

Expand All @@ -163,12 +161,18 @@ func execBlock(ctx context0.Context, sd *execctx.SharedDomains, tx kv.TemporalTx
return execCfg.BlockReader().Header(ctx, tx, hash, number)
}

if err := ba.Initialize(ibs, tx, logger); err != nil {
return err
}

coinbase := accounts.InternAddress(cfg.builderState.BuilderConfig.Etherbase)

if cfg.vmConfig.UseGevm {
if err := ba.InitializeGevm(getHeader, coinbase); err != nil {
return err
}
} else {
if err := ba.Initialize(ibs, tx, logger); err != nil {
return err
}
}

yielded := mapset.NewSet[[32]byte]()

interrupt := cfg.interrupt
Expand Down
2 changes: 1 addition & 1 deletion execution/commitment/commitmentdb/commitment_context.go
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ func (sdc *SharedDomainsCommitmentContext) ComputeCommitment(ctx context.Context
if took > 0 {
keysPerSec = uint64(float64(updateCount) / took.Seconds())
}
log.Debug("[commitment] processed", "block", blockNum, "txNum", txNum, "keys", common.PrettyCounter(updateCount), "keys/s", common.PrettyCounter(keysPerSec), "mode", sdc.updates.Mode(), "spent", took, "rootHash", hex.EncodeToString(rootHash))
log.Info("[commitment] processed", "block", blockNum, "txNum", txNum, "keys", common.PrettyCounter(updateCount), "keys/s", common.PrettyCounter(keysPerSec), "mode", sdc.updates.Mode(), "spent", took, "rootHash", hex.EncodeToString(rootHash))
}()
if updateCount == 0 {
rootHash, err = sdc.patriciaTrie.RootHash()
Expand Down
Loading