aboutsummaryrefslogtreecommitdiffstats
path: root/vm/environment.go
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-10-22 21:22:21 +0800
committerobscuren <geffobscura@gmail.com>2014-10-22 21:22:21 +0800
commitb5beb1aac11af92bfe0f3ed7560b9eb08495ed09 (patch)
tree3f3fba73bca00f8c0a6c9f8bc29bca8ba36e991d /vm/environment.go
parent27cb0750c1deaed040876abdab1386a6687d7999 (diff)
downloadgo-tangerine-b5beb1aac11af92bfe0f3ed7560b9eb08495ed09.tar.gz
go-tangerine-b5beb1aac11af92bfe0f3ed7560b9eb08495ed09.tar.zst
go-tangerine-b5beb1aac11af92bfe0f3ed7560b9eb08495ed09.zip
added a transfer method to vm env
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
+}