Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
41af42e9
Unverified
Commit
41af42e9
authored
Mar 07, 2023
by
Sina Mahmoodi
Committed by
GitHub
Mar 07, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
eth/tracers/native: set created address to nil in case of failure (#26779)
Fixes #26073
parent
cb1f6bdb
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
35 additions
and
35 deletions
+35
-35
calltrace_test.go
eth/tracers/internal/tracetest/calltrace_test.go
+1
-1
inner_create_oog_outer_throw.json
...st/testdata/call_tracer/inner_create_oog_outer_throw.json
+0
-1
inner_revert_reason.json
...l/tracetest/testdata/call_tracer/inner_revert_reason.json
+0
-1
call.go
eth/tracers/native/call.go
+16
-14
call_flat.go
eth/tracers/native/call_flat.go
+4
-4
gen_callframe_json.go
eth/tracers/native/gen_callframe_json.go
+14
-14
No files found.
eth/tracers/internal/tracetest/calltrace_test.go
View file @
41af42e9
...
@@ -58,7 +58,7 @@ type callTrace struct {
...
@@ -58,7 +58,7 @@ type callTrace struct {
From
common
.
Address
`json:"from"`
From
common
.
Address
`json:"from"`
Gas
*
hexutil
.
Uint64
`json:"gas"`
Gas
*
hexutil
.
Uint64
`json:"gas"`
GasUsed
*
hexutil
.
Uint64
`json:"gasUsed"`
GasUsed
*
hexutil
.
Uint64
`json:"gasUsed"`
To
common
.
Address
`json:"to,omitempty"`
To
*
common
.
Address
`json:"to,omitempty"`
Input
hexutil
.
Bytes
`json:"input"`
Input
hexutil
.
Bytes
`json:"input"`
Output
hexutil
.
Bytes
`json:"output,omitempty"`
Output
hexutil
.
Bytes
`json:"output,omitempty"`
Error
string
`json:"error,omitempty"`
Error
string
`json:"error,omitempty"`
...
...
eth/tracers/internal/tracetest/testdata/call_tracer/inner_create_oog_outer_throw.json
View file @
41af42e9
This diff is collapsed.
Click to expand it.
eth/tracers/internal/tracetest/testdata/call_tracer/inner_revert_reason.json
View file @
41af42e9
...
@@ -50,7 +50,6 @@
...
@@ -50,7 +50,6 @@
"input"
:
"0x02f9029d82053980849502f90085010c388d00832dc6c08080b90241608060405234801561001057600080fd5b50600060405161001f906100a2565b604051809103906000f08015801561003b573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff1663c04062266040518163ffffffff1660e01b815260040160006040518083038186803b15801561008457600080fd5b505afa158015610098573d6000803e3d6000fd5b50505050506100af565b610145806100fc83390190565b603f806100bd6000396000f3fe6080604052600080fdfea264697066735822122077f7dbd3450d6e817079cf3fe27107de5768bb3163a402b94e2206b468eb025664736f6c63430008070033608060405234801561001057600080fd5b50610125806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063c040622614602d575b600080fd5b60336035565b005b60036002116076576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401606d906097565b60405180910390fd5b565b6000608360128360b5565b9150608c8260c6565b602082019050919050565b6000602082019050818103600083015260ae816078565b9050919050565b600082825260208201905092915050565b7f546869732063616c6c6564206661696c6564000000000000000000000000000060008201525056fea264697066735822122033f8d92e29d467e5ea08d0024eab0b36b86b8cdb3542c6e89dbaabeb8ffaa42064736f6c63430008070033c001a07566181071cabaf58b70fc41557eb813bfc7a24f5c58554e7fed0bf7c031f169a0420af50b5fe791a4d839e181a676db5250b415dfb35cb85d544db7a1475ae2cc"
,
"input"
:
"0x02f9029d82053980849502f90085010c388d00832dc6c08080b90241608060405234801561001057600080fd5b50600060405161001f906100a2565b604051809103906000f08015801561003b573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff1663c04062266040518163ffffffff1660e01b815260040160006040518083038186803b15801561008457600080fd5b505afa158015610098573d6000803e3d6000fd5b50505050506100af565b610145806100fc83390190565b603f806100bd6000396000f3fe6080604052600080fdfea264697066735822122077f7dbd3450d6e817079cf3fe27107de5768bb3163a402b94e2206b468eb025664736f6c63430008070033608060405234801561001057600080fd5b50610125806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063c040622614602d575b600080fd5b60336035565b005b60036002116076576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401606d906097565b60405180910390fd5b565b6000608360128360b5565b9150608c8260c6565b602082019050919050565b6000602082019050818103600083015260ae816078565b9050919050565b600082825260208201905092915050565b7f546869732063616c6c6564206661696c6564000000000000000000000000000060008201525056fea264697066735822122033f8d92e29d467e5ea08d0024eab0b36b86b8cdb3542c6e89dbaabeb8ffaa42064736f6c63430008070033c001a07566181071cabaf58b70fc41557eb813bfc7a24f5c58554e7fed0bf7c031f169a0420af50b5fe791a4d839e181a676db5250b415dfb35cb85d544db7a1475ae2cc"
,
"result"
:
{
"result"
:
{
"from"
:
"0x3623191d4ccfbbdf09e8ebf6382a1f8257417bc1"
,
"from"
:
"0x3623191d4ccfbbdf09e8ebf6382a1f8257417bc1"
,
"to"
:
"0x0000000000000000000000000000000000000000"
,
"gas"
:
"0x2cd774"
,
"gas"
:
"0x2cd774"
,
"gasUsed"
:
"0x25590"
,
"gasUsed"
:
"0x25590"
,
"input"
:
"0x608060405234801561001057600080fd5b50600060405161001f906100a2565b604051809103906000f08015801561003b573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff1663c04062266040518163ffffffff1660e01b815260040160006040518083038186803b15801561008457600080fd5b505afa158015610098573d6000803e3d6000fd5b50505050506100af565b610145806100fc83390190565b603f806100bd6000396000f3fe6080604052600080fdfea264697066735822122077f7dbd3450d6e817079cf3fe27107de5768bb3163a402b94e2206b468eb025664736f6c63430008070033608060405234801561001057600080fd5b50610125806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063c040622614602d575b600080fd5b60336035565b005b60036002116076576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401606d906097565b60405180910390fd5b565b6000608360128360b5565b9150608c8260c6565b602082019050919050565b6000602082019050818103600083015260ae816078565b9050919050565b600082825260208201905092915050565b7f546869732063616c6c6564206661696c6564000000000000000000000000000060008201525056fea264697066735822122033f8d92e29d467e5ea08d0024eab0b36b86b8cdb3542c6e89dbaabeb8ffaa42064736f6c63430008070033"
,
"input"
:
"0x608060405234801561001057600080fd5b50600060405161001f906100a2565b604051809103906000f08015801561003b573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff1663c04062266040518163ffffffff1660e01b815260040160006040518083038186803b15801561008457600080fd5b505afa158015610098573d6000803e3d6000fd5b50505050506100af565b610145806100fc83390190565b603f806100bd6000396000f3fe6080604052600080fdfea264697066735822122077f7dbd3450d6e817079cf3fe27107de5768bb3163a402b94e2206b468eb025664736f6c63430008070033608060405234801561001057600080fd5b50610125806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063c040622614602d575b600080fd5b60336035565b005b60036002116076576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401606d906097565b60405180910390fd5b565b6000608360128360b5565b9150608c8260c6565b602082019050919050565b6000602082019050818103600083015260ae816078565b9050919050565b600082825260208201905092915050565b7f546869732063616c6c6564206661696c6564000000000000000000000000000060008201525056fea264697066735822122033f8d92e29d467e5ea08d0024eab0b36b86b8cdb3542c6e89dbaabeb8ffaa42064736f6c63430008070033"
,
...
...
eth/tracers/native/call.go
View file @
41af42e9
...
@@ -42,17 +42,17 @@ type callLog struct {
...
@@ -42,17 +42,17 @@ type callLog struct {
}
}
type
callFrame
struct
{
type
callFrame
struct
{
Type
vm
.
OpCode
`json:"-"`
Type
vm
.
OpCode
`json:"-"`
From
common
.
Address
`json:"from"`
From
common
.
Address
`json:"from"`
Gas
uint64
`json:"gas"`
Gas
uint64
`json:"gas"`
GasUsed
uint64
`json:"gasUsed"`
GasUsed
uint64
`json:"gasUsed"`
To
common
.
Address
`json:"to,omitempty" rlp:"optional"`
To
*
common
.
Address
`json:"to,omitempty" rlp:"optional"`
Input
[]
byte
`json:"input" rlp:"optional"`
Input
[]
byte
`json:"input" rlp:"optional"`
Output
[]
byte
`json:"output,omitempty" rlp:"optional"`
Output
[]
byte
`json:"output,omitempty" rlp:"optional"`
Error
string
`json:"error,omitempty" rlp:"optional"`
Error
string
`json:"error,omitempty" rlp:"optional"`
RevertReason
string
`json:"revertReason,omitempty"`
RevertReason
string
`json:"revertReason,omitempty"`
Calls
[]
callFrame
`json:"calls,omitempty" rlp:"optional"`
Calls
[]
callFrame
`json:"calls,omitempty" rlp:"optional"`
Logs
[]
callLog
`json:"logs,omitempty" rlp:"optional"`
Logs
[]
callLog
`json:"logs,omitempty" rlp:"optional"`
// Placed at end on purpose. The RLP will be decoded to 0 instead of
// Placed at end on purpose. The RLP will be decoded to 0 instead of
// nil if there are non-empty elements after in the struct.
// nil if there are non-empty elements after in the struct.
Value
*
big
.
Int
`json:"value,omitempty" rlp:"optional"`
Value
*
big
.
Int
`json:"value,omitempty" rlp:"optional"`
...
@@ -74,7 +74,7 @@ func (f *callFrame) processOutput(output []byte, err error) {
...
@@ -74,7 +74,7 @@ func (f *callFrame) processOutput(output []byte, err error) {
}
}
f
.
Error
=
err
.
Error
()
f
.
Error
=
err
.
Error
()
if
f
.
Type
==
vm
.
CREATE
||
f
.
Type
==
vm
.
CREATE2
{
if
f
.
Type
==
vm
.
CREATE
||
f
.
Type
==
vm
.
CREATE2
{
f
.
To
=
common
.
Address
{}
f
.
To
=
nil
}
}
if
!
errors
.
Is
(
err
,
vm
.
ErrExecutionReverted
)
||
len
(
output
)
==
0
{
if
!
errors
.
Is
(
err
,
vm
.
ErrExecutionReverted
)
||
len
(
output
)
==
0
{
return
return
...
@@ -127,10 +127,11 @@ func newCallTracer(ctx *tracers.Context, cfg json.RawMessage) (tracers.Tracer, e
...
@@ -127,10 +127,11 @@ func newCallTracer(ctx *tracers.Context, cfg json.RawMessage) (tracers.Tracer, e
// CaptureStart implements the EVMLogger interface to initialize the tracing operation.
// CaptureStart implements the EVMLogger interface to initialize the tracing operation.
func
(
t
*
callTracer
)
CaptureStart
(
env
*
vm
.
EVM
,
from
common
.
Address
,
to
common
.
Address
,
create
bool
,
input
[]
byte
,
gas
uint64
,
value
*
big
.
Int
)
{
func
(
t
*
callTracer
)
CaptureStart
(
env
*
vm
.
EVM
,
from
common
.
Address
,
to
common
.
Address
,
create
bool
,
input
[]
byte
,
gas
uint64
,
value
*
big
.
Int
)
{
toCopy
:=
to
t
.
callstack
[
0
]
=
callFrame
{
t
.
callstack
[
0
]
=
callFrame
{
Type
:
vm
.
CALL
,
Type
:
vm
.
CALL
,
From
:
from
,
From
:
from
,
To
:
to
,
To
:
&
toCopy
,
Input
:
common
.
CopyBytes
(
input
),
Input
:
common
.
CopyBytes
(
input
),
Gas
:
gas
,
Gas
:
gas
,
Value
:
value
,
Value
:
value
,
...
@@ -191,10 +192,11 @@ func (t *callTracer) CaptureEnter(typ vm.OpCode, from common.Address, to common.
...
@@ -191,10 +192,11 @@ func (t *callTracer) CaptureEnter(typ vm.OpCode, from common.Address, to common.
return
return
}
}
toCopy
:=
to
call
:=
callFrame
{
call
:=
callFrame
{
Type
:
typ
,
Type
:
typ
,
From
:
from
,
From
:
from
,
To
:
to
,
To
:
&
toCopy
,
Input
:
common
.
CopyBytes
(
input
),
Input
:
common
.
CopyBytes
(
input
),
Gas
:
gas
,
Gas
:
gas
,
Value
:
value
,
Value
:
value
,
...
...
eth/tracers/native/call_flat.go
View file @
41af42e9
...
@@ -193,7 +193,7 @@ func (t *flatCallTracer) CaptureExit(output []byte, gasUsed uint64, err error) {
...
@@ -193,7 +193,7 @@ func (t *flatCallTracer) CaptureExit(output []byte, gasUsed uint64, err error) {
to
=
call
.
To
to
=
call
.
To
)
)
if
typ
==
vm
.
CALL
||
typ
==
vm
.
STATICCALL
{
if
typ
==
vm
.
CALL
||
typ
==
vm
.
STATICCALL
{
if
t
.
isPrecompiled
(
to
)
{
if
t
.
isPrecompiled
(
*
to
)
{
t
.
tracer
.
callstack
[
len
(
t
.
tracer
.
callstack
)
-
1
]
.
Calls
=
parent
.
Calls
[
:
len
(
parent
.
Calls
)
-
1
]
t
.
tracer
.
callstack
[
len
(
t
.
tracer
.
callstack
)
-
1
]
.
Calls
=
parent
.
Calls
[
:
len
(
parent
.
Calls
)
-
1
]
}
}
}
}
...
@@ -299,7 +299,7 @@ func newFlatCreate(input *callFrame) *flatCallFrame {
...
@@ -299,7 +299,7 @@ func newFlatCreate(input *callFrame) *flatCallFrame {
},
},
Result
:
&
flatCallResult
{
Result
:
&
flatCallResult
{
GasUsed
:
&
input
.
GasUsed
,
GasUsed
:
&
input
.
GasUsed
,
Address
:
&
input
.
To
,
Address
:
input
.
To
,
Code
:
&
resultCode
,
Code
:
&
resultCode
,
},
},
}
}
...
@@ -315,7 +315,7 @@ func newFlatCall(input *callFrame) *flatCallFrame {
...
@@ -315,7 +315,7 @@ func newFlatCall(input *callFrame) *flatCallFrame {
Type
:
strings
.
ToLower
(
vm
.
CALL
.
String
()),
Type
:
strings
.
ToLower
(
vm
.
CALL
.
String
()),
Action
:
flatCallAction
{
Action
:
flatCallAction
{
From
:
&
input
.
From
,
From
:
&
input
.
From
,
To
:
&
input
.
To
,
To
:
input
.
To
,
Gas
:
&
input
.
Gas
,
Gas
:
&
input
.
Gas
,
Value
:
input
.
Value
,
Value
:
input
.
Value
,
CallType
:
strings
.
ToLower
(
input
.
Type
.
String
()),
CallType
:
strings
.
ToLower
(
input
.
Type
.
String
()),
...
@@ -334,7 +334,7 @@ func newFlatSuicide(input *callFrame) *flatCallFrame {
...
@@ -334,7 +334,7 @@ func newFlatSuicide(input *callFrame) *flatCallFrame {
Action
:
flatCallAction
{
Action
:
flatCallAction
{
SelfDestructed
:
&
input
.
From
,
SelfDestructed
:
&
input
.
From
,
Balance
:
input
.
Value
,
Balance
:
input
.
Value
,
RefundAddress
:
&
input
.
To
,
RefundAddress
:
input
.
To
,
},
},
}
}
}
}
...
...
eth/tracers/native/gen_callframe_json.go
View file @
41af42e9
...
@@ -16,19 +16,19 @@ var _ = (*callFrameMarshaling)(nil)
...
@@ -16,19 +16,19 @@ var _ = (*callFrameMarshaling)(nil)
// MarshalJSON marshals as JSON.
// MarshalJSON marshals as JSON.
func
(
c
callFrame
)
MarshalJSON
()
([]
byte
,
error
)
{
func
(
c
callFrame
)
MarshalJSON
()
([]
byte
,
error
)
{
type
callFrame0
struct
{
type
callFrame0
struct
{
Type
vm
.
OpCode
`json:"-"`
Type
vm
.
OpCode
`json:"-"`
From
common
.
Address
`json:"from"`
From
common
.
Address
`json:"from"`
Gas
hexutil
.
Uint64
`json:"gas"`
Gas
hexutil
.
Uint64
`json:"gas"`
GasUsed
hexutil
.
Uint64
`json:"gasUsed"`
GasUsed
hexutil
.
Uint64
`json:"gasUsed"`
To
common
.
Address
`json:"to,omitempty" rlp:"optional"`
To
*
common
.
Address
`json:"to,omitempty" rlp:"optional"`
Input
hexutil
.
Bytes
`json:"input" rlp:"optional"`
Input
hexutil
.
Bytes
`json:"input" rlp:"optional"`
Output
hexutil
.
Bytes
`json:"output,omitempty" rlp:"optional"`
Output
hexutil
.
Bytes
`json:"output,omitempty" rlp:"optional"`
Error
string
`json:"error,omitempty" rlp:"optional"`
Error
string
`json:"error,omitempty" rlp:"optional"`
RevertReason
string
`json:"revertReason,omitempty"`
RevertReason
string
`json:"revertReason,omitempty"`
Calls
[]
callFrame
`json:"calls,omitempty" rlp:"optional"`
Calls
[]
callFrame
`json:"calls,omitempty" rlp:"optional"`
Logs
[]
callLog
`json:"logs,omitempty" rlp:"optional"`
Logs
[]
callLog
`json:"logs,omitempty" rlp:"optional"`
Value
*
hexutil
.
Big
`json:"value,omitempty" rlp:"optional"`
Value
*
hexutil
.
Big
`json:"value,omitempty" rlp:"optional"`
TypeString
string
`json:"type"`
TypeString
string
`json:"type"`
}
}
var
enc
callFrame0
var
enc
callFrame0
enc
.
Type
=
c
.
Type
enc
.
Type
=
c
.
Type
...
@@ -80,7 +80,7 @@ func (c *callFrame) UnmarshalJSON(input []byte) error {
...
@@ -80,7 +80,7 @@ func (c *callFrame) UnmarshalJSON(input []byte) error {
c
.
GasUsed
=
uint64
(
*
dec
.
GasUsed
)
c
.
GasUsed
=
uint64
(
*
dec
.
GasUsed
)
}
}
if
dec
.
To
!=
nil
{
if
dec
.
To
!=
nil
{
c
.
To
=
*
dec
.
To
c
.
To
=
dec
.
To
}
}
if
dec
.
Input
!=
nil
{
if
dec
.
Input
!=
nil
{
c
.
Input
=
*
dec
.
Input
c
.
Input
=
*
dec
.
Input
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment