package blocks
|
|
|
|
import (
|
|
. "github.com/tendermint/tendermint/binary"
|
|
. "github.com/tendermint/tendermint/common"
|
|
"io"
|
|
)
|
|
|
|
type AccountId struct {
|
|
Type Byte
|
|
Number UInt64
|
|
PubKey ByteSlice
|
|
}
|
|
|
|
const (
|
|
ACCOUNT_TYPE_NUMBER = Byte(0x01)
|
|
ACCOUNT_TYPE_PUBKEY = Byte(0x02)
|
|
ACCOUNT_TYPE_BOTH = Byte(0x03)
|
|
)
|
|
|
|
func ReadAccountId(r io.Reader) AccountId {
|
|
switch t := ReadByte(r); t {
|
|
case ACCOUNT_TYPE_NUMBER:
|
|
return AccountId{t, ReadUInt64(r), nil}
|
|
case ACCOUNT_TYPE_PUBKEY:
|
|
return AccountId{t, 0, ReadByteSlice(r)}
|
|
case ACCOUNT_TYPE_BOTH:
|
|
return AccountId{t, ReadUInt64(r), ReadByteSlice(r)}
|
|
default:
|
|
Panicf("Unknown AccountId type %x", t)
|
|
return AccountId{}
|
|
}
|
|
}
|
|
|
|
func (self AccountId) WriteTo(w io.Writer) (n int64, err error) {
|
|
n, err = WriteOnto(self.Type, w, n, err)
|
|
if self.Type == ACCOUNT_TYPE_NUMBER || self.Type == ACCOUNT_TYPE_BOTH {
|
|
n, err = WriteOnto(self.Number, w, n, err)
|
|
}
|
|
if self.Type == ACCOUNT_TYPE_PUBKEY || self.Type == ACCOUNT_TYPE_BOTH {
|
|
n, err = WriteOnto(self.PubKey, w, n, err)
|
|
}
|
|
return
|
|
}
|
|
|
|
func AccountNumber(n UInt64) AccountId {
|
|
return AccountId{ACCOUNT_TYPE_NUMBER, n, nil}
|
|
}
|