mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-07 05:24:29 +00:00
internal/ethapi: refactor func DoCall (#1586)
This commit is contained in:
parent
28c75fc213
commit
940aeb3ccd
1 changed files with 18 additions and 12 deletions
|
|
@ -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) {
|
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())
|
defer func(start time.Time) { log.Debug("Executing EVM call finished", "runtime", time.Since(start)) }(time.Now())
|
||||||
|
|
||||||
statedb, header, err := b.StateAndHeaderByNumberOrHash(ctx, blockNrOrHash)
|
state, header, err := b.StateAndHeaderByNumberOrHash(ctx, blockNrOrHash)
|
||||||
if statedb == nil || err != nil {
|
if state == nil || err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if header == nil {
|
if header == nil {
|
||||||
return nil, errors.New("nil header in DoCall")
|
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
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1142,14 +1154,8 @@ func DoCall(ctx context.Context, b Backend, args TransactionArgs, blockNrOrHash
|
||||||
// this makes sure resources are cleaned up.
|
// this makes sure resources are cleaned up.
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
block, err := b.BlockByNumberOrHash(ctx, blockNrOrHash)
|
header := block.Header()
|
||||||
if err != nil {
|
author, err := b.Engine().Author(header)
|
||||||
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())
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -1169,7 +1175,7 @@ func DoCall(ctx context.Context, b Backend, args TransactionArgs, blockNrOrHash
|
||||||
msg := args.ToMessage(b, blockCtx.BaseFee)
|
msg := args.ToMessage(b, blockCtx.BaseFee)
|
||||||
msg.BalanceTokenFee = new(big.Int).SetUint64(msg.GasLimit)
|
msg.BalanceTokenFee = new(big.Int).SetUint64(msg.GasLimit)
|
||||||
msg.BalanceTokenFee.Mul(msg.BalanceTokenFee, msg.GasPrice)
|
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 {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue