Block structure

Block structure:

type MsgBlock struct {
    Header       BlockHeader
    Proposals    ProposalArea
    Transactions []*MsgTx
}

Block header structure:

type BlockHeader struct {
    ChainID         Hash
    Version         uint64
    Height          uint64
    Timestamp       time.Time
    Previous        Hash
    TransactionRoot Hash
    WitnessRoot     Hash
    ProposalRoot    Hash
    Target          *big.Int
    Challenge       Hash
    PubKey          *pocec.PublicKey
    Proof           *poc.Proof
    Signature       *pocec.Signature
    BanList         []*pocec.PublicKey
}

Block proposal structure:

type ProposalArea struct {
    PunishmentArea []*FaultPubKey
    OtherArea      []*NormalProposal
}

type FaultPubKey struct {
    version   uint32
    PubKey    *pocec.PublicKey
    Testimony [HeadersPerProposal]*BlockHeader
}

type NormalProposal struct {
    version      uint32
    proposalType ProposalType
    content      []byte
}