|
|
|
@ -5,31 +5,31 @@ import ( |
|
|
|
|
"math/big" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
type Address struct { |
|
|
|
|
type Account struct { |
|
|
|
|
Amount *big.Int |
|
|
|
|
Nonce uint64 |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func NewAddress(amount *big.Int) *Address { |
|
|
|
|
return &Address{Amount: amount, Nonce: 0} |
|
|
|
|
func NewAccount(amount *big.Int) *Account { |
|
|
|
|
return &Account{Amount: amount, Nonce: 0} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func NewAddressFromData(data []byte) *Address { |
|
|
|
|
address := &Address{} |
|
|
|
|
func NewAccountFromData(data []byte) *Account { |
|
|
|
|
address := &Account{} |
|
|
|
|
address.RlpDecode(data) |
|
|
|
|
|
|
|
|
|
return address |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (a *Address) AddFee(fee *big.Int) { |
|
|
|
|
func (a *Account) AddFee(fee *big.Int) { |
|
|
|
|
a.Amount.Add(a.Amount, fee) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (a *Address) RlpEncode() []byte { |
|
|
|
|
func (a *Account) RlpEncode() []byte { |
|
|
|
|
return ethutil.Encode([]interface{}{a.Amount, a.Nonce}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (a *Address) RlpDecode(data []byte) { |
|
|
|
|
func (a *Account) RlpDecode(data []byte) { |
|
|
|
|
decoder := ethutil.NewValueFromBytes(data) |
|
|
|
|
|
|
|
|
|
a.Amount = decoder.Get(0).BigInt() |
|
|
|
@ -37,24 +37,24 @@ func (a *Address) RlpDecode(data []byte) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
type AddrStateStore struct { |
|
|
|
|
states map[string]*AddressState |
|
|
|
|
states map[string]*AccountState |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func NewAddrStateStore() *AddrStateStore { |
|
|
|
|
return &AddrStateStore{states: make(map[string]*AddressState)} |
|
|
|
|
return &AddrStateStore{states: make(map[string]*AccountState)} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (s *AddrStateStore) Add(addr []byte, account *Address) *AddressState { |
|
|
|
|
state := &AddressState{Nonce: account.Nonce, Account: account} |
|
|
|
|
func (s *AddrStateStore) Add(addr []byte, account *Account) *AccountState { |
|
|
|
|
state := &AccountState{Nonce: account.Nonce, Account: account} |
|
|
|
|
s.states[string(addr)] = state |
|
|
|
|
return state |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (s *AddrStateStore) Get(addr []byte) *AddressState { |
|
|
|
|
func (s *AddrStateStore) Get(addr []byte) *AccountState { |
|
|
|
|
return s.states[string(addr)] |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
type AddressState struct { |
|
|
|
|
type AccountState struct { |
|
|
|
|
Nonce uint64 |
|
|
|
|
Account *Address |
|
|
|
|
Account *Account |
|
|
|
|
} |
|
|
|
|