Skip to content

Commit 0d841e4

Browse files
Merge branch 'master' into cherry-pick-sendTxArgs
2 parents b5b43a0 + b14a09a commit 0d841e4

File tree

1 file changed

+7
-8
lines changed

1 file changed

+7
-8
lines changed

arbitrum/apibackend.go

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -452,17 +452,16 @@ func (a *APIBackend) BlockByNumberOrHash(ctx context.Context, blockNrOrHash rpc.
452452
return nil, errors.New("invalid arguments; neither block nor hash specified")
453453
}
454454

455-
func (a *APIBackend) stateAndHeaderFromHeader(ctx context.Context, header *types.Header, err error) (*state.StateDB, *types.Header, error) {
455+
func StateAndHeaderFromHeader(ctx context.Context, chainDb ethdb.Database, bc *core.BlockChain, maxRecreateStateDepth int64, header *types.Header, err error) (*state.StateDB, *types.Header, error) {
456456
if err != nil {
457457
return nil, header, err
458458
}
459459
if header == nil {
460460
return nil, nil, errors.New("header not found")
461461
}
462-
if !a.BlockChain().Config().IsArbitrumNitro(header.Number) {
462+
if !bc.Config().IsArbitrumNitro(header.Number) {
463463
return nil, header, types.ErrUseFallback
464464
}
465-
bc := a.BlockChain()
466465
stateFor := func(db state.Database, snapshots *snapshot.Tree) func(header *types.Header) (*state.StateDB, StateReleaseFunc, error) {
467466
return func(header *types.Header) (*state.StateDB, StateReleaseFunc, error) {
468467
if header.Root != (common.Hash{}) {
@@ -495,8 +494,8 @@ func (a *APIBackend) stateAndHeaderFromHeader(ctx context.Context, header *types
495494
// note: triedb cleans cache is disabled in trie.HashDefaults
496495
// note: only states committed to diskdb can be found as we're creating new triedb
497496
// note: snapshots are not used here
498-
ephemeral := state.NewDatabaseWithConfig(a.ChainDb(), trie.HashDefaults)
499-
lastState, lastHeader, lastStateRelease, err := FindLastAvailableState(ctx, bc, stateFor(ephemeral, nil), header, nil, a.b.config.MaxRecreateStateDepth)
497+
ephemeral := state.NewDatabaseWithConfig(chainDb, trie.HashDefaults)
498+
lastState, lastHeader, lastStateRelease, err := FindLastAvailableState(ctx, bc, stateFor(ephemeral, nil), header, nil, maxRecreateStateDepth)
500499
if err != nil {
501500
return nil, nil, err
502501
}
@@ -521,7 +520,7 @@ func (a *APIBackend) stateAndHeaderFromHeader(ctx context.Context, header *types
521520
reexec := uint64(0)
522521
checkLive := false
523522
preferDisk := false // preferDisk is ignored in this case
524-
statedb, release, err := eth.NewArbEthereum(a.b.arb.BlockChain(), a.ChainDb()).StateAtBlock(ctx, targetBlock, reexec, lastState, lastBlock, checkLive, preferDisk)
523+
statedb, release, err := eth.NewArbEthereum(bc, chainDb).StateAtBlock(ctx, targetBlock, reexec, lastState, lastBlock, checkLive, preferDisk)
525524
if err != nil {
526525
return nil, nil, fmt.Errorf("failed to recreate state: %w", err)
527526
}
@@ -536,7 +535,7 @@ func (a *APIBackend) stateAndHeaderFromHeader(ctx context.Context, header *types
536535

537536
func (a *APIBackend) StateAndHeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*state.StateDB, *types.Header, error) {
538537
header, err := a.HeaderByNumber(ctx, number)
539-
return a.stateAndHeaderFromHeader(ctx, header, err)
538+
return StateAndHeaderFromHeader(ctx, a.ChainDb(), a.b.arb.BlockChain(), a.b.config.MaxRecreateStateDepth, header, err)
540539
}
541540

542541
func (a *APIBackend) StateAndHeaderByNumberOrHash(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (*state.StateDB, *types.Header, error) {
@@ -547,7 +546,7 @@ func (a *APIBackend) StateAndHeaderByNumberOrHash(ctx context.Context, blockNrOr
547546
if ishash && header != nil && header.Number.Cmp(bc.CurrentBlock().Number) > 0 && bc.GetCanonicalHash(header.Number.Uint64()) != hash {
548547
return nil, nil, errors.New("requested block ahead of current block and the hash is not currently canonical")
549548
}
550-
return a.stateAndHeaderFromHeader(ctx, header, err)
549+
return StateAndHeaderFromHeader(ctx, a.ChainDb(), a.b.arb.BlockChain(), a.b.config.MaxRecreateStateDepth, header, err)
551550
}
552551

553552
func (a *APIBackend) StateAtBlock(ctx context.Context, block *types.Block, reexec uint64, base *state.StateDB, checkLive bool, preferDisk bool) (statedb *state.StateDB, release tracers.StateReleaseFunc, err error) {

0 commit comments

Comments
 (0)