|
|
- package blocks
-
- import (
- . "github.com/tendermint/tendermint/binary"
- . "github.com/tendermint/tendermint/common"
- "io"
- )
-
- /*
-
- Tx wire format:
-
- |T|L...|MMM...|A...|SSS...|
-
- T type of the tx (1 byte)
- L length of M, varint encoded (1+ bytes)
- M Tx bytes (L bytes)
- A account number, varint encoded (1+ bytes)
- S signature of all prior bytes (32 bytes)
-
- */
-
- type Tx interface {
- Type() Byte
- Binary
- }
-
- const (
- TX_TYPE_SEND = Byte(0x01)
- TX_TYPE_NAME = Byte(0x02)
- )
-
- func ReadTx(r io.Reader) Tx {
- switch t := ReadByte(r); t {
- case TX_TYPE_SEND:
- return &SendTx{
- Fee: ReadUInt64(r),
- To: ReadAccountId(r),
- Amount: ReadUInt64(r),
- Signature: ReadSignature(r),
- }
- case TX_TYPE_NAME:
- return &NameTx{
- Fee: ReadUInt64(r),
- Name: ReadString(r),
- PubKey: ReadByteSlice(r),
- Signature: ReadSignature(r),
- }
- default:
- Panicf("Unknown Tx type %x", t)
- return nil
- }
- }
-
- /* SendTx < Tx */
-
- type SendTx struct {
- Fee UInt64
- To AccountId
- Amount UInt64
- Signature
- }
-
- func (self *SendTx) Type() Byte {
- return TX_TYPE_SEND
- }
-
- func (self *SendTx) WriteTo(w io.Writer) (n int64, err error) {
- n, err = WriteOnto(self.Type(), w, n, err)
- n, err = WriteOnto(self.Fee, w, n, err)
- n, err = WriteOnto(self.To, w, n, err)
- n, err = WriteOnto(self.Amount, w, n, err)
- n, err = WriteOnto(self.Signature, w, n, err)
- return
- }
-
- /* NameTx < Tx */
-
- type NameTx struct {
- Fee UInt64
- Name String
- PubKey ByteSlice
- Signature
- }
-
- func (self *NameTx) Type() Byte {
- return TX_TYPE_NAME
- }
-
- func (self *NameTx) WriteTo(w io.Writer) (n int64, err error) {
- n, err = WriteOnto(self.Type(), w, n, err)
- n, err = WriteOnto(self.Fee, w, n, err)
- n, err = WriteOnto(self.Name, w, n, err)
- n, err = WriteOnto(self.PubKey, w, n, err)
- n, err = WriteOnto(self.Signature, w, n, err)
- return
- }
|