aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ethchain/state_manager.go2
-rw-r--r--ethchain/state_transition.go17
2 files changed, 10 insertions, 9 deletions
diff --git a/ethchain/state_manager.go b/ethchain/state_manager.go
index 59cd8eec6..36ba1731c 100644
--- a/ethchain/state_manager.go
+++ b/ethchain/state_manager.go
@@ -281,10 +281,12 @@ func (sm *StateManager) ValidateBlock(block *Block) error {
return ValidationError("Block timestamp less then prev block %v", diff)
}
+ /* XXX
// New blocks must be within the 15 minute range of the last block.
if diff > int64(15*time.Minute) {
return ValidationError("Block is too far in the future of last block (> 15 minutes)")
}
+ */
// Verify the nonce of the block. Return an error if it's not valid
if !sm.Pow.Verify(block.HashNoNonce(), block.Difficulty, block.Nonce) {
diff --git a/ethchain/state_transition.go b/ethchain/state_transition.go
index 8757246a0..5f4588e48 100644
--- a/ethchain/state_transition.go
+++ b/ethchain/state_transition.go
@@ -219,25 +219,23 @@ func (self *StateTransition) Transition() (ret []byte, err error) {
// and use the return value as the
// script section for the state object.
self.data = nil
- ethutil.Config.Log.Println(ethutil.LogLevelSystem, receiver.Init())
- code, err := self.Eval(receiver.Init(), receiver)
- if err != nil {
+ code, err, deepErr := self.Eval(receiver.Init(), receiver)
+ if err != nil || deepErr {
self.state.ResetStateObject(receiver)
- return nil, fmt.Errorf("Error during init script run %v", err)
+ return nil, fmt.Errorf("Error during init script run %v (deepErr = %v)", err, deepErr)
}
receiver.script = code
} else {
if len(receiver.Script()) > 0 {
- ethutil.Config.Log.Println(ethutil.LogLevelSystem, receiver.Script())
-
- ret, err = self.Eval(receiver.Script(), receiver)
+ var deepErr bool
+ ret, err, deepErr = self.Eval(receiver.Script(), receiver)
if err != nil {
self.state.ResetStateObject(receiver)
- return nil, fmt.Errorf("Error during code execution %v", err)
+ return nil, fmt.Errorf("Error during code execution %v (deepErr = %v)", err, deepErr)
}
}
}
@@ -262,7 +260,7 @@ func (self *StateTransition) transferValue(sender, receiver *StateObject) error
return nil
}
-func (self *StateTransition) Eval(script []byte, context *StateObject) (ret []byte, err error) {
+func (self *StateTransition) Eval(script []byte, context *StateObject) (ret []byte, err error, deepErr bool) {
var (
block = self.block
initiator = self.Sender()
@@ -282,6 +280,7 @@ func (self *StateTransition) Eval(script []byte, context *StateObject) (ret []by
})
vm.Verbose = true
ret, _, err = closure.Call(vm, self.data, nil)
+ deepErr = vm.err != nil
return
}