aboutsummaryrefslogtreecommitdiffstats
path: root/vm/environment.go
diff options
context:
space:
mode:
Diffstat (limited to 'vm/environment.go')
-rw-r--r--vm/environment.go20
1 files changed, 20 insertions, 0 deletions
diff --git a/vm/environment.go b/vm/environment.go
index 2d933b65c..23b46c5df 100644
--- a/vm/environment.go
+++ b/vm/environment.go
@@ -1,6 +1,7 @@
package vm
import (
+ "errors"
"math/big"
"github.com/ethereum/eth-go/ethstate"
@@ -18,9 +19,28 @@ type Environment interface {
Difficulty() *big.Int
BlockHash() []byte
GasLimit() *big.Int
+ Transfer(from, to Account, amount *big.Int) error
}
type Object interface {
GetStorage(key *big.Int) *ethutil.Value
SetStorage(key *big.Int, value *ethutil.Value)
}
+
+type Account interface {
+ SubBalance(amount *big.Int)
+ AddBalance(amount *big.Int)
+ Balance() *big.Int
+}
+
+// generic transfer method
+func Transfer(from, to Account, amount *big.Int) error {
+ if from.Balance().Cmp(amount) < 0 {
+ return errors.New("Insufficient balance in account")
+ }
+
+ from.SubBalance(amount)
+ to.AddBalance(amount)
+
+ return nil
+}