aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2015-03-12 00:37:17 +0800
committerobscuren <geffobscura@gmail.com>2015-03-12 00:37:17 +0800
commit239e17de126a3d7afa29da7ee423ffc79757877f (patch)
treee2f844a7b2a1ad88010745449863aa6f1cc14da4 /core
parent61bf29be36a6678ba16c457229ca306339ea4ebc (diff)
parentc01d4c2f4c8704656e407ab4d80d9ec82e016731 (diff)
downloadgo-tangerine-239e17de126a3d7afa29da7ee423ffc79757877f.tar
go-tangerine-239e17de126a3d7afa29da7ee423ffc79757877f.tar.gz
go-tangerine-239e17de126a3d7afa29da7ee423ffc79757877f.tar.bz2
go-tangerine-239e17de126a3d7afa29da7ee423ffc79757877f.tar.lz
go-tangerine-239e17de126a3d7afa29da7ee423ffc79757877f.tar.xz
go-tangerine-239e17de126a3d7afa29da7ee423ffc79757877f.tar.zst
go-tangerine-239e17de126a3d7afa29da7ee423ffc79757877f.zip
Merge branch 'rpcfrontier' into develop
Diffstat (limited to 'core')
-rw-r--r--core/block_processor.go17
-rw-r--r--core/chain_manager.go2
-rw-r--r--core/state_transition.go35
3 files changed, 11 insertions, 43 deletions
diff --git a/core/block_processor.go b/core/block_processor.go
index ea9d06841..7ac8a1bd2 100644
--- a/core/block_processor.go
+++ b/core/block_processor.go
@@ -80,7 +80,7 @@ func (self *BlockProcessor) ApplyTransaction(coinbase *state.StateObject, stated
cb := statedb.GetStateObject(coinbase.Address())
st := NewStateTransition(NewEnv(statedb, self.bc, tx, block), tx, cb)
_, err := st.TransitionState()
- if err != nil && (IsNonceErr(err) || state.IsGasLimitErr(err)) {
+ if err != nil && (IsNonceErr(err) || state.IsGasLimitErr(err) || IsInvalidTxErr(err)) {
return nil, nil, err
}
@@ -120,17 +120,12 @@ func (self *BlockProcessor) ApplyTransactions(coinbase *state.StateObject, state
for _, tx := range txs {
receipt, txGas, err := self.ApplyTransaction(coinbase, statedb, block, tx, totalUsedGas, transientProcess)
+ if err != nil && (IsNonceErr(err) || state.IsGasLimitErr(err) || IsInvalidTxErr(err)) {
+ return nil, nil, nil, nil, err
+ }
+
if err != nil {
- switch {
- case IsNonceErr(err):
- return nil, nil, nil, nil, err
- case state.IsGasLimitErr(err):
- return nil, nil, nil, nil, err
- default:
- statelogger.Infoln(err)
- erroneous = append(erroneous, tx)
- err = nil
- }
+ statelogger.Infoln("TX err:", err)
}
receipts = append(receipts, receipt)
handled = append(handled, tx)
diff --git a/core/chain_manager.go b/core/chain_manager.go
index 9dc41f421..97c61395e 100644
--- a/core/chain_manager.go
+++ b/core/chain_manager.go
@@ -440,12 +440,14 @@ func (self *ChainManager) InsertChain(chain types.Blocks) error {
self.setTotalDifficulty(td)
self.insert(block)
+ /* XXX crashes
jsonlogger.LogJson(&logger.EthChainNewHead{
BlockHash: ethutil.Bytes2Hex(block.Hash()),
BlockNumber: block.Number(),
ChainHeadHash: ethutil.Bytes2Hex(cblock.Hash()),
BlockPrevHash: ethutil.Bytes2Hex(block.ParentHash()),
})
+ */
self.setTransState(state.New(block.Root(), self.stateDb))
queue[i] = ChainEvent{block}
diff --git a/core/state_transition.go b/core/state_transition.go
index 9b67de149..7659e3d50 100644
--- a/core/state_transition.go
+++ b/core/state_transition.go
@@ -184,6 +184,7 @@ func (self *StateTransition) TransitionState() (ret []byte, err error) {
}
}
if err = self.UseGas(big.NewInt(dgas)); err != nil {
+ println("2")
return nil, InvalidTxError(err)
}
@@ -198,48 +199,18 @@ func (self *StateTransition) TransitionState() (ret []byte, err error) {
dataGas.Mul(dataGas, vm.GasCreateByte)
if err := self.UseGas(dataGas); err == nil {
ref.SetCode(ret)
+ } else {
+ statelogger.Infoln("Insufficient gas for creating code. Require", dataGas, "and have", self.gas)
}
}
-
- /*
- if vmenv, ok := vmenv.(*VMEnv); ok && tryJit {
- statelogger.Infof("CREATE: re-running using JIT (PH=%x)\n", stateCopy.Root()[:4])
- // re-run using the JIT (validation for the JIT)
- goodState := vmenv.State().Copy()
- vmenv.state = stateCopy
- vmenv.SetVmType(vm.JitVmTy)
- vmenv.Create(sender, contract.Address(), self.msg.Data(), self.gas, self.gasPrice, self.value)
- statelogger.Infof("DONE PH=%x STD_H=%x JIT_H=%x\n", stateCopy.Root()[:4], goodState.Root()[:4], vmenv.State().Root()[:4])
- self.state.Set(goodState)
- }
- */
} else {
ret, err = vmenv.Call(self.From(), self.To().Address(), self.msg.Data(), self.gas, self.gasPrice, self.value)
-
- /*
- if vmenv, ok := vmenv.(*VMEnv); ok && tryJit {
- statelogger.Infof("CALL: re-running using JIT (PH=%x)\n", stateCopy.Root()[:4])
- // re-run using the JIT (validation for the JIT)
- goodState := vmenv.State().Copy()
- vmenv.state = stateCopy
- vmenv.SetVmType(vm.JitVmTy)
- vmenv.Call(self.From(), self.To().Address(), self.msg.Data(), self.gas, self.gasPrice, self.value)
- statelogger.Infof("DONE PH=%x STD_H=%x JIT_H=%x\n", stateCopy.Root()[:4], goodState.Root()[:4], vmenv.State().Root()[:4])
- self.state.Set(goodState)
- }
- */
}
if err != nil && IsValueTransferErr(err) {
return nil, InvalidTxError(err)
}
- /*
- if err != nil {
- self.UseGas(self.gas)
- }
- */
-
return
}