diff options
author | obscuren <geffobscura@gmail.com> | 2014-03-21 06:38:16 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-03-21 06:38:16 +0800 |
commit | f567f89b994bf28f908410223084a6702d05d156 (patch) | |
tree | 1ec45639e8ec6787d1d97ec59c2bd78a7f90d9b0 /ethchain/contract.go | |
parent | 7705b23f248156878d00c301fbbadafedaf7e3d2 (diff) | |
download | go-tangerine-f567f89b994bf28f908410223084a6702d05d156.tar go-tangerine-f567f89b994bf28f908410223084a6702d05d156.tar.gz go-tangerine-f567f89b994bf28f908410223084a6702d05d156.tar.bz2 go-tangerine-f567f89b994bf28f908410223084a6702d05d156.tar.lz go-tangerine-f567f89b994bf28f908410223084a6702d05d156.tar.xz go-tangerine-f567f89b994bf28f908410223084a6702d05d156.tar.zst go-tangerine-f567f89b994bf28f908410223084a6702d05d156.zip |
Added address to account and contract
Contract and account now both have an address field or method for the
sake of simplicity.
Diffstat (limited to 'ethchain/contract.go')
-rw-r--r-- | ethchain/contract.go | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/ethchain/contract.go b/ethchain/contract.go index 10c5e2df6..93d2b68ba 100644 --- a/ethchain/contract.go +++ b/ethchain/contract.go @@ -9,26 +9,22 @@ type Contract struct { Amount *big.Int Nonce uint64 //state *ethutil.Trie - state *State + state *State + address []byte } -func NewContract(Amount *big.Int, root []byte) *Contract { - contract := &Contract{Amount: Amount, Nonce: 0} +func NewContract(address []byte, Amount *big.Int, root []byte) *Contract { + contract := &Contract{address: address, Amount: Amount, Nonce: 0} contract.state = NewState(ethutil.NewTrie(ethutil.Config.Db, string(root))) return contract } -func (c *Contract) RlpEncode() []byte { - return ethutil.Encode([]interface{}{c.Amount, c.Nonce, c.state.trie.Root}) -} - -func (c *Contract) RlpDecode(data []byte) { - decoder := ethutil.NewValueFromBytes(data) +func NewContractFromBytes(address, data []byte) *Contract { + contract := &Contract{address: address} + contract.RlpDecode(data) - c.Amount = decoder.Get(0).BigInt() - c.Nonce = decoder.Get(1).Uint() - c.state = NewState(ethutil.NewTrie(ethutil.Config.Db, decoder.Get(2).Interface())) + return contract } func (c *Contract) Addr(addr []byte) *ethutil.Value { @@ -54,13 +50,29 @@ func (c *Contract) ReturnGas(val *big.Int, state *State) { c.Amount.Add(c.Amount, val) } +func (c *Contract) Address() []byte { + return c.address +} + +func (c *Contract) RlpEncode() []byte { + return ethutil.Encode([]interface{}{c.Amount, c.Nonce, c.state.trie.Root}) +} + +func (c *Contract) RlpDecode(data []byte) { + decoder := ethutil.NewValueFromBytes(data) + + c.Amount = decoder.Get(0).BigInt() + c.Nonce = decoder.Get(1).Uint() + c.state = NewState(ethutil.NewTrie(ethutil.Config.Db, decoder.Get(2).Interface())) +} + func MakeContract(tx *Transaction, state *State) *Contract { // Create contract if there's no recipient if tx.IsContract() { addr := tx.Hash()[12:] value := tx.Value - contract := NewContract(value, []byte("")) + contract := NewContract(addr, value, []byte("")) state.trie.Update(string(addr), string(contract.RlpEncode())) for i, val := range tx.Data { if len(val) > 0 { |