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
7a7428a0
Unverified
Commit
7a7428a0
authored
Apr 27, 2018
by
Péter Szilágyi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
core, eth: fix tracer dirty finalization
parent
cfe8f5fd
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
8 additions
and
23 deletions
+8
-23
statedb.go
core/state/statedb.go
+0
-21
evm.go
core/vm/evm.go
+5
-0
api_tracer.go
eth/api_tracer.go
+3
-2
No files found.
core/state/statedb.go
View file @
7a7428a0
...
...
@@ -572,27 +572,6 @@ func (self *StateDB) Prepare(thash, bhash common.Hash, ti int) {
self
.
txIndex
=
ti
}
// DeleteSuicides flags the suicided objects for deletion so that it
// won't be referenced again when called / queried up on.
//
// DeleteSuicides should not be used for consensus related updates
// under any circumstances.
func
(
s
*
StateDB
)
DeleteSuicides
()
{
// Reset refund so that any used-gas calculations can use this method.
s
.
clearJournalAndRefund
()
for
addr
:=
range
s
.
stateObjectsDirty
{
stateObject
:=
s
.
stateObjects
[
addr
]
// If the object has been removed by a suicide
// flag the object as deleted.
if
stateObject
.
suicided
{
stateObject
.
deleted
=
true
}
delete
(
s
.
stateObjectsDirty
,
addr
)
}
}
func
(
s
*
StateDB
)
clearJournalAndRefund
()
{
s
.
journal
=
newJournal
()
s
.
validRevisions
=
s
.
validRevisions
[
:
0
]
...
...
core/vm/evm.go
View file @
7a7428a0
...
...
@@ -160,6 +160,11 @@ func (evm *EVM) Call(caller ContractRef, addr common.Address, input []byte, gas
precompiles
=
PrecompiledContractsByzantium
}
if
precompiles
[
addr
]
==
nil
&&
evm
.
ChainConfig
()
.
IsEIP158
(
evm
.
BlockNumber
)
&&
value
.
Sign
()
==
0
{
// Calling a non existing account, don't do antything, but ping the tracer
if
evm
.
vmConfig
.
Debug
&&
evm
.
depth
==
0
{
evm
.
vmConfig
.
Tracer
.
CaptureStart
(
caller
.
Address
(),
addr
,
false
,
input
,
gas
,
value
)
evm
.
vmConfig
.
Tracer
.
CaptureEnd
(
ret
,
0
,
0
,
nil
)
}
return
nil
,
gas
,
nil
}
evm
.
StateDB
.
CreateAccount
(
addr
)
...
...
eth/api_tracer.go
View file @
7a7428a0
...
...
@@ -201,7 +201,7 @@ func (api *PrivateDebugAPI) traceChain(ctx context.Context, start, end *types.Bl
log
.
Warn
(
"Tracing failed"
,
"hash"
,
tx
.
Hash
(),
"block"
,
task
.
block
.
NumberU64
(),
"err"
,
err
)
break
}
task
.
statedb
.
DeleteSuicides
(
)
task
.
statedb
.
Finalise
(
true
)
task
.
results
[
i
]
=
&
txTraceResult
{
Result
:
res
}
}
// Stream the result back to the user or abort on teardown
...
...
@@ -640,7 +640,8 @@ func (api *PrivateDebugAPI) computeTxEnv(blockHash common.Hash, txIndex int, ree
if
_
,
_
,
_
,
err
:=
core
.
ApplyMessage
(
vmenv
,
msg
,
new
(
core
.
GasPool
)
.
AddGas
(
tx
.
Gas
()));
err
!=
nil
{
return
nil
,
vm
.
Context
{},
nil
,
fmt
.
Errorf
(
"tx %x failed: %v"
,
tx
.
Hash
(),
err
)
}
statedb
.
DeleteSuicides
()
// Ensure any modifications are committed to the state
statedb
.
Finalise
(
true
)
}
return
nil
,
vm
.
Context
{},
nil
,
fmt
.
Errorf
(
"tx index %d out of range for block %x"
,
txIndex
,
blockHash
)
}
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