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
673007d7
Commit
673007d7
authored
Sep 22, 2017
by
cdetrio
Committed by
Felix Lange
Sep 22, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
core/vm: standard vm traces (#15035)
parent
d558a595
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
20 additions
and
4 deletions
+20
-4
json_logger.go
cmd/evm/json_logger.go
+1
-1
interpreter.go
core/vm/interpreter.go
+19
-3
No files found.
cmd/evm/json_logger.go
View file @
673007d7
...
...
@@ -40,7 +40,7 @@ func (l *JSONLogger) CaptureState(env *vm.EVM, pc uint64, op vm.OpCode, gas, cos
log
:=
vm
.
StructLog
{
Pc
:
pc
,
Op
:
op
,
Gas
:
gas
+
cost
,
Gas
:
gas
,
GasCost
:
cost
,
MemorySize
:
memory
.
Len
(),
Storage
:
nil
,
...
...
core/vm/interpreter.go
View file @
673007d7
...
...
@@ -137,12 +137,17 @@ func (in *Interpreter) Run(snapshot int, contract *Contract, input []byte) (ret
// to be uint256. Practically much less so feasible.
pc
=
uint64
(
0
)
// program counter
cost
uint64
// copies used by tracer
stackCopy
=
newstack
()
// stackCopy needed for Tracer since stack is mutated by 63/64 gas rule
pcCopy
uint64
// needed for the deferred Tracer
gasCopy
uint64
// for Tracer to log gas remaining before execution
logged
bool
// deferred Tracer should ignore already logged steps
)
contract
.
Input
=
input
defer
func
()
{
if
err
!=
nil
&&
in
.
cfg
.
Debug
{
in
.
cfg
.
Tracer
.
CaptureState
(
in
.
evm
,
pc
,
op
,
contract
.
Gas
,
cost
,
mem
,
stack
,
contract
,
in
.
evm
.
depth
,
err
)
if
err
!=
nil
&&
!
logged
&&
in
.
cfg
.
Debug
{
in
.
cfg
.
Tracer
.
CaptureState
(
in
.
evm
,
pc
Copy
,
op
,
gasCopy
,
cost
,
mem
,
stackCopy
,
contract
,
in
.
evm
.
depth
,
err
)
}
}()
...
...
@@ -154,6 +159,16 @@ func (in *Interpreter) Run(snapshot int, contract *Contract, input []byte) (ret
// Get the memory location of pc
op
=
contract
.
GetOp
(
pc
)
if
in
.
cfg
.
Debug
{
logged
=
false
pcCopy
=
uint64
(
pc
)
gasCopy
=
uint64
(
contract
.
Gas
)
stackCopy
=
newstack
()
for
_
,
val
:=
range
stack
.
data
{
stackCopy
.
push
(
val
)
}
}
// get the operation from the jump table matching the opcode
operation
:=
in
.
cfg
.
JumpTable
[
op
]
if
err
:=
in
.
enforceRestrictions
(
op
,
operation
,
stack
);
err
!=
nil
{
...
...
@@ -199,7 +214,8 @@ func (in *Interpreter) Run(snapshot int, contract *Contract, input []byte) (ret
}
if
in
.
cfg
.
Debug
{
in
.
cfg
.
Tracer
.
CaptureState
(
in
.
evm
,
pc
,
op
,
contract
.
Gas
,
cost
,
mem
,
stack
,
contract
,
in
.
evm
.
depth
,
err
)
in
.
cfg
.
Tracer
.
CaptureState
(
in
.
evm
,
pc
,
op
,
gasCopy
,
cost
,
mem
,
stackCopy
,
contract
,
in
.
evm
.
depth
,
err
)
logged
=
true
}
// execute the operation
...
...
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