package account
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io"
|
|
|
|
"github.com/tendermint/tendermint/binary"
|
|
)
|
|
|
|
// Signable is an interface for all signable things.
|
|
// It typically removes signatures before serializing.
|
|
type Signable interface {
|
|
WriteSignBytes(w io.Writer, n *int64, err *error)
|
|
}
|
|
|
|
// SignBytes is a convenience method for getting the bytes to sign of a Signable.
|
|
func SignBytes(o Signable) []byte {
|
|
buf, n, err := new(bytes.Buffer), new(int64), new(error)
|
|
o.WriteSignBytes(buf, n, err)
|
|
if *err != nil {
|
|
panic(err)
|
|
}
|
|
return buf.Bytes()
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// Account resides in the application state, and is mutated by transactions
|
|
// on the blockchain.
|
|
// Serialized by binary.[read|write]Reflect
|
|
type Account struct {
|
|
Address []byte
|
|
PubKey PubKey
|
|
Sequence uint
|
|
Balance uint64
|
|
Code []byte // VM code
|
|
StorageRoot []byte // VM storage merkle root.
|
|
}
|
|
|
|
func (account *Account) Copy() *Account {
|
|
accountCopy := *account
|
|
return &accountCopy
|
|
}
|
|
|
|
func (account *Account) String() string {
|
|
return fmt.Sprintf("Account{%X:%v C:%v S:%X}", account.Address, account.PubKey, len(account.Code), account.StorageRoot)
|
|
}
|
|
|
|
func AccountEncoder(o interface{}, w io.Writer, n *int64, err *error) {
|
|
binary.WriteBinary(o.(*Account), w, n, err)
|
|
}
|
|
|
|
func AccountDecoder(r io.Reader, n *int64, err *error) interface{} {
|
|
return binary.ReadBinary(&Account{}, r, n, err)
|
|
}
|
|
|
|
var AccountCodec = binary.Codec{
|
|
Encode: AccountEncoder,
|
|
Decode: AccountDecoder,
|
|
}
|