go-ethereum/eth
Jeffrey Wilcke bb3651abc8 core/state, eth: Updated suicides objects when tracing transactions
Consensus rules dictate that objects can only be removed during the
finalisation of the transaction (i.e. after all calls have finished).
Thus calling a suicided contract twice from the same transaction:
A->B(S)->ret(A)->B(S) results in 2 suicides. Calling the suicided
object twice from two transactions: A->B(S), A->B, results in only one
suicide and a call to an empty object.

Our current debug tracing functionality replays all transaction that
were executed prior to the targetted transaction in order to provide
the user with an accurate trace.

As a side effect to calling StateDB.IntermediateRoot it also deletes any
suicides objects. Our tracing code never calls this function because it
isn't interested in the intermediate root. Becasue of this it caused a
bug in the tracing code where transactions that were send to priviously
deleted objects resulted in two suicides rather than one suicide and a
call to an empty object.

Fixes #2542
2016-06-13 11:57:42 +02:00
..
downloader eth/downloader: adaptive quality of service tuning 2016-06-06 14:20:57 +03:00
fetcher eth: various typos 2016-03-15 11:27:49 -07:00
filters eth/filter: bugfix which can cause a nil pointer crash when parsing filter arguments 2016-05-17 16:17:54 +02:00
api.go core/state, eth: Updated suicides objects when tracing transactions 2016-06-13 11:57:42 +02:00
backend.go eth: add new RPC method (personal.) SignAndSendTransaction 2016-05-20 15:54:18 +02:00
backend_test.go all: update license information 2016-04-15 09:48:05 +02:00
bad_block.go eth: enable bad block reports 2016-05-25 02:02:51 +02:00
bind.go accounts/abi/bind, eth: rely on getCode for sanity checks, not estimate and call 2016-05-20 12:29:28 +03:00
cpu_mining.go all: update license information 2016-04-15 09:48:05 +02:00
gasprice.go core, eth, rpc: split out block validator and state processor 2015-11-18 14:24:42 +01:00
gpu_mining.go all: update license information 2016-04-15 09:48:05 +02:00
handler.go eth: don't accept transactions until we sync up with the network 2016-06-06 14:45:38 +03:00
handler_test.go all: fix go vet warnings 2016-04-15 11:17:27 +02:00
helper_test.go core, eth, miner: improve shutdown synchronisation 2016-05-09 13:03:08 +02:00
metrics.go eth: various typos 2016-03-15 11:27:49 -07:00
peer.go core, eth, miner: improve shutdown synchronisation 2016-05-09 13:03:08 +02:00
protocol.go eth, p2p, rpc/api: polish protocol info gathering 2015-10-28 12:44:15 +02:00
protocol_test.go eth: don't accept transactions until we sync up with the network 2016-06-06 14:45:38 +03:00
sync.go eth: don't accept transactions until we sync up with the network 2016-06-06 14:45:38 +03:00
sync_test.go eth: skip transaction handling during fast sync 2016-05-17 14:17:20 +03:00