Skip to content

Commit be52b6a

Browse files
committed
gas dimension tracing: debug issues with access list tracer
1 parent d25b158 commit be52b6a

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

eth/tracers/logger/access_list_tracer.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package logger
1818

1919
import (
20+
"fmt"
2021
"maps"
2122

2223
"github.com/ethereum/go-ethereum/common"
@@ -116,6 +117,7 @@ type AccessListTracer struct {
116117
// An optional AccessList can be specified to occupy slots and addresses in
117118
// the resulting accesslist.
118119
func NewAccessListTracer(acl types.AccessList, addressesToExclude map[common.Address]struct{}) *AccessListTracer {
120+
fmt.Println("new access list tracer", acl, addressesToExclude)
119121
list := newAccessList()
120122
for _, al := range acl {
121123
if _, ok := addressesToExclude[al.Address]; !ok {
@@ -144,17 +146,20 @@ func (a *AccessListTracer) OnOpcode(pc uint64, opcode byte, gas, cost uint64, sc
144146
op := vm.OpCode(opcode)
145147
if (op == vm.SLOAD || op == vm.SSTORE) && stackLen >= 1 {
146148
slot := common.Hash(stackData[stackLen-1].Bytes32())
149+
fmt.Println("adding slot to access list tracer", slot, scope.Address())
147150
a.list.addSlot(scope.Address(), slot)
148151
}
149152
if (op == vm.EXTCODECOPY || op == vm.EXTCODEHASH || op == vm.EXTCODESIZE || op == vm.BALANCE || op == vm.SELFDESTRUCT) && stackLen >= 1 {
150153
addr := common.Address(stackData[stackLen-1].Bytes20())
151154
if _, ok := a.excl[addr]; !ok {
155+
fmt.Println("adding norm address to access list tracer", addr)
152156
a.list.addAddress(addr)
153157
}
154158
}
155159
if (op == vm.DELEGATECALL || op == vm.CALL || op == vm.STATICCALL || op == vm.CALLCODE) && stackLen >= 5 {
156160
addr := common.Address(stackData[stackLen-2].Bytes20())
157161
if _, ok := a.excl[addr]; !ok {
162+
fmt.Println("adding call address to access list tracer", addr)
158163
a.list.addAddress(addr)
159164
}
160165
}

eth/tracers/native/base_gas_dimension_tracer.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,13 +85,12 @@ func NewBaseGasDimensionTracer(cfg json.RawMessage, chainConfig *params.ChainCon
8585
}
8686
debug = config.Debug
8787
}
88-
accessListTracer := logger.NewAccessListTracer(types.AccessList{}, map[common.Address]struct{}{})
8988
return &BaseGasDimensionTracer{
9089
debug: debug,
9190
chainConfig: chainConfig,
9291
depth: 1,
9392
refundAccumulated: 0,
94-
accessListTracer: accessListTracer,
93+
accessListTracer: nil,
9594
env: nil,
9695
txHash: common.Hash{},
9796
gasUsed: 0,
@@ -301,6 +300,16 @@ func (t *BaseGasDimensionTracer) OnTxStart(env *tracing.VMContext, tx *types.Tra
301300
t.rootIsPrecompile = slices.Contains(precompileAddressList, *tx.To())
302301
t.rootIsStylus = isStylusContract(t, *tx.To())
303302
}
303+
// addressesToExclude is supposed to contain sender, receiver, precompiles and valid authorizations
304+
addressesToExclude := map[common.Address]struct{}{from: {}, *tx.To(): {}}
305+
for _, addr := range precompileAddressList {
306+
addressesToExclude[addr] = struct{}{}
307+
}
308+
addressesToExclude[from] = struct{}{}
309+
if tx.To() != nil {
310+
addressesToExclude[*tx.To()] = struct{}{}
311+
}
312+
t.accessListTracer = logger.NewAccessListTracer(tx.AccessList(), addressesToExclude)
304313
}
305314

306315
// OnTxEnd handles transaction end

0 commit comments

Comments
 (0)