internal/ethapi: refactor func DoCall (#1586)

This commit is contained in:
Daniel Liu 2025-10-08 12:36:35 +08:00 committed by GitHub
parent 28c75fc213
commit 940aeb3ccd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1119,14 +1119,26 @@ func (context *ChainContext) GetHeader(hash common.Hash, number uint64) *types.H
func DoCall(ctx context.Context, b Backend, args TransactionArgs, blockNrOrHash rpc.BlockNumberOrHash, overrides *StateOverride, blockOverrides *BlockOverrides, timeout time.Duration, globalGasCap uint64) (*core.ExecutionResult, error) {
defer func(start time.Time) { log.Debug("Executing EVM call finished", "runtime", time.Since(start)) }(time.Now())
statedb, header, err := b.StateAndHeaderByNumberOrHash(ctx, blockNrOrHash)
if statedb == nil || err != nil {
state, header, err := b.StateAndHeaderByNumberOrHash(ctx, blockNrOrHash)
if state == nil || err != nil {
return nil, err
}
if header == nil {
return nil, errors.New("nil header in DoCall")
}
if err := overrides.Apply(statedb); err != nil {
block, err := b.BlockByNumberOrHash(ctx, blockNrOrHash)
if err != nil {
return nil, err
}
if block == nil {
return nil, fmt.Errorf("nil block in DoCall: number=%d, hash=%s", header.Number.Uint64(), header.Hash().Hex())
}
return doCall(ctx, b, args, state, block, overrides, blockOverrides, timeout, globalGasCap)
}
func doCall(ctx context.Context, b Backend, args TransactionArgs, state *state.StateDB, block *types.Block, overrides *StateOverride, blockOverrides *BlockOverrides, timeout time.Duration, globalGasCap uint64) (*core.ExecutionResult, error) {
if err := overrides.Apply(state); err != nil {
return nil, err
}
@ -1142,14 +1154,8 @@ func DoCall(ctx context.Context, b Backend, args TransactionArgs, blockNrOrHash
// this makes sure resources are cleaned up.
defer cancel()
block, err := b.BlockByNumberOrHash(ctx, blockNrOrHash)
if err != nil {
return nil, err
}
if block == nil {
return nil, fmt.Errorf("nil block in DoCall: number=%d, hash=%s", header.Number.Uint64(), header.Hash().Hex())
}
author, err := b.Engine().Author(block.Header())
header := block.Header()
author, err := b.Engine().Author(header)
if err != nil {
return nil, err
}
@ -1169,7 +1175,7 @@ func DoCall(ctx context.Context, b Backend, args TransactionArgs, blockNrOrHash
msg := args.ToMessage(b, blockCtx.BaseFee)
msg.BalanceTokenFee = new(big.Int).SetUint64(msg.GasLimit)
msg.BalanceTokenFee.Mul(msg.BalanceTokenFee, msg.GasPrice)
evm, vmError, err := b.GetEVM(ctx, msg, statedb, XDCxState, header, &vm.Config{NoBaseFee: true}, &blockCtx)
evm, vmError, err := b.GetEVM(ctx, msg, state, XDCxState, header, &vm.Config{NoBaseFee: true}, &blockCtx)
if err != nil {
return nil, err
}