Skip to content

Commit

Permalink
Spec changes.
Browse files Browse the repository at this point in the history
* All errors during state transition result in an invalid tx
  • Loading branch information
obscuren committed Mar 5, 2015
1 parent ca1093f commit 88ff13c
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 7 deletions.
16 changes: 16 additions & 0 deletions core/error.go
Original file line number Diff line number Diff line change
Expand Up @@ -146,3 +146,19 @@ func IsKnownBlockErr(e error) bool {
_, ok := e.(*KnownBlockError)
return ok
}

type ValueTransferError struct {
message string
}

func ValueTransferErr(str string, v ...interface{}) *ValueTransferError {
return &ValueTransferError{fmt.Sprintf(str, v...)}
}

func (self *ValueTransferError) Error() string {
return self.message
}
func IsValueTransferErr(e error) bool {
_, ok := e.(*ValueTransferError)
return ok
}
8 changes: 5 additions & 3 deletions core/execution.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package core

import (
"fmt"
"math/big"
"time"

Expand All @@ -26,7 +25,10 @@ func (self *Execution) Addr() []byte {

func (self *Execution) Call(codeAddr []byte, caller vm.ContextRef) ([]byte, error) {
// Retrieve the executing code
code := self.env.State().GetCode(codeAddr)
var code []byte
if self.env.State().GetStateObject(codeAddr) != nil {
code = self.env.State().GetCode(codeAddr)
}

return self.exec(code, codeAddr, caller)
}
Expand Down Expand Up @@ -55,7 +57,7 @@ func (self *Execution) exec(code, contextAddr []byte, caller vm.ContextRef) (ret

caller.ReturnGas(self.Gas, self.price)

return nil, fmt.Errorf("insufficient funds to transfer value. Req %v, has %v", self.value, from.Balance())
return nil, ValueTransferErr("insufficient funds to transfer value. Req %v, has %v", self.value, from.Balance())
}

snapshot := env.State().Copy()
Expand Down
13 changes: 10 additions & 3 deletions core/state_transition.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package core
import (
"fmt"
"math/big"

"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/ethutil"
"github.com/ethereum/go-ethereum/state"
Expand Down Expand Up @@ -185,7 +186,7 @@ func (self *StateTransition) TransitionState() (ret []byte, err error) {
}
}
if err = self.UseGas(big.NewInt(dgas)); err != nil {
return
return nil, InvalidTxError(err)
}

//stateCopy := self.env.State().Copy()
Expand Down Expand Up @@ -231,10 +232,16 @@ func (self *StateTransition) TransitionState() (ret []byte, err error) {
*/
}

if err != nil {
self.UseGas(self.gas)
if err != nil && IsValueTransferErr(err) {
return nil, InvalidTxError(err)
}

/*
if err != nil {
self.UseGas(self.gas)
}
*/

return
}

Expand Down
7 changes: 6 additions & 1 deletion vm/vm.go
Original file line number Diff line number Diff line change
Expand Up @@ -408,7 +408,12 @@ func (self *Vm) Run(me, caller ContextRef, code []byte, value, gas, price *big.I
case BALANCE:

addr := stack.Pop().Bytes()
balance := statedb.GetBalance(addr)
var balance *big.Int
if statedb.GetStateObject(addr) != nil {
balance = statedb.GetBalance(addr)
} else {
balance = base
}

stack.Push(balance)

Expand Down

0 comments on commit 88ff13c

Please sign in to comment.