Procházet zdrojové kódy

Removed OOG check. Revert should always happen.

obscuren před 11 roky
rodič
revize
f5b8f3d41b
3 změnil soubory, kde provedl 11 přidání a 6 odebrání
  1. 1 1
      core/block_manager.go
  2. 1 3
      core/execution.go
  3. 9 2
      core/state_transition.go

+ 1 - 1
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
 	}

+ 1 - 3
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())
 	}()
 

+ 9 - 2
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