|
|
- package blocks
-
- import (
- . "github.com/tendermint/tendermint/binary"
- "github.com/tendermint/tendermint/merkle"
- "io"
- )
-
-
- /* Block */
-
- type Block struct {
- Header
- Validation
- Data
- // Checkpoint
- }
-
- func ReadBlock(r io.Reader) *Block {
- return &Block{
- Header: ReadHeader(r),
- Validation: ReadValidation(r),
- Data: ReadData(r),
- }
- }
-
- func (self *Block) Validate() bool {
- return false
- }
-
- func (self *Block) WriteTo(w io.Writer) (n int64, err error) {
- n, err = WriteOnto(&self.Header, w, n, err)
- n, err = WriteOnto(&self.Validation, w, n, err)
- n, err = WriteOnto(&self.Data, w, n, err)
- return
- }
-
-
- /* Block > Header */
-
- type Header struct {
- Name String
- Height UInt64
- Fees UInt64
- Time UInt64
- PrevHash ByteSlice
- ValidationHash ByteSlice
- DataHash ByteSlice
- }
-
- func ReadHeader(r io.Reader) Header {
- return Header{
- Name: ReadString(r),
- Height: ReadUInt64(r),
- Fees: ReadUInt64(r),
- Time: ReadUInt64(r),
- PrevHash: ReadByteSlice(r),
- ValidationHash: ReadByteSlice(r),
- DataHash: ReadByteSlice(r),
- }
- }
-
- func (self *Header) WriteTo(w io.Writer) (n int64, err error) {
- n, err = WriteOnto(self.Name, w, n, err)
- n, err = WriteOnto(self.Height, w, n, err)
- n, err = WriteOnto(self.Fees, w, n, err)
- n, err = WriteOnto(self.Time, w, n, err)
- n, err = WriteOnto(self.PrevHash, w, n, err)
- n, err = WriteOnto(self.ValidationHash, w, n, err)
- n, err = WriteOnto(self.DataHash, w, n, err)
- return
- }
-
-
- /* Block > Validation */
-
- type Validation struct {
- Signatures []Signature
- Adjustments []Adjustment
- }
-
- func ReadValidation(r io.Reader) Validation {
- numSigs := int(ReadUInt64(r))
- numAdjs := int(ReadUInt64(r))
- sigs := make([]Signature, 0, numSigs)
- for i:=0; i<numSigs; i++ {
- sigs = append(sigs, ReadSignature(r))
- }
- adjs := make([]Adjustment, 0, numAdjs)
- for i:=0; i<numSigs; i++ {
- adjs = append(adjs, ReadAdjustment(r))
- }
- return Validation{
- Signatures: sigs,
- Adjustments: adjs,
- }
- }
-
- func (self *Validation) WriteTo(w io.Writer) (n int64, err error) {
- n, err = WriteOnto(UInt64(len(self.Signatures)), w, n, err)
- n, err = WriteOnto(UInt64(len(self.Adjustments)), w, n, err)
- for _, sig := range self.Signatures {
- n, err = WriteOnto(sig, w, n, err)
- }
- for _, adj := range self.Adjustments {
- n, err = WriteOnto(adj, w, n, err)
- }
- return
- }
-
- /* Block > Data */
-
- type Data struct {
- Txs []Tx
- }
-
- func ReadData(r io.Reader) Data {
- numTxs := int(ReadUInt64(r))
- txs := make([]Tx, 0, numTxs)
- for i:=0; i<numTxs; i++ {
- txs = append(txs, ReadTx(r))
- }
- return Data{txs}
- }
-
- func (self *Data) WriteTo(w io.Writer) (n int64, err error) {
- n, err = WriteOnto(UInt64(len(self.Txs)), w, n, err)
- for _, tx := range self.Txs {
- n, err = WriteOnto(tx, w, n, err)
- }
- return
- }
-
- func (self *Data) MerkleHash() ByteSlice {
- bs := make([]Binary, 0, len(self.Txs))
- for i, tx := range self.Txs {
- bs[i] = Binary(tx)
- }
- return merkle.HashFromBinarySlice(bs)
- }
|