aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/block_manager.go2
-rw-r--r--core/execution.go4
-rw-r--r--core/state_transition.go11
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