mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-24 21:56:43 +00:00
eth/tracers: lookup EIP7702 delegation code
Signed-off-by: jsvisa <delweng@gmail.com>
This commit is contained in:
parent
b62c0c67fa
commit
041b52b00a
1 changed files with 23 additions and 14 deletions
|
|
@ -61,15 +61,16 @@ type accountMarshaling struct {
|
|||
}
|
||||
|
||||
type prestateTracer struct {
|
||||
env *tracing.VMContext
|
||||
pre stateMap
|
||||
post stateMap
|
||||
to common.Address
|
||||
config prestateTracerConfig
|
||||
interrupt atomic.Bool // Atomic flag to signal execution interruption
|
||||
reason error // Textual reason for the interruption
|
||||
created map[common.Address]bool
|
||||
deleted map[common.Address]bool
|
||||
env *tracing.VMContext
|
||||
pre stateMap
|
||||
post stateMap
|
||||
to common.Address
|
||||
config prestateTracerConfig
|
||||
chainConfig *params.ChainConfig
|
||||
interrupt atomic.Bool // Atomic flag to signal execution interruption
|
||||
reason error // Textual reason for the interruption
|
||||
created map[common.Address]bool
|
||||
deleted map[common.Address]bool
|
||||
}
|
||||
|
||||
type prestateTracerConfig struct {
|
||||
|
|
@ -90,11 +91,12 @@ func newPrestateTracer(ctx *tracers.Context, cfg json.RawMessage, chainConfig *p
|
|||
return nil, errors.New("cannot use diffMode with includeEmpty")
|
||||
}
|
||||
t := &prestateTracer{
|
||||
pre: stateMap{},
|
||||
post: stateMap{},
|
||||
config: config,
|
||||
created: make(map[common.Address]bool),
|
||||
deleted: make(map[common.Address]bool),
|
||||
pre: stateMap{},
|
||||
post: stateMap{},
|
||||
config: config,
|
||||
chainConfig: chainConfig,
|
||||
created: make(map[common.Address]bool),
|
||||
deleted: make(map[common.Address]bool),
|
||||
}
|
||||
return &tracers.Tracer{
|
||||
Hooks: &tracing.Hooks{
|
||||
|
|
@ -133,6 +135,13 @@ func (t *prestateTracer) OnOpcode(pc uint64, opcode byte, gas, cost uint64, scop
|
|||
case stackLen >= 5 && (op == vm.DELEGATECALL || op == vm.CALL || op == vm.STATICCALL || op == vm.CALLCODE):
|
||||
addr := common.Address(stackData[stackLen-2].Bytes20())
|
||||
t.lookupAccount(addr)
|
||||
// Lookup a delegation target
|
||||
if t.chainConfig.IsPrague(t.env.BlockNumber, t.env.Time) {
|
||||
code := t.env.StateDB.GetCode(addr)
|
||||
if target, ok := types.ParseDelegation(code); ok {
|
||||
t.lookupAccount(target)
|
||||
}
|
||||
}
|
||||
case op == vm.CREATE:
|
||||
nonce := t.env.StateDB.GetNonce(caller)
|
||||
addr := crypto.CreateAddress(caller, nonce)
|
||||
|
|
|
|||
Loading…
Reference in a new issue