aboutsummaryrefslogtreecommitdiffstats
path: root/miner
diff options
context:
space:
mode:
authorJeffrey Wilcke <jeffrey@ethereum.org>2016-10-20 19:36:29 +0800
committerJeffrey Wilcke <jeffrey@ethereum.org>2016-11-13 17:44:04 +0800
commit445feaeef58bd89a113743dccf6fd5df55cde6fa (patch)
tree6c692a0989800f005a94bde2d372fcbe1f7630a1 /miner
parent932d973e36ff0d41a6005b93d2d4ff1b4430fb04 (diff)
downloaddexon-445feaeef58bd89a113743dccf6fd5df55cde6fa.tar
dexon-445feaeef58bd89a113743dccf6fd5df55cde6fa.tar.gz
dexon-445feaeef58bd89a113743dccf6fd5df55cde6fa.tar.bz2
dexon-445feaeef58bd89a113743dccf6fd5df55cde6fa.tar.lz
dexon-445feaeef58bd89a113743dccf6fd5df55cde6fa.tar.xz
dexon-445feaeef58bd89a113743dccf6fd5df55cde6fa.tar.zst
dexon-445feaeef58bd89a113743dccf6fd5df55cde6fa.zip
core, core/state, trie: EIP158, reprice & skip empty account write
This commit implements EIP158 part 1, 2, 3 & 4 1. If an account is empty it's no longer written to the trie. An empty account is defined as (balance=0, nonce=0, storage=0, code=0). 2. Delete an empty account if it's touched 3. An empty account is redefined as either non-existent or empty. 4. Zero value calls and zero value suicides no longer consume the 25k reation costs. params: moved core/config to params Signed-off-by: Jeffrey Wilcke <jeffrey@ethereum.org>
Diffstat (limited to 'miner')
-rw-r--r--miner/miner.go2
-rw-r--r--miner/worker.go19
2 files changed, 7 insertions, 14 deletions
diff --git a/miner/miner.go b/miner/miner.go
index c16cbe6ae..76dbb8380 100644
--- a/miner/miner.go
+++ b/miner/miner.go
@@ -62,7 +62,7 @@ type Miner struct {
shouldStart int32 // should start indicates whether we should start after sync
}
-func New(eth Backend, config *core.ChainConfig, mux *event.TypeMux, pow pow.PoW) *Miner {
+func New(eth Backend, config *params.ChainConfig, mux *event.TypeMux, pow pow.PoW) *Miner {
miner := &Miner{
eth: eth,
mux: mux,
diff --git a/miner/worker.go b/miner/worker.go
index 89064c3b9..f98145e8f 100644
--- a/miner/worker.go
+++ b/miner/worker.go
@@ -63,7 +63,7 @@ type uint64RingBuffer struct {
// Work is the workers current environment and holds
// all of the current state information
type Work struct {
- config *core.ChainConfig
+ config *params.ChainConfig
state *state.StateDB // apply state changes here
ancestors *set.Set // ancestor set (used for checking uncle parent validity)
family *set.Set // family set (used for checking uncle invalidity)
@@ -90,7 +90,7 @@ type Result struct {
// worker is the main object which takes care of applying messages to the new state
type worker struct {
- config *core.ChainConfig
+ config *params.ChainConfig
mu sync.Mutex
@@ -128,7 +128,7 @@ type worker struct {
fullValidation bool
}
-func newWorker(config *core.ChainConfig, coinbase common.Address, eth Backend, mux *event.TypeMux) *worker {
+func newWorker(config *params.ChainConfig, coinbase common.Address, eth Backend, mux *event.TypeMux) *worker {
worker := &worker{
config: config,
eth: eth,
@@ -276,7 +276,7 @@ func (self *worker) wait() {
}
go self.mux.Post(core.NewMinedBlockEvent{Block: block})
} else {
- work.state.Commit()
+ work.state.Commit(self.config.IsEIP158(block.Number()))
parent := self.chain.GetBlock(block.ParentHash(), block.NumberU64()-1)
if parent == nil {
glog.V(logger.Error).Infoln("Invalid block found during mining")
@@ -528,7 +528,7 @@ func (self *worker) commitNewWork() {
if atomic.LoadInt32(&self.mining) == 1 {
// commit state root after all state transitions.
core.AccumulateRewards(work.state, header, uncles)
- header.Root = work.state.IntermediateRoot()
+ header.Root = work.state.IntermediateRoot(self.config.IsEIP158(header.Number))
}
// create the new block whose nonce will be mined.
@@ -620,14 +620,7 @@ func (env *Work) commitTransactions(mux *event.TypeMux, txs *types.TransactionsB
func (env *Work) commitTransaction(tx *types.Transaction, bc *core.BlockChain, gp *core.GasPool) (error, vm.Logs) {
snap := env.state.Snapshot()
- // this is a bit of a hack to force jit for the miners
- config := env.config.VmConfig
- if !(config.EnableJit && config.ForceJit) {
- config.EnableJit = false
- }
- config.ForceJit = false // disable forcing jit
-
- receipt, logs, _, err := core.ApplyTransaction(env.config, bc, gp, env.state, env.header, tx, env.header.GasUsed, config)
+ receipt, logs, _, err := core.ApplyTransaction(env.config, bc, gp, env.state, env.header, tx, env.header.GasUsed, vm.Config{})
if err != nil {
env.state.RevertToSnapshot(snap)
return err, nil