mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-27 15:16:43 +00:00
Add error handling in Apply
This commit is contained in:
parent
2a99b5532d
commit
9dae1bab9b
4 changed files with 19 additions and 5 deletions
|
|
@ -223,7 +223,9 @@ func run(ctx context.Context, call *core.Message, opts *Options) (*core.Executio
|
|||
dirtyState = opts.State.Copy()
|
||||
)
|
||||
if opts.BlockOverrides != nil {
|
||||
opts.BlockOverrides.Apply(&evmContext)
|
||||
if err := opts.BlockOverrides.Apply(&evmContext); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
// Lower the basefee to 0 to avoid breaking EVM
|
||||
// invariants (basefee < feecap).
|
||||
|
|
|
|||
|
|
@ -950,7 +950,9 @@ func (api *API) TraceCall(ctx context.Context, args ethapi.TransactionArgs, bloc
|
|||
vmctx := core.NewEVMBlockContext(block.Header(), api.chainContext(ctx), nil)
|
||||
// Apply the customization rules if required.
|
||||
if config != nil {
|
||||
config.BlockOverrides.Apply(&vmctx)
|
||||
if overrideErr := config.BlockOverrides.Apply(&vmctx); overrideErr != nil {
|
||||
return nil, overrideErr
|
||||
}
|
||||
rules := api.backend.ChainConfig().Rules(vmctx.BlockNumber, vmctx.Random != nil, vmctx.Time)
|
||||
|
||||
precompiles = vm.ActivePrecompiledContracts(rules)
|
||||
|
|
|
|||
|
|
@ -660,7 +660,9 @@ func (context *ChainContext) Config() *params.ChainConfig {
|
|||
func doCall(ctx context.Context, b Backend, args TransactionArgs, state *state.StateDB, header *types.Header, overrides *override.StateOverride, blockOverrides *override.BlockOverrides, timeout time.Duration, globalGasCap uint64) (*core.ExecutionResult, error) {
|
||||
blockCtx := core.NewEVMBlockContext(header, NewChainContext(ctx, b), nil)
|
||||
if blockOverrides != nil {
|
||||
blockOverrides.Apply(&blockCtx)
|
||||
if err := blockOverrides.Apply(&blockCtx); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
rules := b.ChainConfig().Rules(blockCtx.BlockNumber, blockCtx.Random != nil, blockCtx.Time)
|
||||
precompiles := vm.ActivePrecompiledContracts(rules)
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
package override
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"math/big"
|
||||
|
||||
|
|
@ -133,9 +134,15 @@ type BlockOverrides struct {
|
|||
}
|
||||
|
||||
// Apply overrides the given header fields into the given block context.
|
||||
func (o *BlockOverrides) Apply(blockCtx *vm.BlockContext) {
|
||||
func (o *BlockOverrides) Apply(blockCtx *vm.BlockContext) error {
|
||||
if o == nil {
|
||||
return
|
||||
return nil
|
||||
}
|
||||
if o.BeaconRoot != nil {
|
||||
return errors.New(`"beaconRoot" is not supported for this RPC method`)
|
||||
}
|
||||
if o.Withdrawals != nil {
|
||||
return errors.New(`"withdrawals" is not supported for this RPC method`)
|
||||
}
|
||||
if o.Number != nil {
|
||||
blockCtx.BlockNumber = o.Number.ToInt()
|
||||
|
|
@ -161,6 +168,7 @@ func (o *BlockOverrides) Apply(blockCtx *vm.BlockContext) {
|
|||
if o.BlobBaseFee != nil {
|
||||
blockCtx.BlobBaseFee = o.BlobBaseFee.ToInt()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// MakeHeader returns a new header object with the overridden
|
||||
|
|
|
|||
Loading…
Reference in a new issue