diff options
author | obscuren <geffobscura@gmail.com> | 2014-10-22 21:22:21 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-10-22 21:22:21 +0800 |
commit | b5beb1aac11af92bfe0f3ed7560b9eb08495ed09 (patch) | |
tree | 3f3fba73bca00f8c0a6c9f8bc29bca8ba36e991d /vm/environment.go | |
parent | 27cb0750c1deaed040876abdab1386a6687d7999 (diff) | |
download | go-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.go | 20 |
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 +} |