diff options
author | obscuren <geffobscura@gmail.com> | 2014-12-19 20:59:49 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-12-19 20:59:49 +0800 |
commit | f5b8f3d41b533d51eb81e895ed9b6aa31d7aaaef (patch) | |
tree | 1b8cf4b18039278254c4ece4b1f2e2d12a8f91d9 | |
parent | 0e93b98533968f4a0033ec6214391f5ca647a956 (diff) | |
download | dexon-f5b8f3d41b533d51eb81e895ed9b6aa31d7aaaef.tar.gz dexon-f5b8f3d41b533d51eb81e895ed9b6aa31d7aaaef.tar.zst dexon-f5b8f3d41b533d51eb81e895ed9b6aa31d7aaaef.zip |
Removed OOG check. Revert should always happen.
-rw-r--r-- | core/block_manager.go | 2 | ||||
-rw-r--r-- | core/execution.go | 4 | ||||
-rw-r--r-- | core/state_transition.go | 11 |
3 files changed, 11 insertions, 6 deletions
diff --git a/core/block_manager.go b/core/block_manager.go index 8d319f84e..20285f8f0 100644 --- a/core/block_manager.go +++ b/core/block_manager.go @@ -129,7 +129,6 @@ done: statelogger.Infoln(err) erroneous = append(erroneous, tx) err = nil - continue } } @@ -215,6 +214,7 @@ func (sm *BlockManager) ProcessWithParent(block, parent *types.Block) (td *big.I receiptSha := types.DeriveSha(receipts) if bytes.Compare(receiptSha, block.ReceiptSha) != 0 { + chainlogger.Debugln(receipts) err = fmt.Errorf("validating receipt root. received=%x got=%x", block.ReceiptSha, receiptSha) return } diff --git a/core/execution.go b/core/execution.go index 0b5e0558f..44dbd3ace 100644 --- a/core/execution.go +++ b/core/execution.go @@ -56,9 +56,7 @@ func (self *Execution) exec(code, contextAddr []byte, caller vm.ClosureRef) (ret snapshot := env.State().Copy() defer func() { - if vm.IsOOGErr(err) { - env.State().Set(snapshot) - } + env.State().Set(snapshot) chainlogger.Debugf("post state %x\n", env.State().Root()) }() diff --git a/core/state_transition.go b/core/state_transition.go index a54246eba..a60f31e3e 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -189,12 +189,19 @@ func (self *StateTransition) TransitionState() (ret []byte, err error) { self.rec = MakeContract(msg, self.state) ret, err, ref = vmenv.Create(sender, self.rec.Address(), self.msg.Data(), self.gas, self.gasPrice, self.value) - ref.SetCode(ret) + if err == nil { + dataGas := big.NewInt(int64(len(ret))) + dataGas.Mul(dataGas, vm.GasCreateByte) + if err = self.UseGas(dataGas); err == nil { + ref.SetCode(ret) + } + } } else { ret, err = vmenv.Call(self.From(), self.To().Address(), self.msg.Data(), self.gas, self.gasPrice, self.value) } + if err != nil { - statelogger.Debugln(err) + self.UseGas(self.gas) } return |