Documentation ¶
Index ¶
- Constants
- Variables
- func BlockRequestID(height int64, round int32) []byte
- func CanonicalTime(t time.Time) string
- func CanonicalizeProposal(chainID string, proposal *tmproto.Proposal) tmproto.CanonicalProposal
- func CanonicalizeVoteExtension(chainID string, ext *tmproto.VoteExtension, height int64, round int32) (tmproto.CanonicalVoteExtension, error)
- func ComputeProtoSizeForTxs(txs []Tx) int64
- func EventQueryTxFor(tx Tx) *tmquery.Query
- func EvidenceToProto(evidence Evidence) (*tmproto.Evidence, error)
- func GenKeysForQuorumHash(quorumHash crypto.QuorumHash) func(pv *MockPV)
- func GenerateValidatorSet(valParams []ValSetParam, opts ...ValSetOptionFunc) (*ValidatorSet, []PrivValidator)
- func IsErrNotEnoughVotingPowerSigned(err error) bool
- func IsPreCheckError(err error) bool
- func IsVoteTypeValid(t tmproto.SignedMsgType) bool
- func MaxDataBytes(maxBytes int64, commit *Commit, evidenceBytes int64) (int64, error)
- func MaxDataBytesNoEvidence(maxBytes int64) (int64, error)
- func MaxNodeInfoSize() int
- func MaxVoteBytesForKeyType(keyType crypto.KeyType) int64
- func ProposalBlockSignBytes(chainID string, p *tmproto.Proposal) []byte
- func ProposalBlockSignID(chainID string, p *tmproto.Proposal, quorumType btcjson.LLMQType, ...) []byte
- func ProposalRequestID(p *Proposal) []byte
- func ProposalRequestIDProto(p *tmproto.Proposal) []byte
- func QueryForEvent(eventValue string) *tmquery.Query
- func RandStateID() tmproto.StateID
- func RandValidatorSet(n int) (*ValidatorSet, []PrivValidator)
- func UseProTxHash(proTxHash ProTxHash) func(pv *MockPV)
- func ValidateAppHash(h []byte) error
- func ValidateHash(h []byte) error
- func ValidateSignatureSize(keyType crypto.KeyType, h []byte) error
- func ValidatorListString(vals []*Validator) string
- func ValidatorUpdatesRegenerateOnProTxHashes(proTxHashes []crypto.ProTxHash) abci.ValidatorSetUpdate
- func VoteBlockRequestIDProto(vote *tmproto.Vote) []byte
- func VoteBlockSignID(chainID string, vote *tmproto.Vote, quorumType btcjson.LLMQType, ...) []byte
- func WithQuorumReached(quorumReached bool) func(*SignsRecoverer)
- func WithUpdatePrivValAt(privVals []PrivValidator, height int64) func(opt *ValSetOptions)
- type ABCIParams
- type Address
- type Block
- func (b *Block) BlockID(partSet *PartSet) BlockID
- func (b *Block) Hash() tmbytes.HexBytes
- func (b *Block) HashesTo(hash []byte) bool
- func (b *Block) MakePartSet(partSize uint32) (*PartSet, error)
- func (b *Block) MarshalZerologObject(e *zerolog.Event)
- func (b *Block) SetCoreChainLock(chainlock *CoreChainLock)
- func (b *Block) SetDashParams(lastCoreChainLockedBlockHeight uint32, coreChainLock *CoreChainLock, ...)
- func (b *Block) SetTxs(txs []Tx)
- func (b *Block) Size() int
- func (b *Block) String() string
- func (b *Block) StringIndented(indent string) string
- func (b *Block) StringShort() string
- func (b *Block) ToProto() (*tmproto.Block, error)
- func (b *Block) ValidateBasic() error
- type BlockEventPublisher
- type BlockID
- func (blockID BlockID) Copy() BlockID
- func (blockID BlockID) Equals(other BlockID) bool
- func (blockID BlockID) IsComplete() bool
- func (blockID BlockID) IsNil() bool
- func (blockID BlockID) Key() string
- func (blockID BlockID) String() string
- func (blockID *BlockID) ToProto() tmproto.BlockID
- func (blockID BlockID) ValidateBasic() error
- type BlockIDFlag
- type BlockMeta
- type BlockParams
- type Commit
- func (commit *Commit) GetCanonicalVote() *Vote
- func (commit *Commit) GetHeight() int64
- func (commit *Commit) GetRound() int32
- func (commit *Commit) HasCommitMessage() *tmcons.HasCommit
- func (commit *Commit) Hash() tmbytes.HexBytes
- func (commit *Commit) IsCommit() bool
- func (commit *Commit) MarshalZerologObject(e *zerolog.Event)
- func (commit *Commit) String() string
- func (commit *Commit) StringIndented(indent string) string
- func (commit *Commit) ToCommitInfo() types.CommitInfo
- func (commit *Commit) ToProto() *tmproto.Commit
- func (commit *Commit) Type() byte
- func (commit *Commit) ValidateBasic() error
- func (commit *Commit) VoteBlockRequestID() []byte
- type CommitSigns
- type ConsensusParams
- func (params *ConsensusParams) Complete()
- func (params *ConsensusParams) Equals(params2 *ConsensusParams) bool
- func (params ConsensusParams) HashConsensusParams() tmbytes.HexBytes
- func (params ConsensusParams) IsZero() bool
- func (params *ConsensusParams) ToProto() tmproto.ConsensusParams
- func (params ConsensusParams) UpdateConsensusParams(params2 *tmproto.ConsensusParams) ConsensusParams
- func (params ConsensusParams) ValidateConsensusParams() error
- type CoreChainLock
- func (cl CoreChainLock) Copy() CoreChainLock
- func (cl *CoreChainLock) IsZero() bool
- func (cl *CoreChainLock) MarshalZerologObject(e *zerolog.Event)
- func (cl *CoreChainLock) PopulateFromProto(clp *tmproto.CoreChainLock) error
- func (cl CoreChainLock) RequestID() []byte
- func (cl *CoreChainLock) StringIndented(indent string) string
- func (cl *CoreChainLock) ToProto() *tmproto.CoreChainLock
- func (cl CoreChainLock) ValidateBasic() error
- type Data
- type DuplicateVoteEvidence
- func DuplicateVoteEvidenceFromProto(pb *tmproto.DuplicateVoteEvidence) (*DuplicateVoteEvidence, error)
- func NewDuplicateVoteEvidence(vote1, vote2 *Vote, blockTime time.Time, valSet *ValidatorSet) (*DuplicateVoteEvidence, error)
- func NewMockDuplicateVoteEvidence(ctx context.Context, height int64, time time.Time, chainID string, ...) (*DuplicateVoteEvidence, error)
- func NewMockDuplicateVoteEvidenceWithPrivValInValidatorSet(height int64, time time.Time, pv PrivValidator, valSet *ValidatorSet, ...) (*DuplicateVoteEvidence, error)
- func NewMockDuplicateVoteEvidenceWithValidator(ctx context.Context, height int64, time time.Time, pv PrivValidator, ...) (*DuplicateVoteEvidence, error)
- func (dve *DuplicateVoteEvidence) ABCI() []abci.Misbehavior
- func (dve *DuplicateVoteEvidence) Bytes() []byte
- func (dve *DuplicateVoteEvidence) GenerateABCI(val *Validator, valSet *ValidatorSet, evidenceTime time.Time)
- func (dve *DuplicateVoteEvidence) Hash() []byte
- func (dve *DuplicateVoteEvidence) Height() int64
- func (dve *DuplicateVoteEvidence) String() string
- func (dve *DuplicateVoteEvidence) Time() time.Time
- func (dve *DuplicateVoteEvidence) ToProto() *tmproto.DuplicateVoteEvidence
- func (*DuplicateVoteEvidence) TypeTag() string
- func (dve *DuplicateVoteEvidence) ValidateABCI(val *Validator, valSet *ValidatorSet, evidenceTime time.Time) error
- func (dve *DuplicateVoteEvidence) ValidateBasic() error
- type ErrEvidenceOverflow
- type ErrInvalidCommitHeight
- type ErrInvalidEvidence
- type ErrInvalidVoteSignature
- type ErrMempoolIsFull
- type ErrNotEnoughVotingPowerSigned
- type ErrPreCheck
- type ErrTxTooLarge
- type ErrVoteConflictingVotes
- type ErroringMockPV
- func (pv *ErroringMockPV) GetPubKey(_ctx context.Context, _quorumHash crypto.QuorumHash) (crypto.PubKey, error)
- func (pv *ErroringMockPV) SignProposal(_ctx context.Context, _chainID string, _quorumType btcjson.LLMQType, ...) (tmbytes.HexBytes, error)
- func (pv *ErroringMockPV) SignVote(_ctx context.Context, _chainID string, _quorumType btcjson.LLMQType, ...) error
- type EventData
- type EventDataBlockSyncStatus
- type EventDataCommit
- type EventDataCompleteProposal
- type EventDataEvidenceValidated
- type EventDataNewBlock
- type EventDataNewBlockHeader
- type EventDataNewEvidence
- type EventDataNewRound
- type EventDataRoundState
- type EventDataStateSyncStatus
- type EventDataString
- type EventDataTx
- type EventDataValidatorSetUpdate
- type EventDataVote
- type Evidence
- type EvidenceList
- func (evl EvidenceList) ByteSize() int64
- func (evl *EvidenceList) FromProto(eviList *tmproto.EvidenceList) error
- func (evl EvidenceList) Has(evidence Evidence) bool
- func (evl EvidenceList) Hash() []byte
- func (evl EvidenceList) MarshalJSON() ([]byte, error)
- func (evl EvidenceList) String() string
- func (evl EvidenceList) StringIndented(indent string) string
- func (evl EvidenceList) ToABCI() []abci.Misbehavior
- func (evl *EvidenceList) ToProto() (*tmproto.EvidenceList, error)
- func (evl *EvidenceList) UnmarshalJSON(data []byte) error
- type EvidenceParams
- type GenericVoteExtension
- func (e GenericVoteExtension) Copy() VoteExtensionIf
- func (e GenericVoteExtension) GetSignRequestId() []byte
- func (e GenericVoteExtension) IsThresholdRecoverable() bool
- func (e GenericVoteExtension) MarshalZerologObject(o *zerolog.Event)
- func (e *GenericVoteExtension) SetSignature(sig []byte)
- func (e GenericVoteExtension) SignItem(chainID string, height int64, round int32, quorumType btcjson.LLMQType, ...) (SignItem, error)
- func (e GenericVoteExtension) ToProto() tmproto.VoteExtension
- type GenesisDoc
- type GenesisValidator
- type HashedParams
- type Header
- func (h *Header) Hash() tmbytes.HexBytes
- func (h Header) IsTimely(recvTime time.Time, sp SynchronyParams, round int32) bool
- func (h *Header) Populate(version version.Consensus, chainID string, timestamp time.Time, ...)
- func (h *Header) StateID() tmproto.StateID
- func (h *Header) StringIndented(indent string) string
- func (h *Header) ToProto() *tmproto.Header
- func (h Header) ValidateBasic() error
- type LightBlock
- type LightClientInfo
- type MockPV
- func (pv *MockPV) DisableChecks()
- func (pv *MockPV) ExtractIntoValidator(ctx context.Context, quorumHash crypto.QuorumHash) *Validator
- func (pv *MockPV) GetFirstQuorumHash(_ctx context.Context) (crypto.QuorumHash, error)
- func (pv *MockPV) GetHeight(_ctx context.Context, quorumHash crypto.QuorumHash) (int64, error)
- func (pv *MockPV) GetPrivateKey(_ctx context.Context, quorumHash crypto.QuorumHash) (crypto.PrivKey, error)
- func (pv *MockPV) GetProTxHash(_ctx context.Context) (crypto.ProTxHash, error)
- func (pv *MockPV) GetPubKey(_ctx context.Context, quorumHash crypto.QuorumHash) (crypto.PubKey, error)
- func (pv *MockPV) GetThresholdPublicKey(_ctx context.Context, quorumHash crypto.QuorumHash) (crypto.PubKey, error)
- func (pv *MockPV) SignProposal(_ctx context.Context, chainID string, quorumType btcjson.LLMQType, ...) (tmbytes.HexBytes, error)
- func (pv *MockPV) SignVote(_ctx context.Context, chainID string, quorumType btcjson.LLMQType, ...) error
- func (pv *MockPV) String() string
- func (pv *MockPV) ThresholdPublicKeyForQuorumHash(_ctx context.Context, quorumHash crypto.QuorumHash) (crypto.PubKey, error)
- func (pv *MockPV) UpdatePrivateKey(_ctx context.Context, privateKey crypto.PrivKey, quorumHash crypto.QuorumHash, ...)
- type MockPrivValidatorsByProTxHash
- type NetAddress
- func (na *NetAddress) Dial() (net.Conn, error)
- func (na *NetAddress) DialString() string
- func (na *NetAddress) DialTimeout(timeout time.Duration) (net.Conn, error)
- func (na *NetAddress) Equals(other interface{}) bool
- func (na *NetAddress) Local() bool
- func (na *NetAddress) OnionCatTor() bool
- func (na *NetAddress) RFC1918() bool
- func (na *NetAddress) RFC3849() bool
- func (na *NetAddress) RFC3927() bool
- func (na *NetAddress) RFC3964() bool
- func (na *NetAddress) RFC4193() bool
- func (na *NetAddress) RFC4380() bool
- func (na *NetAddress) RFC4843() bool
- func (na *NetAddress) RFC4862() bool
- func (na *NetAddress) RFC6052() bool
- func (na *NetAddress) RFC6145() bool
- func (na *NetAddress) ReachabilityTo(o *NetAddress) int
- func (na *NetAddress) Routable() bool
- func (na *NetAddress) Same(other interface{}) bool
- func (na *NetAddress) String() string
- func (na *NetAddress) Valid() error
- type NodeID
- type NodeInfo
- func (info *NodeInfo) AddChannel(channel uint16)
- func (info NodeInfo) CompatibleWith(other NodeInfo) error
- func (info NodeInfo) Copy() NodeInfo
- func (info NodeInfo) GetProTxHash() crypto.ProTxHash
- func (info NodeInfo) ID() NodeID
- func (info NodeInfo) ToProto() *tmp2p.NodeInfo
- func (info NodeInfo) Validate() error
- type NodeInfoOther
- type NodeKey
- type Part
- type PartSet
- func (ps *PartSet) AddPart(part *Part) (bool, error)
- func (ps *PartSet) BitArray() *bits.BitArray
- func (ps *PartSet) ByteSize() int64
- func (ps *PartSet) Count() uint32
- func (ps *PartSet) GetPart(index int) *Part
- func (ps *PartSet) GetReader() io.Reader
- func (ps *PartSet) HasHeader(header PartSetHeader) bool
- func (ps *PartSet) Hash() []byte
- func (ps *PartSet) HashesTo(hash []byte) bool
- func (ps *PartSet) Header() PartSetHeader
- func (ps *PartSet) IsComplete() bool
- func (ps *PartSet) MarshalJSON() ([]byte, error)
- func (ps *PartSet) StringShort() string
- func (ps *PartSet) Total() uint32
- type PartSetHeader
- type PartSetReader
- type PrivValidator
- type PrivValidatorType
- type PrivValidatorsByProTxHash
- type ProTxHash
- type Proposal
- func (p *Proposal) CheckTimely(recvTime time.Time, sp SynchronyParams, round int32) int
- func (p *Proposal) MarshalZerologObject(e *zerolog.Event)
- func (p *Proposal) SetCoreChainLockUpdate(coreChainLock *CoreChainLock)
- func (p *Proposal) String() string
- func (p *Proposal) ToProto() *tmproto.Proposal
- func (p *Proposal) ValidateBasic() error
- type ProtocolVersion
- type QuorumSignData
- func (q QuorumSignData) SignWithPrivkey(key crypto.PrivKey) (QuorumSigns, error)
- func (q QuorumSignData) Verify(pubKey crypto.PubKey, signatures QuorumSigns) error
- func (q QuorumSignData) VerifyBlock(pubKey crypto.PubKey, signatures QuorumSigns) error
- func (q QuorumSignData) VerifyVoteExtensions(pubKey crypto.PubKey, signatures QuorumSigns) error
- type QuorumSigns
- type SignItem
- type SignedHeader
- type SignsRecoverer
- type SynchronyParams
- type ThresholdRawVoteExtension
- type ThresholdSignature
- type ThresholdVoteExtension
- type ThresholdVoteExtensionIf
- type TimeoutParams
- type Tx
- type TxEventPublisher
- type TxKey
- type TxProof
- type TxRecordSet
- type Txs
- func (txs Txs) Hash() []byte
- func (txs Txs) Index(tx Tx) int
- func (txs Txs) IndexByHash(hash []byte) int
- func (txs Txs) Len() int
- func (txs Txs) Less(i, j int) bool
- func (txs Txs) MarshalZerologArray(e *zerolog.Array)
- func (txs Txs) MarshalZerologObject(e *zerolog.Event)
- func (txs Txs) Proof(i int) TxProof
- func (txs Txs) Swap(i, j int)
- func (txs Txs) ToSliceOfBytes() [][]byte
- type ValSetOptionFunc
- type ValSetOptions
- type ValSetParam
- type Validator
- func NewTestRemoveValidatorGeneratedFromProTxHash(proTxHash crypto.ProTxHash) *Validator
- func NewTestValidatorGeneratedFromProTxHash(proTxHash crypto.ProTxHash) *Validator
- func NewValidator(pubKey crypto.PubKey, votingPower int64, proTxHash ProTxHash, address string) *Validator
- func NewValidatorDefaultVotingPower(pubKey crypto.PubKey, proTxHash []byte) *Validator
- func ValidatorFromProto(vp *tmproto.Validator) (*Validator, error)
- func (v *Validator) Bytes() []byte
- func (v *Validator) CompareProposerPriority(other *Validator) *Validator
- func (v *Validator) Copy() *Validator
- func (v Validator) MarshalJSON() ([]byte, error)
- func (v *Validator) MarshalZerologObject(e *zerolog.Event)
- func (v *Validator) ShortStringBasic() string
- func (v *Validator) String() string
- func (v *Validator) ToProto() (*tmproto.Validator, error)
- func (v *Validator) UnmarshalJSON(data []byte) error
- func (v *Validator) ValidateBasic() error
- func (v *Validator) ValidatePubKey() error
- type ValidatorAddress
- type ValidatorInfo
- type ValidatorParams
- type ValidatorSet
- func NewEmptyValidatorSet() *ValidatorSet
- func NewValidatorSet(valz []*Validator, newThresholdPublicKey crypto.PubKey, ...) *ValidatorSet
- func NewValidatorSetCheckPublicKeys(valz []*Validator, newThresholdPublicKey crypto.PubKey, ...) *ValidatorSet
- func ValidatorSetFromExistingValidators(valz []*Validator, thresholdPublicKey crypto.PubKey, ...) (*ValidatorSet, error)
- func ValidatorSetFromProto(vp *tmproto.ValidatorSet) (*ValidatorSet, error)
- func (vals *ValidatorSet) ABCIEquivalentValidatorUpdates() *abci.ValidatorSetUpdate
- func (vals *ValidatorSet) BasicInfoString() string
- func (vals *ValidatorSet) Copy() *ValidatorSet
- func (vals *ValidatorSet) CopyIncrementProposerPriority(times int32) *ValidatorSet
- func (vals *ValidatorSet) Equals(other *ValidatorSet) bool
- func (vals *ValidatorSet) GetByIndex(index int32) *Validator
- func (vals *ValidatorSet) GetByProTxHash(proTxHash []byte) (index int32, val *Validator)
- func (vals *ValidatorSet) GetProTxHashes() []crypto.ProTxHash
- func (vals *ValidatorSet) GetProTxHashesAsByteArrays() [][]byte
- func (vals *ValidatorSet) GetProTxHashesOrdered() []crypto.ProTxHash
- func (vals *ValidatorSet) GetProposer() (proposer *Validator)
- func (vals *ValidatorSet) GetPublicKeys() []crypto.PubKey
- func (vals *ValidatorSet) HasProTxHash(proTxHash crypto.ProTxHash) bool
- func (vals *ValidatorSet) Hash() tmbytes.HexBytes
- func (vals *ValidatorSet) IncrementProposerPriority(times int32)
- func (vals *ValidatorSet) IsNilOrEmpty() bool
- func (vals *ValidatorSet) Iterate(fn func(index int, val *Validator) bool)
- func (vals *ValidatorSet) MarshalZerologObject(e *zerolog.Event)
- func (vals *ValidatorSet) QuorumHashValid() error
- func (vals *ValidatorSet) QuorumTypeMemberCount() int
- func (vals *ValidatorSet) QuorumTypeThresholdCount() int
- func (vals *ValidatorSet) QuorumVotingPower() int64
- func (vals *ValidatorSet) QuorumVotingThresholdPower() int64
- func (vals *ValidatorSet) RescalePriorities(diffMax int64)
- func (vals *ValidatorSet) Size() int
- func (vals *ValidatorSet) String() string
- func (vals *ValidatorSet) StringIndented(indent string) string
- func (vals *ValidatorSet) StringIndentedBasic(indent string) string
- func (vals *ValidatorSet) ThresholdPublicKeyValid() error
- func (vals *ValidatorSet) ToProto() (*tmproto.ValidatorSet, error)
- func (vals *ValidatorSet) TotalVotingPower() int64
- func (vals *ValidatorSet) UpdateWithChangeSet(changes []*Validator, newThresholdPublicKey crypto.PubKey, ...) error
- func (vals *ValidatorSet) ValidateBasic() error
- func (vals *ValidatorSet) VerifyCommit(chainID string, blockID BlockID, height int64, commit *Commit) error
- type ValidatorsByProTxHashes
- type ValidatorsByVotingPower
- type VersionParams
- type Vote
- func (vote *Vote) Copy() *Vote
- func (vote *Vote) HasVoteMessage() *tmcons.HasVote
- func (vote *Vote) MarshalZerologObject(e *zerolog.Event)
- func (vote *Vote) PopulateSignsFromProto(pv *tmproto.Vote) error
- func (vote *Vote) PopulateSignsToProto(pv *tmproto.Vote) error
- func (vote *Vote) String() string
- func (vote *Vote) ToProto() *tmproto.Vote
- func (vote *Vote) ValidateBasic() error
- func (vote *Vote) ValidateWithExtension() error
- func (vote *Vote) Verify(chainID string, quorumType btcjson.LLMQType, quorumHash crypto.QuorumHash, ...) error
- func (vote *Vote) VerifyExtensionSign(chainID string, pubKey crypto.PubKey, quorumType btcjson.LLMQType, ...) error
- type VoteExtensionIf
- type VoteExtensions
- func (e *VoteExtensions) Add(ext tmproto.VoteExtension)
- func (e VoteExtensions) Copy() VoteExtensions
- func (e VoteExtensions) CopySignsFromProto(src tmproto.VoteExtensions) error
- func (e VoteExtensions) CopySignsToProto(dest tmproto.VoteExtensions) error
- func (e VoteExtensions) Filter(fn func(ext VoteExtensionIf) bool) VoteExtensions
- func (e VoteExtensions) Fingerprint() []byte
- func (e VoteExtensions) GetExtensions() [][]byte
- func (e VoteExtensions) GetSignatures() [][]byte
- func (e VoteExtensions) IsEmpty() bool
- func (e VoteExtensions) IsSameWithProto(right tmproto.VoteExtensions) bool
- func (e VoteExtensions) Len() int
- func (e VoteExtensions) MarshalZerologArray(a *zerolog.Array)
- func (e VoteExtensions) SetSignatures(src [][]byte) error
- func (e VoteExtensions) SignItems(chainID string, quorumType btcjson.LLMQType, quorumHash []byte, height int64, ...) ([]SignItem, error)
- func (e VoteExtensions) ToExtendProto() []*abci.ExtendVoteExtension
- func (e VoteExtensions) ToProto() []*tmproto.VoteExtension
- func (e VoteExtensions) Validate() error
- type VoteSet
- func (voteSet *VoteSet) AddVote(vote *Vote) (added bool, err error)
- func (voteSet *VoteSet) BitArray() *bits.BitArray
- func (voteSet *VoteSet) BitArrayByBlockID(blockID BlockID) *bits.BitArray
- func (voteSet *VoteSet) BitArrayString() string
- func (voteSet *VoteSet) ChainID() string
- func (voteSet *VoteSet) GetByIndex(valIndex int32) *Vote
- func (voteSet *VoteSet) GetByProTxHash(proTxHash []byte) *Vote
- func (voteSet *VoteSet) GetHeight() int64
- func (voteSet *VoteSet) GetRound() int32
- func (voteSet *VoteSet) HasAll() bool
- func (voteSet *VoteSet) HasTwoThirdsAny() bool
- func (voteSet *VoteSet) HasTwoThirdsMajority() bool
- func (voteSet *VoteSet) IsCommit() bool
- func (voteSet *VoteSet) IsQuorumReached() bool
- func (voteSet *VoteSet) List() []Vote
- func (voteSet *VoteSet) MakeCommit() *Commit
- func (voteSet *VoteSet) MarshalJSON() ([]byte, error)
- func (voteSet *VoteSet) MarshalZerologObject(e *zerolog.Event)
- func (voteSet *VoteSet) SetPeerMaj23(peerID string, blockID BlockID, height int64, round int32) error
- func (voteSet *VoteSet) Size() int
- func (voteSet *VoteSet) String() string
- func (voteSet *VoteSet) StringIndented(indent string) string
- func (voteSet *VoteSet) StringShort() string
- func (voteSet *VoteSet) TwoThirdsMajority() (blockID BlockID, ok bool)
- func (voteSet *VoteSet) Type() byte
- func (voteSet *VoteSet) VoteStrings() []string
- type VoteSetJSON
- type VoteSetReader
Constants ¶
const ( // MaxHeaderBytes is a maximum header size. // NOTE: Because app hash can be of arbitrary size, the header is therefore not // capped in size and thus this number should be seen as a soft max MaxHeaderBytes int64 = 726 MaxCoreChainLockSize int64 = 132 // MaxOverheadForBlock - maximum overhead to encode a block (up to // MaxBlockSizeBytes in size) not including it's parts except Data. // This means it also excludes the overhead for individual transactions. // // Uvarint length of MaxBlockSizeBytes: 4 bytes // 2 fields (2 embedded): 2 bytes // Uvarint length of Data.Txs: 4 bytes // Data.Txs field: 1 byte MaxOverheadForBlock int64 = 11 )
const ( // Block level events for mass consumption by users. // These events are triggered from the state package, // after a block has been committed. // These are also used by the tx indexer for async indexing. // All of this data can be fetched through the rpc. EventNewBlockValue = "NewBlock" EventNewBlockHeaderValue = "NewBlockHeader" EventNewEvidenceValue = "NewEvidence" EventTxValue = "Tx" EventValidatorSetUpdateValue = "ValidatorSetUpdate" // Internal consensus events. // These are used for testing the consensus state machine. // They can also be used to build real-time consensus visualizers. EventCompleteProposalValue = "CompleteProposal" // The BlockSyncStatus event will be emitted when the node switching // state sync mechanism between the consensus reactor and the blocksync reactor. EventBlockSyncStatusValue = "BlockSyncStatus" EventLockValue = "Lock" EventNewRoundValue = "NewRound" EventNewRoundStepValue = "NewRoundStep" EventPolkaValue = "Polka" EventRelockValue = "Relock" EventStateSyncStatusValue = "StateSyncStatus" EventTimeoutProposeValue = "TimeoutPropose" EventTimeoutWaitValue = "TimeoutWait" EventValidBlockValue = "ValidBlock" EventVoteValue = "Vote" EventCommitValue = "Commit" // Events emitted by the evidence reactor when evidence is validated // and before it is committed EventEvidenceValidatedValue = "EvidenceValidated" )
Reserved event types (alphabetically sorted).
const ( // EventTypeKey is a reserved composite key for event name. EventTypeKey = "tm.event" // TxHashKey is a reserved key, used to specify transaction's hash. // see EventBus#PublishEventTx TxHashKey = "tx.hash" // TxHeightKey is a reserved key, used to specify transaction block's height. // see EventBus#PublishEventTx TxHeightKey = "tx.height" // BlockHeightKey is a reserved key used for indexing FinalizeBlock events. BlockHeightKey = "block.height" )
const ( // MaxBlockSizeBytes is the maximum permitted size of the blocks. MaxBlockSizeBytes = 104857600 // 100MB // BlockPartSizeBytes is the size of one block part. BlockPartSizeBytes uint32 = 65536 // 64kB // MaxBlockPartsCount is the maximum number of block parts. MaxBlockPartsCount = (MaxBlockSizeBytes / BlockPartSizeBytes) + 1 )
const ( MockSignerClient = PrivValidatorType(0x00) // mock signer FileSignerClient = PrivValidatorType(0x01) // signer client via file RetrySignerClient = PrivValidatorType(0x02) // signer client with retry via socket SignerSocketClient = PrivValidatorType(0x03) // signer client via socket ErrorMockSignerClient = PrivValidatorType(0x04) // error mock signer SignerGRPCClient = PrivValidatorType(0x05) // signer client via gRPC DashCoreRPCClient = PrivValidatorType(0x06) // signer client via gRPC )
const ( ABCIPubKeyTypeEd25519 = ed25519.KeyType ABCIPubKeyTypeSecp256k1 = secp256k1.KeyType ABCIPubKeyTypeBLS12381 = bls12381.KeyType ABCIEvidenceTypeDuplicateVote = "duplicate/vote" ABCIEvidenceTypePhantom = "phantom" ABCIEvidenceTypeLunatic = "lunatic" ABCIEvidenceTypePotentialAmnesia = "potential_amnesia" ABCIEvidenceTypeMock = "mock/evidence" )
const ( // MaxTotalVotingPower - the maximum allowed total voting power. // It needs to be sufficiently small to, in all cases: // 1. prevent clipping in incrementProposerPriority() // 2. let (diff+diffMax-1) not overflow in IncrementProposerPriority() // (Proof of 1 is tricky, left to the reader). // It could be higher, but this is sufficiently large for our purposes, // and leaves room for defensive purposes. MaxTotalVotingPower = int64(math.MaxInt64) / 8 DefaultDashVotingPower = int64(100) // PriorityWindowSizeFactor - is a constant that when multiplied with the // total voting power gives the maximum allowed distance between validator // priorities. PriorityWindowSizeFactor = 2 )
const ( // MaxVoteBytes is a maximum vote size (including amino overhead). MaxVoteBytesBLS12381 int64 = 241 MaxVoteBytesEd25519 int64 = 209 )
const EmptyNetAddress = "<nil-NetAddress>"
EmptyNetAddress defines the string representation of an empty NetAddress
const (
// MaxChainIDLen is a maximum length of the chain ID.
MaxChainIDLen = 50
)
const ( // MaxCommitOverheadBytes is the max size of commit, with overhead but without vote extensions: // (110+2) for BlockID, (8+2) for Height, (4+2) for Round, // (32+2) for QuorumHash, (96+2) for Block signature. MaxCommitOverheadBytes int64 = (110 + 2) + (8 + 2) + (4 + 2) + (32 + 2) + (96 + 2) + 0 )
const ( // MaxVotesCount is the maximum number of votes in a set. Used in ValidateBasic funcs for // protection against DOS attacks. Note this implies a corresponding equal limit to // the number of validators. MaxVotesCount = 10000 )
const NodeIDByteLength = crypto.AddressSize
NodeIDByteLength is the length of a crypto.Address. Currently only 20. FIXME: support other length addresses?
const (
SignatureSize = bls12381.SignatureSize
)
const StateIDVersion = 1
const TimeFormat = time.RFC3339Nano
TimeFormat is used for generating the sigs
Variables ¶
var ( EventNewBlock = abci.Event{ Type: strings.Split(EventTypeKey, ".")[0], Attributes: []abci.EventAttribute{ { Key: strings.Split(EventTypeKey, ".")[1], Value: EventNewBlockValue, }, }, } EventNewBlockHeader = abci.Event{ Type: strings.Split(EventTypeKey, ".")[0], Attributes: []abci.EventAttribute{ { Key: strings.Split(EventTypeKey, ".")[1], Value: EventNewBlockHeaderValue, }, }, } EventNewEvidence = abci.Event{ Type: strings.Split(EventTypeKey, ".")[0], Attributes: []abci.EventAttribute{ { Key: strings.Split(EventTypeKey, ".")[1], Value: EventNewEvidenceValue, }, }, } EventTx = abci.Event{ Type: strings.Split(EventTypeKey, ".")[0], Attributes: []abci.EventAttribute{ { Key: strings.Split(EventTypeKey, ".")[1], Value: EventTxValue, }, }, } )
Pre-populated ABCI Tendermint-reserved events
var ( EventQueryCompleteProposal = QueryForEvent(EventCompleteProposalValue) EventQueryLock = QueryForEvent(EventLockValue) EventQueryNewBlock = QueryForEvent(EventNewBlockValue) EventQueryNewBlockHeader = QueryForEvent(EventNewBlockHeaderValue) EventQueryNewEvidence = QueryForEvent(EventNewEvidenceValue) EventQueryNewRound = QueryForEvent(EventNewRoundValue) EventQueryNewRoundStep = QueryForEvent(EventNewRoundStepValue) EventQueryPolka = QueryForEvent(EventPolkaValue) EventQueryRelock = QueryForEvent(EventRelockValue) EventQueryTimeoutPropose = QueryForEvent(EventTimeoutProposeValue) EventQueryTimeoutWait = QueryForEvent(EventTimeoutWaitValue) EventQueryTx = QueryForEvent(EventTxValue) EventQueryValidatorSetUpdates = QueryForEvent(EventValidatorSetUpdateValue) EventQueryValidBlock = QueryForEvent(EventValidBlockValue) EventQueryVote = QueryForEvent(EventVoteValue) EventQueryBlockSyncStatus = QueryForEvent(EventBlockSyncStatusValue) EventQueryStateSyncStatus = QueryForEvent(EventStateSyncStatusValue) EventQueryEvidenceValidated = QueryForEvent(EventEvidenceValidatedValue) )
var ( ErrPartSetUnexpectedIndex = errors.New("error part set unexpected index") ErrPartSetInvalidProof = errors.New("error part set invalid proof") )
var ( ErrInvalidBlockPartSignature = errors.New("error invalid block part signature") ErrInvalidBlockPartHash = errors.New("error invalid block part hash") )
var ( // ErrNoHostname is returned when no hostname is set for the validator address ErrNoHostname = errors.New("no hostname") // ErrNoPort is returned when no valid port is set for the validator address ErrNoPort = errors.New("no port") )
var ( ErrTotalVotingPowerOverflow = fmt.Errorf("total voting power of resulting valset exceeds max %d", MaxTotalVotingPower) ErrValidatorSetNilOrEmpty = errors.New("validator set is nil or empty") )
ErrTotalVotingPowerOverflow is returned if the total voting power of the resulting validator set exceeds MaxTotalVotingPower.
var ( ErrVoteUnexpectedStep = errors.New("unexpected step") ErrVoteInvalidValidatorIndex = errors.New("invalid validator index") ErrVoteInvalidValidatorAddress = errors.New("invalid validator address") ErrVoteInvalidSignature = errors.New("invalid signature") ErrVoteInvalidBlockHash = errors.New("invalid block hash") ErrVoteNonDeterministicSignature = errors.New("non-deterministic signature") ErrVoteNil = errors.New("nil vote") ErrVoteInvalidExtension = errors.New("invalid vote extension") ErrVoteExtensionTypeWrongForRequestID = errors.New("provided vote extension type does not support sign request ID") ErrVoteInvalidValidatorProTxHash = errors.New("invalid validator pro_tx_hash") ErrVoteInvalidValidatorPubKeySize = errors.New("invalid validator public key size") ErrVoteMissingValidatorPubKey = errors.New("missing validator public key") ErrVoteInvalidBlockSignature = errors.New("invalid block signature") ErrVoteInvalidStateSignature = errors.New("invalid state signature") ErrVoteStateSignatureShouldBeNil = errors.New("state signature when voting for nil block") )
var ABCIPubKeyTypesToNames = map[string]string{ ABCIPubKeyTypeEd25519: ed25519.PubKeyName, ABCIPubKeyTypeSecp256k1: secp256k1.PubKeyName, ABCIPubKeyTypeBLS12381: bls12381.PubKeyName, }
var ErrTxInCache = errors.New("tx already exists in cache")
ErrTxInCache is returned to the client if we saw tx earlier
var ErroringMockPVErr = errors.New("erroringMockPV always returns an error")
var PB2TM = pb2tm{}
PB2TM is used for converting protobuf ABCI to Tendermint ABCI. UNSTABLE
var TM2PB = tm2pb{}
TM2PB is used for converting Tendermint ABCI to protobuf ABCI. UNSTABLE
Functions ¶
func BlockRequestID ¶
BlockRequestID returns a block request ID
func CanonicalTime ¶
CanonicalTime can be used to stringify time in a canonical way.
func CanonicalizeProposal ¶
func CanonicalizeProposal(chainID string, proposal *tmproto.Proposal) tmproto.CanonicalProposal
CanonicalizeVote transforms the given Proposal to a CanonicalProposal.
func CanonicalizeVoteExtension ¶
func CanonicalizeVoteExtension(chainID string, ext *tmproto.VoteExtension, height int64, round int32) (tmproto.CanonicalVoteExtension, error)
CanonicalizeVoteExtension extracts the vote extension from the given vote and constructs a CanonicalizeVoteExtension struct, whose representation in bytes is what is signed in order to produce the vote extension's signature.
func ComputeProtoSizeForTxs ¶
ComputeProtoSizeForTxs wraps the transactions in tmproto.Data{} and calculates the size. https://developers.google.com/protocol-buffers/docs/encoding
func EventQueryTxFor ¶
func EvidenceToProto ¶
EvidenceToProto is a generalized function for encoding evidence that conforms to the evidence interface to protobuf
func GenKeysForQuorumHash ¶
func GenKeysForQuorumHash(quorumHash crypto.QuorumHash) func(pv *MockPV)
GenKeysForQuorumHash generates the quorum keys for passed quorum hash
func GenerateValidatorSet ¶
func GenerateValidatorSet(valParams []ValSetParam, opts ...ValSetOptionFunc) (*ValidatorSet, []PrivValidator)
GenerateValidatorSet generates a validator set and a list of private validators
func IsErrNotEnoughVotingPowerSigned ¶
IsErrNotEnoughVotingPowerSigned returns true if err is ErrNotEnoughVotingPowerSigned.
func IsPreCheckError ¶
IsPreCheckError returns true if err is due to pre check failure.
func IsVoteTypeValid ¶
func IsVoteTypeValid(t tmproto.SignedMsgType) bool
IsVoteTypeValid returns true if t is a valid vote type.
func MaxDataBytes ¶
MaxDataBytes returns the maximum size of block's data. If `commit` is nil, it is assumed to use `MaxCommitOverheadBytes`
func MaxDataBytesNoEvidence ¶
MaxDataBytesNoEvidence returns the maximum size of block's data when no evidence is used.
func MaxVoteBytesForKeyType ¶
func ProposalBlockSignBytes ¶
ProposalBlockSignBytes returns the proto-encoding of the canonicalized Proposal, for signing. Panics if the marshaling fails.
The encoded Protobuf message is varint length-prefixed (using MarshalDelimited) for backwards-compatibility with the Amino encoding, due to e.g. hardware devices that rely on this encoding.
See CanonicalizeProposal
func ProposalBlockSignID ¶
func ProposalRequestID ¶
func ProposalRequestIDProto ¶
func QueryForEvent ¶
func RandStateID ¶
func RandValidatorSet ¶
func RandValidatorSet(n int) (*ValidatorSet, []PrivValidator)
RandValidatorSet returns a randomized validator set (size: +numValidators+), where each validator has the same default voting power.
func UseProTxHash ¶
UseProTxHash sets pro-tx-hash to a private-validator
func ValidateAppHash ¶
ValidateAppHash returns an error if the app hash size is invalid.
func ValidateHash ¶
ValidateHash returns an error if the hash is not empty, but its size != crypto.HashSize.
func ValidateSignatureSize ¶
ValidateSignatureSize returns an error if the signature is not empty, but its size != hash.Size.
func ValidatorListString ¶
ValidatorListString returns a prettified validator list for logging purposes.
func ValidatorUpdatesRegenerateOnProTxHashes ¶
func ValidatorUpdatesRegenerateOnProTxHashes(proTxHashes []crypto.ProTxHash) abci.ValidatorSetUpdate
func VoteBlockRequestIDProto ¶
func VoteBlockSignID ¶
func VoteBlockSignID(chainID string, vote *tmproto.Vote, quorumType btcjson.LLMQType, quorumHash []byte) []byte
VoteBlockSignID returns signID that should be signed for the block
func WithQuorumReached ¶
func WithQuorumReached(quorumReached bool) func(*SignsRecoverer)
WithQuorumReached sets a flag at SignsRecoverer to recovers threshold signatures for stateID and vote-extensions
func WithUpdatePrivValAt ¶
func WithUpdatePrivValAt(privVals []PrivValidator, height int64) func(opt *ValSetOptions)
WithUpdatePrivValAt sets a list of the private validators to update validator set at passed the height
Types ¶
type ABCIParams ¶
type ABCIParams struct {
RecheckTx bool `json:"recheck_tx"`
}
ABCIParams configure ABCI functionality specific to the Application Blockchain Interface.
func DefaultABCIParams ¶
func DefaultABCIParams() ABCIParams
type Block ¶
type Block struct { Header `json:"header"` Data `json:"data"` CoreChainLock *CoreChainLock `json:"core_chain_lock"` Evidence EvidenceList `json:"evidence"` LastCommit *Commit `json:"last_commit"` // contains filtered or unexported fields }
Block defines the atomic unit of a Tendermint blockchain.
func BlockFromProto ¶
FromProto sets a protobuf Block to the given pointer. It returns an error if the block is invalid.
func MakeBlock ¶
MakeBlock returns a new block with an empty header, except what can be computed from itself. It populates the same set of fields validated by ValidateBasic.
func (*Block) BlockID ¶
BlockID returns a block ID of this block. BlockID of a nil block is zero-value (BlockID{}) If partSet is nil, new partSet will be created
func (*Block) Hash ¶
Hash computes and returns the block hash. If the block is incomplete, block hash is nil for safety.
func (*Block) HashesTo ¶
HashesTo is a convenience function that checks if a block hashes to the given argument. Returns false if the block is nil or the hash is empty.
func (*Block) MakePartSet ¶
MakePartSet returns a PartSet containing parts of a serialized block. This is the form in which the block is gossipped to peers. CONTRACT: partSize is greater than zero.
func (*Block) MarshalZerologObject ¶ added in v1.0.0
func (*Block) SetCoreChainLock ¶
func (b *Block) SetCoreChainLock(chainlock *CoreChainLock)
func (*Block) SetDashParams ¶
func (b *Block) SetDashParams( lastCoreChainLockedBlockHeight uint32, coreChainLock *CoreChainLock, proposedAppVersion uint64, nextValidatorsHash tmbytes.HexBytes, )
SetDashParams sets dash's some parameters to a block this method should call if we need to provide specific dash data
func (*Block) StringIndented ¶
StringIndented returns an indented String.
Header Data Evidence LastCommit Hash
func (*Block) StringShort ¶
StringShort returns a shortened string representation of the block.
func (*Block) ValidateBasic ¶
ValidateBasic performs basic validation that doesn't involve state data. It checks the internal consistency of the block. Further validation is done using state#ValidateBlock.
type BlockEventPublisher ¶
type BlockEventPublisher interface { TxEventPublisher PublishEventNewBlock(EventDataNewBlock) error PublishEventNewBlockHeader(EventDataNewBlockHeader) error PublishEventNewEvidence(EventDataNewEvidence) error PublishEventValidatorSetUpdates(EventDataValidatorSetUpdate) error }
BlockEventPublisher publishes all block related events
type BlockID ¶
type BlockID struct { Hash tmbytes.HexBytes `json:"hash"` PartSetHeader PartSetHeader `json:"parts"` StateID tmbytes.HexBytes `json:"state_id"` }
BlockID
func BlockIDFromProto ¶
FromProto sets a protobuf BlockID to the given pointer. It returns an error if the block id is invalid.
func (BlockID) IsComplete ¶
IsComplete returns true if this is a valid BlockID of a non-nil block.
func (BlockID) String ¶
String returns a human readable string representation of the BlockID.
1. hash 2. part set header 3. state ID hash
See PartSetHeader#String
func (BlockID) ValidateBasic ¶
ValidateBasic performs basic validation.
type BlockIDFlag ¶
type BlockIDFlag byte
BlockIDFlag indicates which BlockID the signature is for.
const ( // BlockIDFlagAbsent - no vote was received from a validator. BlockIDFlagAbsent BlockIDFlag = iota + 1 // BlockIDFlagCommit - voted for the Commit.BlockID. BlockIDFlagCommit // BlockIDFlagNil - voted for nil. BlockIDFlagNil )
type BlockMeta ¶
type BlockMeta struct { BlockID BlockID `json:"block_id"` BlockSize int `json:"block_size,string"` Header Header `json:"header"` NumTxs int `json:"num_txs,string"` Round int32 `json:"round,string"` // dash fields HasCoreChainLock bool `json:"has_core_chain_lock"` }
BlockMeta contains meta information.
func NewBlockMeta ¶
NewBlockMeta returns a new BlockMeta.
func (*BlockMeta) ValidateBasic ¶
ValidateBasic performs basic validation.
type BlockParams ¶
type BlockParams struct { MaxBytes int64 `json:"max_bytes,string"` MaxGas int64 `json:"max_gas,string"` }
BlockParams define limits on the block size and gas plus minimum time between blocks.
func DefaultBlockParams ¶
func DefaultBlockParams() BlockParams
DefaultBlockParams returns a default BlockParams.
type Commit ¶
type Commit struct { // NOTE: The signatures are in order of proTxHash to preserve the bonded // ValidatorSet order. // Any peer with a block can gossip signatures by index with a peer without // recalculating the active ValidatorSet. Height int64 `json:"height"` Round int32 `json:"round"` BlockID BlockID `json:"block_id"` QuorumHash crypto.QuorumHash `json:"quorum_hash"` ThresholdBlockSignature []byte `json:"threshold_block_signature"` // ThresholdVoteExtensions keeps the list of recovered threshold signatures for vote-extensions ThresholdVoteExtensions tmproto.VoteExtensions `json:"threshold_vote_extensions"` // contains filtered or unexported fields }
Commit contains the evidence that a block was committed by a set of validators. NOTE: Commit is empty for height 1, but never nil.
func CommitFromProto ¶
CommitFromProto creates a commit from a protobuf commit message. It returns an error if the commit is invalid.
func NewCommit ¶
func NewCommit(height int64, round int32, blockID BlockID, voteExtensions VoteExtensions, commitSigns *CommitSigns) *Commit
NewCommit returns a new Commit.
func (*Commit) GetCanonicalVote ¶
GetCanonicalVote returns the message that is being voted on in the form of a vote without signatures.
func (*Commit) HasCommitMessage ¶
Broadcasts HasCommitMessage to peers that care.
func (*Commit) IsCommit ¶
IsCommit returns true if there is at least one signature. Implements VoteSetReader.
func (*Commit) MarshalZerologObject ¶
MarshalZerologObject formats this object for logging purposes
func (*Commit) StringIndented ¶
StringIndented returns a string representation of the commit.
func (*Commit) ToCommitInfo ¶
func (commit *Commit) ToCommitInfo() types.CommitInfo
ToCommitInfo convert and returns CommitInfo structure
func (*Commit) Type ¶
Type returns the vote type of the commit, which is always VoteTypePrecommit Implements VoteSetReader.
func (*Commit) ValidateBasic ¶
ValidateBasic performs basic validation that doesn't involve state data. Does not actually check the cryptographic signatures.
func (*Commit) VoteBlockRequestID ¶
VoteBlockRequestID returns the requestId Hash of the Vote corresponding to valIdx for signing.
Panics if valIdx >= commit.Size().
type CommitSigns ¶
type CommitSigns struct { QuorumSigns QuorumHash []byte }
CommitSigns is used to combine threshold signatures and quorum-hash that were used
func (*CommitSigns) CopyToCommit ¶
func (c *CommitSigns) CopyToCommit(commit *Commit)
CopyToCommit copies threshold signature to commit
commit.ThresholdVoteExtensions must be initialized
type ConsensusParams ¶
type ConsensusParams struct { Block BlockParams `json:"block"` Evidence EvidenceParams `json:"evidence"` Validator ValidatorParams `json:"validator"` Version VersionParams `json:"version"` Synchrony SynchronyParams `json:"synchrony"` Timeout TimeoutParams `json:"timeout"` ABCI ABCIParams `json:"abci"` }
ConsensusParams contains consensus critical parameters that determine the validity of blocks.
func ConsensusParamsFromProto ¶
func ConsensusParamsFromProto(pbParams tmproto.ConsensusParams) ConsensusParams
func DefaultConsensusParams ¶
func DefaultConsensusParams() *ConsensusParams
DefaultConsensusParams returns a default ConsensusParams.
func (*ConsensusParams) Complete ¶
func (params *ConsensusParams) Complete()
func (*ConsensusParams) Equals ¶
func (params *ConsensusParams) Equals(params2 *ConsensusParams) bool
func (ConsensusParams) HashConsensusParams ¶
func (params ConsensusParams) HashConsensusParams() tmbytes.HexBytes
Hash returns a hash of a subset of the parameters to store in the block header. Only the Block.MaxBytes and Block.MaxGas are included in the hash. This allows the ConsensusParams to evolve more without breaking the block protocol. No need for a Merkle tree here, just a small struct to hash. TODO: We should hash the other parameters as well
func (ConsensusParams) IsZero ¶
func (params ConsensusParams) IsZero() bool
func (*ConsensusParams) ToProto ¶
func (params *ConsensusParams) ToProto() tmproto.ConsensusParams
func (ConsensusParams) UpdateConsensusParams ¶
func (params ConsensusParams) UpdateConsensusParams(params2 *tmproto.ConsensusParams) ConsensusParams
Update returns a copy of the params with updates from the non-zero fields of p2. NOTE: note: must not modify the original
func (ConsensusParams) ValidateConsensusParams ¶
func (params ConsensusParams) ValidateConsensusParams() error
Validate validates the ConsensusParams to ensure all values are within their allowed limits, and returns an error if they are not.
type CoreChainLock ¶
type CoreChainLock struct { CoreBlockHeight uint32 `json:"core_block_height,string,omitempty"` // height of Chain Lock. CoreBlockHash []byte `json:"core_block_hash,omitempty"` // hash of Chain Lock. Signature []byte `json:"signature,omitempty"` // signature. }
func CoreChainLockFromProto ¶
func CoreChainLockFromProto(clp *tmproto.CoreChainLock) (*CoreChainLock, error)
FromProto sets a protobuf Header to the given pointer. It returns an error if the chain lock is invalid.
func NewMockChainLock ¶
func NewMockChainLock(height uint32) CoreChainLock
func (*CoreChainLock) IsZero ¶
func (cl *CoreChainLock) IsZero() bool
func (*CoreChainLock) MarshalZerologObject ¶ added in v1.0.0
func (cl *CoreChainLock) MarshalZerologObject(e *zerolog.Event)
func (*CoreChainLock) PopulateFromProto ¶
func (cl *CoreChainLock) PopulateFromProto(clp *tmproto.CoreChainLock) error
func (CoreChainLock) RequestID ¶
func (cl CoreChainLock) RequestID() []byte
func (*CoreChainLock) StringIndented ¶
func (cl *CoreChainLock) StringIndented(indent string) string
StringIndented returns a string representation of the header
func (*CoreChainLock) ToProto ¶
func (cl *CoreChainLock) ToProto() *tmproto.CoreChainLock
ToProto converts Header to protobuf
func (CoreChainLock) ValidateBasic ¶
func (cl CoreChainLock) ValidateBasic() error
ValidateBasic performs stateless validation on a Chain Lock returning an error if any validation fails. It does not verify the signature
type Data ¶
type Data struct { // Txs that will be applied by state @ block.Height+1. // NOTE: not all txs here are valid. We're just agreeing on the order first. // This means that block.AppHash does not include these txs. Txs Txs `json:"txs"` // contains filtered or unexported fields }
Data contains the set of transactions included in the block
func DataFromProto ¶
DataFromProto takes a protobuf representation of Data & returns the native type.
func (*Data) MarshalZerologObject ¶ added in v1.0.0
func (*Data) StringIndented ¶
StringIndented returns an indented string representation of the transactions.
type DuplicateVoteEvidence ¶
type DuplicateVoteEvidence struct { VoteA *Vote `json:"vote_a"` VoteB *Vote `json:"vote_b"` // abci specific information TotalVotingPower int64 `json:",string"` ValidatorPower int64 `json:",string"` Timestamp time.Time }
DuplicateVoteEvidence contains evidence of a single validator signing two conflicting votes.
func DuplicateVoteEvidenceFromProto ¶
func DuplicateVoteEvidenceFromProto(pb *tmproto.DuplicateVoteEvidence) (*DuplicateVoteEvidence, error)
DuplicateVoteEvidenceFromProto decodes protobuf into DuplicateVoteEvidence
func NewDuplicateVoteEvidence ¶
func NewDuplicateVoteEvidence(vote1, vote2 *Vote, blockTime time.Time, valSet *ValidatorSet) (*DuplicateVoteEvidence, error)
NewDuplicateVoteEvidence creates DuplicateVoteEvidence with right ordering given two conflicting votes. If one of the votes is nil, evidence returned is nil as well
func NewMockDuplicateVoteEvidence ¶
func NewMockDuplicateVoteEvidence( ctx context.Context, height int64, time time.Time, chainID string, quorumType btcjson.LLMQType, quorumHash crypto.QuorumHash, ) (*DuplicateVoteEvidence, error)
NewMockDuplicateVoteEvidence assumes the round to be 0 and the validator index to be 0
func NewMockDuplicateVoteEvidenceWithPrivValInValidatorSet ¶
func NewMockDuplicateVoteEvidenceWithPrivValInValidatorSet(height int64, time time.Time, pv PrivValidator, valSet *ValidatorSet, chainID string, quorumType btcjson.LLMQType, quorumHash crypto.QuorumHash) (*DuplicateVoteEvidence, error)
assumes voting power to be DefaultDashVotingPower and validator to be the only one in the set
func NewMockDuplicateVoteEvidenceWithValidator ¶
func NewMockDuplicateVoteEvidenceWithValidator( ctx context.Context, height int64, time time.Time, pv PrivValidator, chainID string, quorumType btcjson.LLMQType, quorumHash crypto.QuorumHash, ) (*DuplicateVoteEvidence, error)
NewMockDuplicateVoteEvidenceWithValidator assumes voting power to be DefaultDashVotingPower and validator to be the only one in the set TODO: discuss if this might be moved to some *_test.go file
func (*DuplicateVoteEvidence) ABCI ¶
func (dve *DuplicateVoteEvidence) ABCI() []abci.Misbehavior
ABCI returns the application relevant representation of the evidence
func (*DuplicateVoteEvidence) Bytes ¶
func (dve *DuplicateVoteEvidence) Bytes() []byte
Bytes returns the proto-encoded evidence as a byte array.
func (*DuplicateVoteEvidence) GenerateABCI ¶
func (dve *DuplicateVoteEvidence) GenerateABCI( val *Validator, valSet *ValidatorSet, evidenceTime time.Time, )
GenerateABCI populates the ABCI component of the evidence. This includes the validator power, timestamp and total voting power.
func (*DuplicateVoteEvidence) Hash ¶
func (dve *DuplicateVoteEvidence) Hash() []byte
Hash returns the hash of the evidence.
func (*DuplicateVoteEvidence) Height ¶
func (dve *DuplicateVoteEvidence) Height() int64
Height returns the height of the infraction
func (*DuplicateVoteEvidence) String ¶
func (dve *DuplicateVoteEvidence) String() string
String returns a string representation of the evidence.
func (*DuplicateVoteEvidence) Time ¶
func (dve *DuplicateVoteEvidence) Time() time.Time
Time returns the time of the infraction
func (*DuplicateVoteEvidence) ToProto ¶
func (dve *DuplicateVoteEvidence) ToProto() *tmproto.DuplicateVoteEvidence
ToProto encodes DuplicateVoteEvidence to protobuf
func (*DuplicateVoteEvidence) TypeTag ¶
func (*DuplicateVoteEvidence) TypeTag() string
TypeTag implements the jsontypes.Tagged interface.
func (*DuplicateVoteEvidence) ValidateABCI ¶
func (dve *DuplicateVoteEvidence) ValidateABCI( val *Validator, valSet *ValidatorSet, evidenceTime time.Time, ) error
ValidateABCI validates the ABCI component of the evidence by checking the timestamp, validator power and total voting power.
func (*DuplicateVoteEvidence) ValidateBasic ¶
func (dve *DuplicateVoteEvidence) ValidateBasic() error
ValidateBasic performs basic validation.
type ErrEvidenceOverflow ¶
ErrEvidenceOverflow is for when there the amount of evidence exceeds the max bytes.
func NewErrEvidenceOverflow ¶
func NewErrEvidenceOverflow(max, got int64) *ErrEvidenceOverflow
NewErrEvidenceOverflow returns a new ErrEvidenceOverflow where got > max.
func (*ErrEvidenceOverflow) Error ¶
func (err *ErrEvidenceOverflow) Error() string
Error returns a string representation of the error.
type ErrInvalidCommitHeight ¶
ErrInvalidCommitHeight is returned when we encounter a commit with an unexpected height.
func NewErrInvalidCommitHeight ¶
func NewErrInvalidCommitHeight(expected, actual int64) ErrInvalidCommitHeight
func (ErrInvalidCommitHeight) Error ¶
func (e ErrInvalidCommitHeight) Error() string
type ErrInvalidEvidence ¶
ErrInvalidEvidence wraps a piece of evidence and the error denoting how or why it is invalid.
func NewErrInvalidEvidence ¶
func NewErrInvalidEvidence(ev Evidence, err error) *ErrInvalidEvidence
NewErrInvalidEvidence returns a new EvidenceInvalid with the given err.
func (*ErrInvalidEvidence) Error ¶
func (err *ErrInvalidEvidence) Error() string
Error returns a string representation of the error.
type ErrInvalidVoteSignature ¶
type ErrInvalidVoteSignature error
type ErrMempoolIsFull ¶
ErrMempoolIsFull defines an error where Tendermint and the application cannot handle that much load.
func (ErrMempoolIsFull) Error ¶
func (e ErrMempoolIsFull) Error() string
type ErrNotEnoughVotingPowerSigned ¶
ErrNotEnoughVotingPowerSigned is returned when not enough validators signed a commit.
func (ErrNotEnoughVotingPowerSigned) Error ¶
func (e ErrNotEnoughVotingPowerSigned) Error() string
type ErrPreCheck ¶
type ErrPreCheck struct {
Reason error
}
ErrPreCheck defines an error where a transaction fails a pre-check.
func (ErrPreCheck) Error ¶
func (e ErrPreCheck) Error() string
type ErrTxTooLarge ¶
ErrTxTooLarge defines an error when a transaction is too big to be sent in a message to other peers.
func (ErrTxTooLarge) Error ¶
func (e ErrTxTooLarge) Error() string
type ErrVoteConflictingVotes ¶
func NewConflictingVoteError ¶
func NewConflictingVoteError(vote1, vote2 *Vote) *ErrVoteConflictingVotes
func (*ErrVoteConflictingVotes) Error ¶
func (err *ErrVoteConflictingVotes) Error() string
type ErroringMockPV ¶
type ErroringMockPV struct {
MockPV
}
func NewErroringMockPV ¶
func NewErroringMockPV() *ErroringMockPV
func (*ErroringMockPV) GetPubKey ¶
func (pv *ErroringMockPV) GetPubKey(_ctx context.Context, _quorumHash crypto.QuorumHash) (crypto.PubKey, error)
GetPubKey Implements PrivValidator.
func (*ErroringMockPV) SignProposal ¶
func (pv *ErroringMockPV) SignProposal( _ctx context.Context, _chainID string, _quorumType btcjson.LLMQType, _quorumHash crypto.QuorumHash, _proposal *tmproto.Proposal, ) (tmbytes.HexBytes, error)
SignProposal Implements PrivValidator.
type EventData ¶
type EventData interface { // The value must support encoding as a type-tagged JSON object. jsontypes.Tagged }
EventData is satisfied by types that can be published as event data.
Implementations of this interface that contain ABCI event metadata should also implement the eventlog.ABCIEventer extension interface to expose those metadata to the event log machinery. Event data that do not contain ABCI metadata can safely omit this.
type EventDataBlockSyncStatus ¶
type EventDataBlockSyncStatus struct { Complete bool `json:"complete"` Height int64 `json:"height,string"` }
EventDataBlockSyncStatus shows the fastsync status and the height when the node state sync mechanism changes.
func (EventDataBlockSyncStatus) TypeTag ¶
func (EventDataBlockSyncStatus) TypeTag() string
TypeTag implements the required method of jsontypes.Tagged.
type EventDataCommit ¶
type EventDataCommit struct {
Commit *Commit
}
func (EventDataCommit) TypeTag ¶
func (EventDataCommit) TypeTag() string
TypeTag implements the required method of jsontypes.Tagged.
type EventDataCompleteProposal ¶
type EventDataCompleteProposal struct { Height int64 `json:"height,string"` Round int32 `json:"round"` Step string `json:"step"` BlockID BlockID `json:"block_id"` }
func (EventDataCompleteProposal) TypeTag ¶
func (EventDataCompleteProposal) TypeTag() string
TypeTag implements the required method of jsontypes.Tagged.
type EventDataEvidenceValidated ¶
type EventDataEvidenceValidated struct { Evidence Evidence `json:"evidence"` Height int64 `json:"height,string"` }
func (EventDataEvidenceValidated) TypeTag ¶
func (EventDataEvidenceValidated) TypeTag() string
TypeTag implements the required method of jsontypes.Tagged.
type EventDataNewBlock ¶
type EventDataNewBlock struct { Block *Block `json:"block"` BlockID BlockID `json:"block_id"` ResultProcessProposal abci.ResponseProcessProposal `json:"result_finalize_block"` }
func (EventDataNewBlock) ABCIEvents ¶
func (e EventDataNewBlock) ABCIEvents() []abci.Event
ABCIEvents implements the eventlog.ABCIEventer interface.
func (EventDataNewBlock) TypeTag ¶
func (EventDataNewBlock) TypeTag() string
TypeTag implements the required method of jsontypes.Tagged.
type EventDataNewBlockHeader ¶
type EventDataNewBlockHeader struct { Header Header `json:"header"` NumTxs int64 `json:"num_txs,string"` // Number of txs in a block ResultProcessProposal abci.ResponseProcessProposal `json:"result_process_proposal"` }
func (EventDataNewBlockHeader) ABCIEvents ¶
func (e EventDataNewBlockHeader) ABCIEvents() []abci.Event
ABCIEvents implements the eventlog.ABCIEventer interface.
func (EventDataNewBlockHeader) TypeTag ¶
func (EventDataNewBlockHeader) TypeTag() string
TypeTag implements the required method of jsontypes.Tagged.
type EventDataNewEvidence ¶
type EventDataNewEvidence struct { Evidence Evidence `json:"evidence"` Height int64 `json:"height,string"` }
func (EventDataNewEvidence) TypeTag ¶
func (EventDataNewEvidence) TypeTag() string
TypeTag implements the required method of jsontypes.Tagged.
type EventDataNewRound ¶
type EventDataNewRound struct { Height int64 `json:"height,string"` Round int32 `json:"round"` Step string `json:"step"` Proposer ValidatorInfo `json:"proposer"` }
func (EventDataNewRound) TypeTag ¶
func (EventDataNewRound) TypeTag() string
TypeTag implements the required method of jsontypes.Tagged.
type EventDataRoundState ¶
type EventDataRoundState struct { Height int64 `json:"height,string"` Round int32 `json:"round"` Step string `json:"step"` }
NOTE: This goes into the replay WAL
func (EventDataRoundState) TypeTag ¶
func (EventDataRoundState) TypeTag() string
TypeTag implements the required method of jsontypes.Tagged.
type EventDataStateSyncStatus ¶
type EventDataStateSyncStatus struct { Complete bool `json:"complete"` Height int64 `json:"height,string"` }
EventDataStateSyncStatus shows the statesync status and the height when the node state sync mechanism changes.
func (EventDataStateSyncStatus) TypeTag ¶
func (EventDataStateSyncStatus) TypeTag() string
TypeTag implements the required method of jsontypes.Tagged.
type EventDataString ¶
type EventDataString string
func (EventDataString) TypeTag ¶
func (EventDataString) TypeTag() string
TypeTag implements the required method of jsontypes.Tagged.
type EventDataTx ¶
All txs fire EventDataTx
func (EventDataTx) ABCIEvents ¶
func (e EventDataTx) ABCIEvents() []abci.Event
ABCIEvents implements the eventlog.ABCIEventer interface.
func (EventDataTx) TypeTag ¶
func (EventDataTx) TypeTag() string
TypeTag implements the required method of jsontypes.Tagged.
type EventDataValidatorSetUpdate ¶
type EventDataValidatorSetUpdate struct { ValidatorSetUpdates []*Validator `json:"validator_updates"` ThresholdPublicKey crypto.PubKey `json:"threshold_public_key"` QuorumHash crypto.QuorumHash `json:"quorum_hash"` }
func (EventDataValidatorSetUpdate) TypeTag ¶
func (EventDataValidatorSetUpdate) TypeTag() string
TypeTag implements the required method of jsontypes.Tagged.
type EventDataVote ¶
type EventDataVote struct {
Vote *Vote
}
func (EventDataVote) TypeTag ¶
func (EventDataVote) TypeTag() string
TypeTag implements the required method of jsontypes.Tagged.
type Evidence ¶
type Evidence interface { ABCI() []abci.Misbehavior // forms individual evidence to be sent to the application Bytes() []byte // bytes which comprise the evidence Hash() []byte // hash of the evidence Height() int64 // height of the infraction String() string // string format of the evidence Time() time.Time // time of the infraction ValidateBasic() error // basic consistency check // Implementations must support tagged encoding in JSON. jsontypes.Tagged }
Evidence represents any provable malicious activity by a validator. Verification logic for each evidence is part of the evidence module.
type EvidenceList ¶
type EvidenceList []Evidence
EvidenceList is a list of Evidence. Evidences is not a word.
func (EvidenceList) ByteSize ¶
func (evl EvidenceList) ByteSize() int64
ByteSize returns the total byte size of all the evidence
func (*EvidenceList) FromProto ¶
func (evl *EvidenceList) FromProto(eviList *tmproto.EvidenceList) error
FromProto sets a protobuf EvidenceList to the given pointer.
func (EvidenceList) Has ¶
func (evl EvidenceList) Has(evidence Evidence) bool
Has returns true if the evidence is in the EvidenceList.
func (EvidenceList) Hash ¶
func (evl EvidenceList) Hash() []byte
Hash returns the simple merkle root hash of the EvidenceList.
func (EvidenceList) MarshalJSON ¶
func (evl EvidenceList) MarshalJSON() ([]byte, error)
func (EvidenceList) String ¶
func (evl EvidenceList) String() string
func (EvidenceList) StringIndented ¶
func (evl EvidenceList) StringIndented(indent string) string
StringIndented returns a string representation of the evidence.
func (EvidenceList) ToABCI ¶
func (evl EvidenceList) ToABCI() []abci.Misbehavior
ToABCI converts the evidence list to a slice of the ABCI protobuf messages for use when communicating the evidence to an application.
func (*EvidenceList) ToProto ¶
func (evl *EvidenceList) ToProto() (*tmproto.EvidenceList, error)
ToProto converts EvidenceList to protobuf
func (*EvidenceList) UnmarshalJSON ¶
func (evl *EvidenceList) UnmarshalJSON(data []byte) error
type EvidenceParams ¶
type EvidenceParams struct { MaxAgeNumBlocks int64 `json:"max_age_num_blocks,string"` // only accept new evidence more recent than this MaxAgeDuration time.Duration `json:"max_age_duration,string"` MaxBytes int64 `json:"max_bytes,string"` }
EvidenceParams determine how we handle evidence of malfeasance.
func DefaultEvidenceParams ¶
func DefaultEvidenceParams() EvidenceParams
DefaultEvidenceParams returns a default EvidenceParams.
type GenericVoteExtension ¶ added in v1.0.0
type GenericVoteExtension struct {
tmproto.VoteExtension
}
GenericVoteExtension is a default type of VoteExtension
func (GenericVoteExtension) Copy ¶ added in v1.0.0
func (e GenericVoteExtension) Copy() VoteExtensionIf
func (GenericVoteExtension) GetSignRequestId ¶ added in v1.0.0
func (e GenericVoteExtension) GetSignRequestId() []byte
func (GenericVoteExtension) IsThresholdRecoverable ¶ added in v1.0.0
func (e GenericVoteExtension) IsThresholdRecoverable() bool
func (GenericVoteExtension) MarshalZerologObject ¶ added in v1.0.0
func (e GenericVoteExtension) MarshalZerologObject(o *zerolog.Event)
func (*GenericVoteExtension) SetSignature ¶ added in v1.0.0
func (e *GenericVoteExtension) SetSignature(sig []byte)
func (GenericVoteExtension) ToProto ¶ added in v1.0.0
func (e GenericVoteExtension) ToProto() tmproto.VoteExtension
type GenesisDoc ¶
type GenesisDoc struct { GenesisTime time.Time ChainID string InitialHeight int64 ConsensusParams *ConsensusParams Validators []GenesisValidator AppHash tmbytes.HexBytes AppState []byte // dash fields InitialCoreChainLockedHeight uint32 `json:"initial_core_chain_locked_height"` InitialProposalCoreChainLock *tmproto.CoreChainLock `json:"initial_proposal_core_chain_lock"` ThresholdPublicKey crypto.PubKey `json:"validator_quorum_threshold_public_key"` QuorumType btcjson.LLMQType `json:"validator_quorum_type"` QuorumHash crypto.QuorumHash `json:"validator_quorum_hash"` }
GenesisDoc defines the initial conditions for a tendermint blockchain, in particular its validator set.
func GenesisDocFromFile ¶
func GenesisDocFromFile(genDocFile string) (*GenesisDoc, error)
GenesisDocFromFile reads JSON data from a file and unmarshalls it into a GenesisDoc.
func GenesisDocFromJSON ¶
func GenesisDocFromJSON(jsonBlob []byte) (*GenesisDoc, error)
GenesisDocFromJSON unmarshalls JSON data into a GenesisDoc.
func (GenesisDoc) MarshalJSON ¶
func (genDoc GenesisDoc) MarshalJSON() ([]byte, error)
func (*GenesisDoc) SaveAs ¶
func (genDoc *GenesisDoc) SaveAs(file string) error
SaveAs is a utility method for saving GenensisDoc as a JSON file.
func (*GenesisDoc) UnmarshalJSON ¶
func (genDoc *GenesisDoc) UnmarshalJSON(data []byte) error
func (*GenesisDoc) ValidateAndComplete ¶
func (genDoc *GenesisDoc) ValidateAndComplete() error
ValidateAndComplete checks that all necessary fields are present and fills in defaults for optional fields left empty
func (*GenesisDoc) ValidatorHash ¶
func (genDoc *GenesisDoc) ValidatorHash() []byte
ValidatorHash returns the hash of the validator set contained in the GenesisDoc
type GenesisValidator ¶
type GenesisValidator struct { PubKey crypto.PubKey Power int64 Name string ProTxHash crypto.ProTxHash }
GenesisValidator is an initial validator.
func MakeGenesisValsFromValidatorSet ¶
func MakeGenesisValsFromValidatorSet(valz *ValidatorSet) []GenesisValidator
MakeGenesisValsFromValidatorSet converts ValidatorSet data into a list of GenesisValidator
func (GenesisValidator) MarshalJSON ¶
func (g GenesisValidator) MarshalJSON() ([]byte, error)
func (*GenesisValidator) UnmarshalJSON ¶
func (g *GenesisValidator) UnmarshalJSON(data []byte) error
type HashedParams ¶
HashedParams is a subset of ConsensusParams. It is amino encoded and hashed into the Header.ConsensusHash.
type Header ¶
type Header struct { // basic block info Version version.Consensus `json:"version"` ChainID string `json:"chain_id"` Height int64 `json:"height,string"` CoreChainLockedHeight uint32 `json:"core_chain_locked_height"` Time time.Time `json:"time"` // prev block info LastBlockID BlockID `json:"last_block_id"` // hashes of block data LastCommitHash tmbytes.HexBytes `json:"last_commit_hash"` // commit from validators from the last block DataHash tmbytes.HexBytes `json:"data_hash"` // transactions // hashes from the app output from the prev block ValidatorsHash tmbytes.HexBytes `json:"validators_hash"` // validators for the current block NextValidatorsHash tmbytes.HexBytes `json:"next_validators_hash"` // validators for the next block ConsensusHash tmbytes.HexBytes `json:"consensus_hash"` // consensus params for current block NextConsensusHash tmbytes.HexBytes `json:"next_consensus_hash"` // consensus params for next block AppHash tmbytes.HexBytes `json:"app_hash"` // state after txs from current block // ResultsHash is the root hash of all results from the txs from the current block // see `deterministicResponseDeliverTx` to understand which parts of a tx is hashed into here ResultsHash tmbytes.HexBytes `json:"results_hash"` // consensus info EvidenceHash tmbytes.HexBytes `json:"evidence_hash"` // evidence included in the block ProposerProTxHash ProTxHash `json:"proposer_pro_tx_hash"` // original proposer of the block ProposedAppVersion uint64 `json:"proposed_protocol_version"` // proposer's latest available app protocol version }
Header defines the structure of a Tenderdash block header. NOTE: changes to the Header should be duplicated in: - header.Hash() - abci.Header - https://github.com/dashpay/tenderdash/blob/master/spec/core/data_structures.md
func HeaderFromProto ¶
FromProto sets a protobuf Header to the given pointer. It returns an error if the header is invalid.
func (*Header) Hash ¶
Hash returns the hash of the header. It computes a Merkle tree from the header fields ordered as they appear in the Header. Returns nil if ValidatorHash is missing, since a Header is not valid unless there is a ValidatorsHash (corresponding to the validator set).
func (Header) IsTimely ¶
IsTimely defines whether the the proposal time is correct, as per PBTS spec. NOTE: By definition, at initial height, recvTime MUST be genesis time.
func (*Header) Populate ¶
func (h *Header) Populate( version version.Consensus, chainID string, timestamp time.Time, lastBlockID BlockID, valHash, nextValHash []byte, consensusHash, nextConsensusHash []byte, appHash, resultsHash []byte, proposerProTxHash ProTxHash, proposedAppVersion uint64, )
Populate the Header with state-derived data. Call this after MakeBlock to complete the Header.
func (*Header) StringIndented ¶
StringIndented returns an indented string representation of the header.
func (Header) ValidateBasic ¶
ValidateBasic performs stateless validation on a Header returning an error if any validation fails.
NOTE: Timestamp validation is subtle and handled elsewhere.
type LightBlock ¶
type LightBlock struct { *SignedHeader `json:"signed_header"` ValidatorSet *ValidatorSet `json:"validator_set"` }
LightBlock is a SignedHeader and a ValidatorSet. It is the basis of the light client
func LightBlockFromProto ¶
func LightBlockFromProto(pb *tmproto.LightBlock) (*LightBlock, error)
LightBlockFromProto converts from protobuf back into the Lightblock. An error is returned if either the validator set or signed header are invalid
func (LightBlock) StateID ¶
func (lb LightBlock) StateID() tmproto.StateID
StateID() returns StateID for a given light block
func (LightBlock) String ¶
func (lb LightBlock) String() string
String returns a string representation of the LightBlock
func (LightBlock) StringIndented ¶
func (lb LightBlock) StringIndented(indent string) string
StringIndented returns an indented string representation of the LightBlock
SignedHeader ValidatorSet
func (*LightBlock) ToProto ¶
func (lb *LightBlock) ToProto() (*tmproto.LightBlock, error)
ToProto converts the LightBlock to protobuf
func (LightBlock) ValidateBasic ¶
func (lb LightBlock) ValidateBasic(chainID string) error
ValidateBasic checks that the data is correct and consistent
This does no verification of the signatures
type LightClientInfo ¶
type LightClientInfo struct { PrimaryID string `json:"primaryID"` WitnessesID []string `json:"witnessesID"` NumPeers int `json:"number_of_peers,string"` LastTrustedHeight int64 `json:"last_trusted_height,string"` LastTrustedHash tbytes.HexBytes `json:"last_trusted_hash"` LatestBlockTime time.Time `json:"latest_block_time"` TrustingPeriod string `json:"trusting_period"` // Boolean that reflects whether LatestBlockTime + trusting period is before // time.Now() (time when /status is called) TrustedBlockExpired bool `json:"trusted_block_expired"` }
Info about the status of the light client
type MockPV ¶
type MockPV struct { PrivateKeys map[string]crypto.QuorumKeys // heightString -> quorumHash UpdateHeights map[string]crypto.QuorumHash // quorumHash -> heightString FirstHeightOfQuorums map[string]string ProTxHash crypto.ProTxHash // contains filtered or unexported fields }
MockPV implements PrivValidator without any safety or persistence. Only use it for testing.
func NewMockPVForQuorum ¶
func NewMockPVForQuorum(quorumHash crypto.QuorumHash) *MockPV
func NewMockPVWithParams ¶
func NewMockPVWithParams( privKey crypto.PrivKey, proTxHash crypto.ProTxHash, quorumHash crypto.QuorumHash, thresholdPublicKey crypto.PubKey, breakProposalSigning bool, breakVoteSigning bool, ) *MockPV
NewMockPVWithParams allows one to create a MockPV instance, but with finer grained control over the operation of the mock validator. This is useful for mocking test failures.
func (*MockPV) ExtractIntoValidator ¶
func (*MockPV) GetFirstQuorumHash ¶
func (*MockPV) GetPrivateKey ¶
func (pv *MockPV) GetPrivateKey(_ctx context.Context, quorumHash crypto.QuorumHash) (crypto.PrivKey, error)
GetPrivateKey ...
func (*MockPV) GetProTxHash ¶
GetProTxHash implements PrivValidator.
func (*MockPV) GetPubKey ¶
func (pv *MockPV) GetPubKey(_ctx context.Context, quorumHash crypto.QuorumHash) (crypto.PubKey, error)
GetPubKey implements PrivValidator.
func (*MockPV) GetThresholdPublicKey ¶
func (pv *MockPV) GetThresholdPublicKey(_ctx context.Context, quorumHash crypto.QuorumHash) (crypto.PubKey, error)
GetThresholdPublicKey ...
func (*MockPV) SignProposal ¶
func (pv *MockPV) SignProposal( _ctx context.Context, chainID string, quorumType btcjson.LLMQType, quorumHash crypto.QuorumHash, proposal *tmproto.Proposal, ) (tmbytes.HexBytes, error)
SignProposal Implements PrivValidator.
func (*MockPV) SignVote ¶
func (pv *MockPV) SignVote( _ctx context.Context, chainID string, quorumType btcjson.LLMQType, quorumHash crypto.QuorumHash, vote *tmproto.Vote, _logger log.Logger) error
SignVote implements PrivValidator.
func (*MockPV) ThresholdPublicKeyForQuorumHash ¶
func (pv *MockPV) ThresholdPublicKeyForQuorumHash(_ctx context.Context, quorumHash crypto.QuorumHash) (crypto.PubKey, error)
ThresholdPublicKeyForQuorumHash ...
type MockPrivValidatorsByProTxHash ¶
type MockPrivValidatorsByProTxHash []*MockPV
func (MockPrivValidatorsByProTxHash) Len ¶
func (pvs MockPrivValidatorsByProTxHash) Len() int
func (MockPrivValidatorsByProTxHash) Less ¶
func (pvs MockPrivValidatorsByProTxHash) Less(i, j int) bool
func (MockPrivValidatorsByProTxHash) Swap ¶
func (pvs MockPrivValidatorsByProTxHash) Swap(i, j int)
type NetAddress ¶
NetAddress defines information about a peer on the network including its ID, IP address, and port.
func NewNetAddress ¶
func NewNetAddress(id NodeID, addr net.Addr) *NetAddress
NewNetAddress returns a new NetAddress using the provided TCP address. When testing, other net.Addr (except TCP) will result in using 0.0.0.0:0. When normal run, other net.Addr (except TCP) will panic. Panics if ID is invalid. TODO: socks proxies?
func NewNetAddressIPPort ¶
func NewNetAddressIPPort(ip net.IP, port uint16) *NetAddress
NewNetAddressIPPort returns a new NetAddress using the provided IP and port number.
func ParseAddressString ¶
func ParseAddressString(addr string) (*NetAddress, error)
ParseAddressString reads an address string, and returns the NetAddress struct with ip address, port and nodeID information, returning an error for any validation errors.
func (*NetAddress) Dial ¶
func (na *NetAddress) Dial() (net.Conn, error)
Dial calls net.Dial on the address.
func (*NetAddress) DialString ¶
func (na *NetAddress) DialString() string
func (*NetAddress) DialTimeout ¶
DialTimeout calls net.DialTimeout on the address.
func (*NetAddress) Equals ¶
func (na *NetAddress) Equals(other interface{}) bool
Equals reports whether na and other are the same addresses, including their ID, IP, and Port.
func (*NetAddress) Local ¶
func (na *NetAddress) Local() bool
Local returns true if it is a local address.
func (*NetAddress) OnionCatTor ¶
func (na *NetAddress) OnionCatTor() bool
func (*NetAddress) RFC1918 ¶
func (na *NetAddress) RFC1918() bool
func (*NetAddress) RFC3849 ¶
func (na *NetAddress) RFC3849() bool
func (*NetAddress) RFC3927 ¶
func (na *NetAddress) RFC3927() bool
func (*NetAddress) RFC3964 ¶
func (na *NetAddress) RFC3964() bool
func (*NetAddress) RFC4193 ¶
func (na *NetAddress) RFC4193() bool
func (*NetAddress) RFC4380 ¶
func (na *NetAddress) RFC4380() bool
func (*NetAddress) RFC4843 ¶
func (na *NetAddress) RFC4843() bool
func (*NetAddress) RFC4862 ¶
func (na *NetAddress) RFC4862() bool
func (*NetAddress) RFC6052 ¶
func (na *NetAddress) RFC6052() bool
func (*NetAddress) RFC6145 ¶
func (na *NetAddress) RFC6145() bool
func (*NetAddress) ReachabilityTo ¶
func (na *NetAddress) ReachabilityTo(o *NetAddress) int
ReachabilityTo checks whenever o can be reached from na.
func (*NetAddress) Routable ¶
func (na *NetAddress) Routable() bool
Routable returns true if the address is routable.
func (*NetAddress) Same ¶
func (na *NetAddress) Same(other interface{}) bool
Same returns true is na has the same non-empty ID or DialString as other.
func (*NetAddress) String ¶
func (na *NetAddress) String() string
String representation: <ID>@<IP>:<PORT>
func (*NetAddress) Valid ¶
func (na *NetAddress) Valid() error
For IPv4 these are either a 0 or all bits set address. For IPv6 a zero address or one that matches the RFC3849 documentation address format.
type NodeID ¶
type NodeID string
NodeID is a hex-encoded crypto.Address. It must be lowercased (for uniqueness) and of length 2*NodeIDByteLength.
func NewNodeID ¶
NewNodeID returns a lowercased (normalized) NodeID, or errors if the node ID is invalid.
func NodeIDFromPubKey ¶
NodeIDFromPubKey creates a node ID from a given PubKey address.
func (NodeID) AddressString ¶
IDAddressString returns id@hostPort. It strips the leading protocol from protocolHostPort if it exists.
type NodeInfo ¶
type NodeInfo struct { ProtocolVersion ProtocolVersion `json:"protocol_version"` // Authenticate NodeID NodeID `json:"id"` // authenticated identifier ListenAddr string `json:"listen_addr"` // accepting incoming // Node Type ProTxHash crypto.ProTxHash // Check compatibility. // Channels are HexBytes so easier to read as JSON Network string `json:"network"` // network/chain ID Version string `json:"version"` // major.minor.revision // Channels supported by this node. Use GetChannels() as a getter. Channels *tmsync.ConcurrentSlice[uint16] `json:"channels"` // channels this node knows about // ASCIIText fields Moniker string `json:"moniker"` // arbitrary moniker Other NodeInfoOther `json:"other"` // other application specific data }
NodeInfo is the basic node information exchanged between two peers during the Tendermint P2P handshake.
func (*NodeInfo) AddChannel ¶
AddChannel is used by the router when a channel is opened to add it to the node info
func (NodeInfo) CompatibleWith ¶
CompatibleWith checks if two NodeInfo are compatible with each other. CONTRACT: two nodes are compatible if the Block version and network match and they have at least one channel in common.
func (NodeInfo) GetProTxHash ¶
func (NodeInfo) Validate ¶
Validate checks the self-reported DefaultNodeInfo is safe. It returns an error if there are too many Channels, if there are any duplicate Channels, if the ListenAddr is malformed, or if the ListenAddr is a host name that can not be resolved to some IP. TODO: constraints for Moniker/Other? Or is that for the UI ? JAE: It needs to be done on the client, but to prevent ambiguous unicode characters, maybe it's worth sanitizing it here. In the future we might want to validate these, once we have a name-resolution system up. International clients could then use punycode (or we could use url-encoding), and we just need to be careful with how we handle that in our clients. (e.g. off by default).
type NodeInfoOther ¶
type NodeInfoOther struct { TxIndex string `json:"tx_index"` RPCAddress string `json:"rpc_address"` }
NodeInfoOther is the misc. applcation specific data
type NodeKey ¶
type NodeKey struct { // Canonical ID - hex-encoded pubkey's address (IDByteLength bytes) ID NodeID // Private key PrivKey crypto.PrivKey }
NodeKey is the persistent peer key. It contains the nodes private key for authentication.
func LoadNodeKey ¶
LoadNodeKey loads NodeKey located in filePath.
func LoadOrGenNodeKey ¶
LoadOrGenNodeKey attempts to load the NodeKey from the given filePath. If the file does not exist, it generates and saves a new NodeKey.
func (NodeKey) MarshalJSON ¶
func (*NodeKey) UnmarshalJSON ¶
type Part ¶
type Part struct { Index uint32 `json:"index"` Bytes tmbytes.HexBytes `json:"bytes"` Proof merkle.Proof `json:"proof"` }
func (*Part) MarshalZerologObject ¶
func (*Part) StringIndented ¶
StringIndented returns an indented Part.
See merkle.Proof#StringIndented
func (*Part) ValidateBasic ¶
ValidateBasic performs basic validation.
type PartSet ¶
type PartSet struct {
// contains filtered or unexported fields
}
func NewPartSetFromData ¶
Returns an immutable, full PartSet from the data bytes. The data bytes are split into "partSize" chunks, and merkle tree computed. CONTRACT: partSize is greater than zero.
func NewPartSetFromHeader ¶
func NewPartSetFromHeader(header PartSetHeader) *PartSet
Returns an empty PartSet ready to be populated.
func (*PartSet) HasHeader ¶
func (ps *PartSet) HasHeader(header PartSetHeader) bool
func (*PartSet) Header ¶
func (ps *PartSet) Header() PartSetHeader
func (*PartSet) IsComplete ¶
func (*PartSet) MarshalJSON ¶
type PartSetHeader ¶
func PartSetHeaderFromProto ¶
func PartSetHeaderFromProto(ppsh *tmproto.PartSetHeader) (*PartSetHeader, error)
FromProto sets a protobuf PartSetHeader to the given pointer
func (PartSetHeader) Equals ¶
func (psh PartSetHeader) Equals(other PartSetHeader) bool
func (PartSetHeader) IsZero ¶
func (psh PartSetHeader) IsZero() bool
func (PartSetHeader) String ¶
func (psh PartSetHeader) String() string
String returns a string representation of PartSetHeader.
1. total number of parts 2. first 6 bytes of the hash
func (*PartSetHeader) ToProto ¶
func (psh *PartSetHeader) ToProto() tmproto.PartSetHeader
ToProto converts PartSetHeader to protobuf
func (PartSetHeader) ValidateBasic ¶
func (psh PartSetHeader) ValidateBasic() error
ValidateBasic performs basic validation.
type PartSetReader ¶
type PartSetReader struct {
// contains filtered or unexported fields
}
func NewPartSetReader ¶
func NewPartSetReader(parts []*Part) *PartSetReader
type PrivValidator ¶
type PrivValidator interface { GetPubKey(ctx context.Context, quorumHash crypto.QuorumHash) (crypto.PubKey, error) UpdatePrivateKey( ctx context.Context, privateKey crypto.PrivKey, quorumHash crypto.QuorumHash, thresholdPublicKey crypto.PubKey, height int64, ) GetProTxHash(context.Context) (crypto.ProTxHash, error) GetFirstQuorumHash(context.Context) (crypto.QuorumHash, error) GetPrivateKey(ctx context.Context, quorumHash crypto.QuorumHash) (crypto.PrivKey, error) GetThresholdPublicKey(ctx context.Context, quorumHash crypto.QuorumHash) (crypto.PubKey, error) GetHeight(ctx context.Context, quorumHash crypto.QuorumHash) (int64, error) SignVote( ctx context.Context, chainID string, quorumType btcjson.LLMQType, quorumHash crypto.QuorumHash, vote *tmproto.Vote, logger log.Logger) error SignProposal( ctx context.Context, chainID string, quorumType btcjson.LLMQType, quorumHash crypto.QuorumHash, proposal *tmproto.Proposal) (tmbytes.HexBytes, error) ExtractIntoValidator(ctx context.Context, quorumHash crypto.QuorumHash) *Validator }
PrivValidator defines the functionality of a local Tendermint validator that signs votes and proposals, and never double signs.
type PrivValidatorType ¶
type PrivValidatorType uint8
PrivValidatorType defines the implementation types.
type PrivValidatorsByProTxHash ¶
type PrivValidatorsByProTxHash []PrivValidator
func (PrivValidatorsByProTxHash) Len ¶
func (pvs PrivValidatorsByProTxHash) Len() int
func (PrivValidatorsByProTxHash) Less ¶
func (pvs PrivValidatorsByProTxHash) Less(i, j int) bool
func (PrivValidatorsByProTxHash) Swap ¶
func (pvs PrivValidatorsByProTxHash) Swap(i, j int)
type Proposal ¶
type Proposal struct { Type tmproto.SignedMsgType Height int64 `json:"height,string"` Round int32 `json:"round"` // there can not be greater than 2_147_483_647 rounds POLRound int32 `json:"pol_round"` // -1 if null. BlockID BlockID `json:"block_id"` Timestamp time.Time `json:"timestamp"` Signature []byte `json:"signature"` // dash fields CoreChainLockedHeight uint32 `json:"core_height"` CoreChainLockUpdate *CoreChainLock }
Proposal defines a block proposal for the consensus. It refers to the block by BlockID field. It must be signed by the correct proposer for the given Height/Round to be considered valid. It may depend on votes from a previous round, a so-called Proof-of-Lock (POL) round, as noted in the POLRound. If POLRound >= 0, then BlockID corresponds to the block that is locked in POLRound.
func NewProposal ¶
func NewProposal(height int64, coreChainLockedHeight uint32, round int32, polRound int32, blockID BlockID, ts time.Time) *Proposal
NewProposal returns a new Proposal. If there is no POLRound, polRound should be -1.
func ProposalFromProto ¶
FromProto sets a protobuf Proposal to the given pointer. It returns an error if the proposal is invalid.
func (*Proposal) CheckTimely ¶ added in v1.0.0
CheckTimely validates that the block timestamp is 'timely' according to the proposer-based timestamp algorithm. To evaluate if a block is timely, its timestamp is compared to the local time of the validator along with the configured Precision and MsgDelay parameters. Specifically, a proposed block timestamp is considered timely if it is satisfies the following inequalities:
localtime >= proposedBlockTime - Precision localtime <= proposedBlockTime + MsgDelay + Precision
For more information on the meaning of 'timely', see the proposer-based timestamp specification: https://github.com/dashpay/tenderdash/tree/master/spec/consensus/proposer-based-timestamp
NOTE: by definition, at initial height, recvTime MUST be genesis time.
Returns ¶
0: timely -1: too early 1: too late
func (*Proposal) MarshalZerologObject ¶
MarshalZerologObject implements zerolog.LogObjectMarshaler
func (*Proposal) SetCoreChainLockUpdate ¶
func (p *Proposal) SetCoreChainLockUpdate(coreChainLock *CoreChainLock)
SetCoreChainLockUpdate sets CoreChainLock to Proposal.CoreChainLockUpdate field
func (*Proposal) String ¶
String returns a string representation of the Proposal.
1. height 2. round 3. block ID 4. POL round 5. first 6 bytes of signature 6. timestamp
See BlockID#String.
func (*Proposal) ValidateBasic ¶
ValidateBasic performs basic validation.
type ProtocolVersion ¶
type ProtocolVersion struct { P2P uint64 `json:"p2p,string"` Block uint64 `json:"block,string"` App uint64 `json:"app,string"` }
ProtocolVersion contains the protocol versions for the software.
type QuorumSignData ¶
QuorumSignData holds data which is necessary for signing and verification block, state, and each vote-extension in a list
func MakeQuorumSigns ¶
func MakeQuorumSigns( chainID string, quorumType btcjson.LLMQType, quorumHash crypto.QuorumHash, protoVote *types.Vote, ) (QuorumSignData, error)
MakeQuorumSigns builds signing data for block, state and vote-extensions each a sign-id item consist of request-id, raw data, hash of raw and id
func MakeQuorumSignsWithVoteSet ¶
func MakeQuorumSignsWithVoteSet(voteSet *VoteSet, vote *types.Vote) (QuorumSignData, error)
MakeQuorumSignsWithVoteSet creates and returns QuorumSignData struct built with a vote-set and an added vote
func (QuorumSignData) SignWithPrivkey ¶ added in v1.0.0
func (q QuorumSignData) SignWithPrivkey(key crypto.PrivKey) (QuorumSigns, error)
Signs items inside QuorumSignData using a given private key.
Mainly for testing.
func (QuorumSignData) Verify ¶
func (q QuorumSignData) Verify(pubKey crypto.PubKey, signatures QuorumSigns) error
Verify verifies a block and threshold vote extensions quorum signatures. It needs quorum to be reached so that we have enough signatures to verify.
func (QuorumSignData) VerifyBlock ¶ added in v1.0.0
func (q QuorumSignData) VerifyBlock(pubKey crypto.PubKey, signatures QuorumSigns) error
VerifyBlock verifies block signature
func (QuorumSignData) VerifyVoteExtensions ¶ added in v1.0.0
func (q QuorumSignData) VerifyVoteExtensions(pubKey crypto.PubKey, signatures QuorumSigns) error
VerifyVoteExtensions verifies threshold vote extensions signatures
type QuorumSigns ¶
type QuorumSigns struct { BlockSign []byte // List of vote extensions signatures. Order matters. VoteExtensionSignatures [][]byte }
QuorumSigns holds all created signatures, block, state and for each recovered vote-extensions
func NewQuorumSignsFromCommit ¶
func NewQuorumSignsFromCommit(commit *Commit) QuorumSigns
NewQuorumSignsFromCommit creates and returns QuorumSigns using threshold signatures from a commit.
Note it only uses threshold-revoverable vote extension signatures, as non-threshold signatures are not included in the commit
type SignItem ¶
type SignItem struct { LlmqType btcjson.LLMQType // Quorum type for which this sign item is created ID []byte // Request ID for quorum signing MsgHash []byte // Checksum of Raw QuorumHash []byte // Quorum hash for which this sign item is created SignHash []byte // Hash of llmqType, quorumHash, id, and msgHash - as provided to crypto sign/verify functions Msg []byte // Raw data to be signed, before any transformations; optional }
SignItem represents signing session data (in field SignItem.ID) that will be signed to get threshold signature share. Field names are the same as in Dash Core, but the meaning is different. See DIP-0007
func MakeBlockSignItem ¶
func MakeBlockSignItem(chainID string, vote *types.Vote, quorumType btcjson.LLMQType, quorumHash []byte) SignItem
MakeBlockSignItem creates SignItem struct for a block
func NewSignItem ¶
NewSignItem creates a new instance of SignItem with calculating a hash for a raw and creating signID
Arguments: - quorumType: quorum type - quorumHash: quorum hash - reqID: sign request ID - msg: raw data to be signed; it will be hashed with crypto.Checksum()
func NewSignItemFromHash ¶ added in v1.0.0
Create a new sign item without raw value, using provided hash.
func (SignItem) MarshalZerologObject ¶
func (*SignItem) UpdateSignHash ¶ added in v1.0.0
UpdateSignHash recalculates signHash field If reverse is true, then all []byte elements will be reversed before calculating signID
type SignedHeader ¶
SignedHeader is a header along with the commits that prove it.
func SignedHeaderFromProto ¶
func SignedHeaderFromProto(shp *tmproto.SignedHeader) (*SignedHeader, error)
SignedHeaderFromProto sets a protobuf SignedHeader to the given pointer. It returns an error if the header or the commit is invalid.
func (SignedHeader) String ¶
func (sh SignedHeader) String() string
String returns a string representation of SignedHeader.
func (SignedHeader) StringIndented ¶
func (sh SignedHeader) StringIndented(indent string) string
StringIndented returns an indented string representation of SignedHeader.
Header Commit
func (*SignedHeader) ToProto ¶
func (sh *SignedHeader) ToProto() *tmproto.SignedHeader
ToProto converts SignedHeader to protobuf
func (SignedHeader) ValidateBasic ¶
func (sh SignedHeader) ValidateBasic(chainID string) error
ValidateBasic does basic consistency checks and makes sure the header and commit are consistent.
NOTE: This does not actually check the cryptographic signatures. Make sure to use a Verifier to validate the signatures actually provide a significantly strong proof for this header's validity.
type SignsRecoverer ¶
type SignsRecoverer struct {
// contains filtered or unexported fields
}
SignsRecoverer is used to recover threshold block, state, and vote-extension signatures it's possible to avoid recovering state and vote-extension for specific case
func NewSignsRecoverer ¶
func NewSignsRecoverer(votes []*Vote, opts ...func(*SignsRecoverer)) *SignsRecoverer
NewSignsRecoverer creates and returns a new instance of SignsRecoverer the state fills with signatures from the votes
func (*SignsRecoverer) GetVoteExtensions ¶ added in v1.0.0
func (v *SignsRecoverer) GetVoteExtensions(qs QuorumSigns) VoteExtensions
Helper function that returns deep copy of recovered vote extensions with signatures from QuorumSigns.
Note that this method doesn't recover threshold signatures. It requires to call Recover() method first.
## Panics
Panics when the count of threshold vote extension signatures in QuorumSigns doesn't match recoverable vote extensions
func (*SignsRecoverer) Recover ¶
func (v *SignsRecoverer) Recover() (*QuorumSigns, error)
Recover recovers threshold signatures for block, state and vote-extensions
type SynchronyParams ¶
type SynchronyParams struct { // Precision is the maximum amount of time by which node clocks can differ. Precision time.Duration `json:"precision,string"` // MessageDelay is the maximum amount of time a message spend in transit. MessageDelay time.Duration `json:"message_delay,string"` }
SynchronyParams influence the validity of block timestamps. For more information on the relationship of the synchrony parameters to block validity, see the Proposer-Based Timestamps specification: https://github.com/tendermint/tendermint/blob/master/spec/consensus/proposer-based-timestamp/README.md
func DefaultSynchronyParams ¶
func DefaultSynchronyParams() SynchronyParams
func (SynchronyParams) SynchronyParamsOrDefaults ¶
func (s SynchronyParams) SynchronyParamsOrDefaults() SynchronyParams
SynchronyParamsOrDefaults returns the SynchronyParams, filling in any zero values with the Tendermint defined default values.
type ThresholdRawVoteExtension ¶ added in v1.0.0
type ThresholdRawVoteExtension struct {
ThresholdVoteExtension
}
ThresholdRawVoteExtension is a threshold raw type of VoteExtension
func (ThresholdRawVoteExtension) Copy ¶ added in v1.0.0
func (e ThresholdRawVoteExtension) Copy() VoteExtensionIf
func (ThresholdRawVoteExtension) SignItem ¶ added in v1.0.0
func (e ThresholdRawVoteExtension) SignItem(_ string, height int64, round int32, quorumType btcjson.LLMQType, quorumHash []byte) (SignItem, error)
SignItem creates a SignItem for a threshold raw vote extension
Note: signItem.Msg left empty by purpose, as we don't want hash to be checked in Verify()
type ThresholdSignature ¶ added in v1.0.0
type ThresholdSignature [bls12381.SignatureSize]byte
type ThresholdVoteExtension ¶ added in v1.0.0
type ThresholdVoteExtension struct { GenericVoteExtension // contains filtered or unexported fields }
ThresholdVoteExtension is a threshold type of VoteExtension
func (*ThresholdVoteExtension) AddThresholdSignature ¶ added in v1.0.0
func (e *ThresholdVoteExtension) AddThresholdSignature(validator ProTxHash, sig []byte) error
func (ThresholdVoteExtension) Copy ¶ added in v1.0.0
func (e ThresholdVoteExtension) Copy() VoteExtensionIf
func (ThresholdVoteExtension) IsThresholdRecoverable ¶ added in v1.0.0
func (e ThresholdVoteExtension) IsThresholdRecoverable() bool
func (*ThresholdVoteExtension) ThresholdRecover ¶ added in v1.0.0
func (e *ThresholdVoteExtension) ThresholdRecover() ([]byte, error)
ThresholdRecover recovers threshold signature from collected signatures
type ThresholdVoteExtensionIf ¶ added in v1.0.0
type ThresholdVoteExtensionIf interface { VoteExtensionIf AddThresholdSignature(validator ProTxHash, sig []byte) error // Recover threshold signature from collected signatures // // Returns recovered signature or error. VoteExtension, including any signature already set, is not modified. ThresholdRecover() ([]byte, error) }
type TimeoutParams ¶
type TimeoutParams struct { Propose time.Duration `json:"propose,string"` ProposeDelta time.Duration `json:"propose_delta,string"` Vote time.Duration `json:"vote,string"` VoteDelta time.Duration `json:"vote_delta,string"` // Unused, TODO: Remove in 0.15 Commit time.Duration `json:"commit,string"` // Unused, TODO: Remove in 0.15 BypassCommitTimeout bool `json:"bypass_commit_timeout"` }
TimeoutParams configure the timings of the steps of the Tendermint consensus algorithm.
func DefaultTimeoutParams ¶
func DefaultTimeoutParams() TimeoutParams
func (TimeoutParams) ProposeTimeout ¶
func (t TimeoutParams) ProposeTimeout(round int32) time.Duration
ProposeTimeout returns the amount of time to wait for a proposal.
func (TimeoutParams) TimeoutParamsOrDefaults ¶
func (t TimeoutParams) TimeoutParamsOrDefaults() TimeoutParams
TimeoutParamsOrDefaults returns the SynchronyParams, filling in any zero values with the Tendermint defined default values.
func (TimeoutParams) VoteTimeout ¶
func (t TimeoutParams) VoteTimeout(round int32) time.Duration
VoteTimeout returns the amount of time to wait for remaining votes after receiving any +2/3 votes.
type Tx ¶
type Tx []byte
Tx is an arbitrary byte array. NOTE: Tx has no types at this level, so when wire encoded it's just length-prefixed. Might we want types here ?
type TxEventPublisher ¶
type TxEventPublisher interface {
PublishEventTx(EventDataTx) error
}
type TxProof ¶
type TxProof struct { RootHash tmbytes.HexBytes `json:"root_hash"` Data Tx `json:"data"` Proof merkle.Proof `json:"proof"` }
TxProof represents a Merkle proof of the presence of a transaction in the Merkle tree.
type TxRecordSet ¶
type TxRecordSet struct {
// contains filtered or unexported fields
}
TxRecordSet contains indexes into an underlying set of transactions. These indexes are useful for validating and working with a list of TxRecords from the PrepareProposal response.
Only one copy of the original data is referenced by all of the indexes but a transaction may appear in multiple indexes.
func NewTxRecordSet ¶
func NewTxRecordSet(trs []*abci.TxRecord) TxRecordSet
NewTxRecordSet constructs a new set from the given transaction records. The contents of the input transactions are shared by the set, and must not be modified during the lifetime of the set.
func (TxRecordSet) DelayedTxs ¶ added in v1.0.0
func (t TxRecordSet) DelayedTxs() []Tx
DelayedTxs returns the transactions that should be delivered in future blocks.
func (TxRecordSet) IncludedTxs ¶
func (t TxRecordSet) IncludedTxs() []Tx
IncludedTxs returns the transactions marked for inclusion in a block. This list maintains the order that the transactions were included in the list of TxRecords that were used to construct the TxRecordSet.
func (TxRecordSet) RemovedTxs ¶
func (t TxRecordSet) RemovedTxs() []Tx
RemovedTxs returns the transactions marked for removal by the application.
type Txs ¶
type Txs []Tx
Txs is a slice of Tx.
func (Txs) Hash ¶
Hash returns the Merkle root hash of the transaction hashes. i.e. the leaves of the tree are the hashes of the txs.
func (Txs) IndexByHash ¶
IndexByHash returns the index of this transaction hash in the list, or -1 if not found
func (Txs) Len ¶
Txs is a slice of transactions. Sorting a Txs value orders the transactions lexicographically.
func (Txs) MarshalZerologArray ¶ added in v1.0.0
func (Txs) MarshalZerologObject ¶ added in v1.0.0
func (Txs) ToSliceOfBytes ¶
ToSliceOfBytes converts a Txs to slice of byte slices.
type ValSetOptionFunc ¶
type ValSetOptionFunc func(opt *ValSetOptions)
ValSetOptionFunc is a type of validator-set function to manage options of generator
type ValSetOptions ¶
type ValSetOptions struct { PrivValsMap map[string]PrivValidator PrivValsAtHeight int64 }
ValSetOptions is the options for generation of validator set and private validators
type ValSetParam ¶
ValSetParam is a structure of parameters to make a validator set
func NewValSetParam ¶
func NewValSetParam(proTxHashes []crypto.ProTxHash) []ValSetParam
NewValSetParam returns a list of validator set parameters with for every proTxHashes with default voting power
type Validator ¶
type Validator struct { ProTxHash ProTxHash PubKey crypto.PubKey VotingPower int64 NodeAddress ValidatorAddress ProposerPriority int64 }
Validator Volatile state for each Validator NOTE: The ProposerPriority is not included in Validator.Hash(); make sure to update that method if changes are made here The ProTxHash is part of Dash additions required for BLS threshold signatures
func NewValidator ¶
func NewValidator(pubKey crypto.PubKey, votingPower int64, proTxHash ProTxHash, address string) *Validator
NewValidator returns a new validator with the given pubkey and voting power.
func ValidatorFromProto ¶
ValidatorFromProto sets a protobuf Validator to the given pointer. It returns an error if the public key is invalid.
func (*Validator) Bytes ¶
Bytes computes the unique encoding of a validator with a given voting power. These are the bytes that gets hashed in consensus. It excludes address as its redundant with the pubkey. This also excludes ProposerPriority which changes every round.
func (*Validator) CompareProposerPriority ¶
CompareProposerPriority Returns the one with higher ProposerPriority.
func (*Validator) Copy ¶
Copy creates a new copy of the validator so we can mutate ProposerPriority. Panics if the validator is nil.
func (Validator) MarshalJSON ¶
func (*Validator) MarshalZerologObject ¶
MarshalZerologObject implements zerolog.LogObjectMarshaler
func (*Validator) ShortStringBasic ¶
func (*Validator) String ¶
String returns a string representation of String.
1. address 2. public key 3. voting power 4. proposer priority 5. node address
func (*Validator) UnmarshalJSON ¶
func (*Validator) ValidateBasic ¶
ValidateBasic performs basic validation.
func (*Validator) ValidatePubKey ¶
ValidatePubKey performs basic validation on the public key.
type ValidatorAddress ¶
ValidatorAddress is a ValidatorAddress that does not require node ID to be set We cannot just use p2p.ValidatorAddress because it causes dependency loop
func ParseValidatorAddress ¶
func ParseValidatorAddress(address string) (ValidatorAddress, error)
ParseValidatorAddress parses provided address, which should be in `proto://nodeID@host:port` form. `proto://` and `nodeID@` parts are optional.
func RandValidatorAddress ¶
func RandValidatorAddress() ValidatorAddress
RandValidatorAddress generates a random validator address. Used in tests. It will panic in (very unlikely) case of error.
func (ValidatorAddress) NetAddress ¶
func (va ValidatorAddress) NetAddress() (*NetAddress, error)
NetAddress converts ValidatorAddress to a NetAddress object
func (ValidatorAddress) String ¶
func (va ValidatorAddress) String() string
String formats the address as a URL string.
func (ValidatorAddress) Validate ¶
func (va ValidatorAddress) Validate() error
Validate ensures the validator address is correct. It ignores missing node IDs.
func (ValidatorAddress) Zero ¶
func (va ValidatorAddress) Zero() bool
Zero returns true if the ValidatorAddress is not initialized
type ValidatorInfo ¶
type ValidatorParams ¶
type ValidatorParams struct {
PubKeyTypes []string `json:"pub_key_types"`
}
ValidatorParams restrict the public key types validators can use. NOTE: uses ABCI pubkey naming, not Amino names.
func DefaultValidatorParams ¶
func DefaultValidatorParams() ValidatorParams
DefaultValidatorParams returns a default ValidatorParams, which allows only bls12381 pubkeys.
func (*ValidatorParams) IsValidPubkeyType ¶
func (val *ValidatorParams) IsValidPubkeyType(pubkeyType string) bool
type ValidatorSet ¶
type ValidatorSet struct { // NOTE: persisted via reflect, must be exported. Validators []*Validator `json:"validators"` Proposer *Validator `json:"proposer"` ThresholdPublicKey crypto.PubKey `json:"threshold_public_key"` QuorumHash crypto.QuorumHash `json:"quorum_hash"` QuorumType btcjson.LLMQType `json:"quorum_type"` HasPublicKeys bool `json:"has_public_keys"` // contains filtered or unexported fields }
ValidatorSet represent a set of *Validator at a given height.
The validators can be fetched by address or index. The index is in order of .VotingPower, so the indices are fixed for all rounds of a given blockchain height - ie. the validators are sorted by their voting power (descending). Secondary index - .ProTxHash (ascending).
On the other hand, the .ProposerPriority of each validator and the designated .GetProposer() of a set changes every round, upon calling .IncrementProposerPriority().
NOTE: Not goroutine-safe. NOTE: All get/set to validators should copy the value for safety.
func NewEmptyValidatorSet ¶
func NewEmptyValidatorSet() *ValidatorSet
NewEmptyValidatorSet initializes a ValidatorSet with no validators
func NewValidatorSet ¶
func NewValidatorSet(valz []*Validator, newThresholdPublicKey crypto.PubKey, quorumType btcjson.LLMQType, quorumHash crypto.QuorumHash, hasPublicKeys bool) *ValidatorSet
NewValidatorSet initializes a ValidatorSet by copying over the values from `valz`, a list of Validators. If valz is nil or empty, the new ValidatorSet will have an empty list of Validators.
The addresses of validators in `valz` must be unique otherwise the function panics.
Note the validator set size has an implied limit equal to that of the MaxVotesCount - commits by a validator set larger than this will fail validation.
func NewValidatorSetCheckPublicKeys ¶ added in v1.0.0
func NewValidatorSetCheckPublicKeys( valz []*Validator, newThresholdPublicKey crypto.PubKey, quorumType btcjson.LLMQType, quorumHash crypto.QuorumHash, ) *ValidatorSet
NewValidatorSetCheckPublicKeys initializes a ValidatorSet the same way as NewValidatorSet does, but determines if the public keys are present.
func ValidatorSetFromExistingValidators ¶
func ValidatorSetFromExistingValidators( valz []*Validator, thresholdPublicKey crypto.PubKey, quorumType btcjson.LLMQType, quorumHash crypto.QuorumHash, ) (*ValidatorSet, error)
ValidatorSetFromExistingValidators takes an existing array of validators and rebuilds the exact same validator set that corresponds to it without changing the proposer priority or power if any of the validators fail validate basic then an empty set is returned.
func ValidatorSetFromProto ¶
func ValidatorSetFromProto(vp *tmproto.ValidatorSet) (*ValidatorSet, error)
ValidatorSetFromProto sets a protobuf ValidatorSet to the given pointer. It returns an error if any of the validators from the set or the proposer is invalid
func (*ValidatorSet) ABCIEquivalentValidatorUpdates ¶
func (vals *ValidatorSet) ABCIEquivalentValidatorUpdates() *abci.ValidatorSetUpdate
func (*ValidatorSet) BasicInfoString ¶
func (vals *ValidatorSet) BasicInfoString() string
BasicInfoString returns a string representation of ValidatorSet without power and priority.
See StringIndented.
func (*ValidatorSet) Copy ¶
func (vals *ValidatorSet) Copy() *ValidatorSet
Copy each validator into a new ValidatorSet.
func (*ValidatorSet) CopyIncrementProposerPriority ¶
func (vals *ValidatorSet) CopyIncrementProposerPriority(times int32) *ValidatorSet
CopyIncrementProposerPriority increments ProposerPriority and updates the proposer on a copy, and returns it.
func (*ValidatorSet) Equals ¶
func (vals *ValidatorSet) Equals(other *ValidatorSet) bool
func (*ValidatorSet) GetByIndex ¶
func (vals *ValidatorSet) GetByIndex(index int32) *Validator
GetByIndex returns the validator's address and validator itself (copy) by index. It returns nil values if index is less than 0 or greater or equal to len(ValidatorSet.Validators).
func (*ValidatorSet) GetByProTxHash ¶
func (vals *ValidatorSet) GetByProTxHash(proTxHash []byte) (index int32, val *Validator)
GetByProTxHash returns an index of the validator with protxhash and validator itself (copy) if found. Otherwise, -1 and nil are returned.
func (*ValidatorSet) GetProTxHashes ¶
func (vals *ValidatorSet) GetProTxHashes() []crypto.ProTxHash
GetProTxHashes returns the all validator proTxHashes
func (*ValidatorSet) GetProTxHashesAsByteArrays ¶
func (vals *ValidatorSet) GetProTxHashesAsByteArrays() [][]byte
GetProTxHashesAsByteArrays returns the all validator proTxHashes as byte arrays for convenience
func (*ValidatorSet) GetProTxHashesOrdered ¶
func (vals *ValidatorSet) GetProTxHashesOrdered() []crypto.ProTxHash
GetProTxHashesOrdered returns the all validator proTxHashes in order
func (*ValidatorSet) GetProposer ¶
func (vals *ValidatorSet) GetProposer() (proposer *Validator)
GetProposer returns the current proposer. If the validator set is empty, nil is returned.
func (*ValidatorSet) GetPublicKeys ¶
func (vals *ValidatorSet) GetPublicKeys() []crypto.PubKey
GetPublicKeys returns the all validator publicKeys
func (*ValidatorSet) HasProTxHash ¶
func (vals *ValidatorSet) HasProTxHash(proTxHash crypto.ProTxHash) bool
HasProTxHash returns true if proTxHash given is in the validator set, false - otherwise.
func (*ValidatorSet) Hash ¶
func (vals *ValidatorSet) Hash() tmbytes.HexBytes
Hash returns the Quorum Hash.
func (*ValidatorSet) IncrementProposerPriority ¶
func (vals *ValidatorSet) IncrementProposerPriority(times int32)
IncrementProposerPriority increments ProposerPriority of each validator and updates the proposer. Panics if validator set is empty. `times` must be positive.
func (*ValidatorSet) IsNilOrEmpty ¶
func (vals *ValidatorSet) IsNilOrEmpty() bool
IsNilOrEmpty returns true if validator set is nil or empty.
func (*ValidatorSet) Iterate ¶
func (vals *ValidatorSet) Iterate(fn func(index int, val *Validator) bool)
Iterate will run the given function over the set.
func (*ValidatorSet) MarshalZerologObject ¶
func (vals *ValidatorSet) MarshalZerologObject(e *zerolog.Event)
MarshalZerologObject implements zerolog.LogObjectMarshaler
func (*ValidatorSet) QuorumHashValid ¶
func (vals *ValidatorSet) QuorumHashValid() error
QuorumHashValid returns true if quorum hash is valid.
func (*ValidatorSet) QuorumTypeMemberCount ¶
func (vals *ValidatorSet) QuorumTypeMemberCount() int
QuorumTypeMemberCount returns a number of validators for a quorum by a type
func (*ValidatorSet) QuorumTypeThresholdCount ¶
func (vals *ValidatorSet) QuorumTypeThresholdCount() int
QuorumTypeThresholdCount returns a threshold number for a quorum by a type
func (*ValidatorSet) QuorumVotingPower ¶
func (vals *ValidatorSet) QuorumVotingPower() int64
QuorumVotingPower returns the voting power of the quorum if all the members existed.
func (*ValidatorSet) QuorumVotingThresholdPower ¶
func (vals *ValidatorSet) QuorumVotingThresholdPower() int64
QuorumVotingThresholdPower returns the threshold power of the voting power of the quorum if all the members existed. Voting is considered successful when voting power is at or above this threshold.
func (*ValidatorSet) RescalePriorities ¶
func (vals *ValidatorSet) RescalePriorities(diffMax int64)
RescalePriorities rescales the priorities such that the distance between the maximum and minimum is smaller than `diffMax`. Panics if validator set is empty.
func (*ValidatorSet) Size ¶
func (vals *ValidatorSet) Size() int
Size returns the length of the validator set.
func (*ValidatorSet) String ¶
func (vals *ValidatorSet) String() string
String returns a string representation of ValidatorSet.
See StringIndented.
func (*ValidatorSet) StringIndented ¶
func (vals *ValidatorSet) StringIndented(indent string) string
StringIndented returns an intended String.
See Validator#String.
func (*ValidatorSet) StringIndentedBasic ¶
func (vals *ValidatorSet) StringIndentedBasic(indent string) string
func (*ValidatorSet) ThresholdPublicKeyValid ¶
func (vals *ValidatorSet) ThresholdPublicKeyValid() error
ThresholdPublicKeyValid returns true if threshold public key is valid.
func (*ValidatorSet) ToProto ¶
func (vals *ValidatorSet) ToProto() (*tmproto.ValidatorSet, error)
ToProto converts ValidatorSet to protobuf
func (*ValidatorSet) TotalVotingPower ¶
func (vals *ValidatorSet) TotalVotingPower() int64
TotalVotingPower returns the sum of the voting powers of all validators. It recomputes the total voting power if required.
func (*ValidatorSet) UpdateWithChangeSet ¶
func (vals *ValidatorSet) UpdateWithChangeSet( changes []*Validator, newThresholdPublicKey crypto.PubKey, newQuorumHash crypto.QuorumHash, ) error
UpdateWithChangeSet attempts to update the validator set with 'changes'. It performs the following steps:
- validates the changes making sure there are no duplicates and splits them in updates and deletes
- verifies that applying the changes will not result in errors
- computes the total voting power BEFORE removals to ensure that in the next steps the priorities across old and newly added validators are fair
- computes the priorities of new validators against the final set
- applies the updates against the validator set
- applies the removals against the validator set
- performs scaling and centering of priority values
If an error is detected during verification steps, it is returned and the validator set is not changed.
func (*ValidatorSet) ValidateBasic ¶
func (vals *ValidatorSet) ValidateBasic() error
func (*ValidatorSet) VerifyCommit ¶
func (vals *ValidatorSet) VerifyCommit(chainID string, blockID BlockID, height int64, commit *Commit) error
VerifyCommit verifies +2/3 of the set had signed the given commit.
It checks all the signatures! While it's safe to exit as soon as we have 2/3+ signatures, doing so would impact incentivization logic in the ABCI application that depends on the LastCommitInfo sent in BeginBlock, which includes which validators signed. For instance, Gaia incentivizes proposers with a bonus for including more than +2/3 of the signatures.
type ValidatorsByProTxHashes ¶
type ValidatorsByProTxHashes []*Validator
ValidatorsByAddress implements sort.Interface for []*Validator based on the Address field.
func (ValidatorsByProTxHashes) Len ¶
func (valz ValidatorsByProTxHashes) Len() int
func (ValidatorsByProTxHashes) Less ¶
func (valz ValidatorsByProTxHashes) Less(i, j int) bool
func (ValidatorsByProTxHashes) Swap ¶
func (valz ValidatorsByProTxHashes) Swap(i, j int)
type ValidatorsByVotingPower ¶
type ValidatorsByVotingPower []*Validator
ValidatorsByVotingPower implements sort.Interface for []*Validator based on the VotingPower and Address fields.
func (ValidatorsByVotingPower) Len ¶
func (valz ValidatorsByVotingPower) Len() int
func (ValidatorsByVotingPower) Less ¶
func (valz ValidatorsByVotingPower) Less(i, j int) bool
func (ValidatorsByVotingPower) Swap ¶
func (valz ValidatorsByVotingPower) Swap(i, j int)
type VersionParams ¶
type VersionParams struct {
AppVersion uint64 `json:"app_version,string"`
}
func DefaultVersionParams ¶
func DefaultVersionParams() VersionParams
type Vote ¶
type Vote struct { Type tmproto.SignedMsgType `json:"type"` Height int64 `json:"height,string"` Round int32 `json:"round"` // assume there will not be greater than 2^32 rounds BlockID BlockID `json:"block_id"` // zero if vote is nil. ValidatorProTxHash ProTxHash `json:"validator_pro_tx_hash"` ValidatorIndex int32 `json:"validator_index"` BlockSignature tmbytes.HexBytes `json:"block_signature"` VoteExtensions VoteExtensions `json:"vote_extensions"` }
Vote represents a prevote, precommit, or commit vote from validators for consensus.
func VoteFromProto ¶
VoteFromProto attempts to convert the given serialization (Protobuf) type to our Vote domain type. No validation is performed on the resulting vote - this is left up to the caller to decide whether to call ValidateBasic or ValidateWithExtension.
func (*Vote) HasVoteMessage ¶
func (*Vote) MarshalZerologObject ¶
MarshalZerologObject formats this object for logging purposes
func (*Vote) PopulateSignsFromProto ¶
PopulateSignsFromProto updates the signatures of the current Vote with values are taken from the Vote's protobuf
func (*Vote) PopulateSignsToProto ¶
PopulateSignsToProto updates the signatures of the given protobuf Vote entity with values are taken from the current Vote's
func (*Vote) String ¶
String returns a string representation of Vote.
1. validator index 2. first 6 bytes of validator proTxHash 3. height 4. round, 5. type byte 6. type string 7. first 6 bytes of block hash 8. first 6 bytes of signature 9. first 6 bytes of vote extension 10. timestamp
func (*Vote) ToProto ¶
ToProto converts the handwritten type to proto generated type return type, nil if everything converts safely, otherwise nil, error
func (*Vote) ValidateBasic ¶
ValidateBasic checks whether the vote is well-formed. It does not, however, check vote extensions - for vote validation with vote extension validation, use ValidateWithExtension.
func (*Vote) ValidateWithExtension ¶
ValidateWithExtension performs the same validations as ValidateBasic, but additionally checks whether a vote extension signature is present. This function is used in places where vote extension signatures are expected.
func (*Vote) Verify ¶
func (vote *Vote) Verify( chainID string, quorumType btcjson.LLMQType, quorumHash crypto.QuorumHash, pubKey crypto.PubKey, proTxHash ProTxHash, ) error
Verify performs vote signature verification. It checks whether the block signature and vote extensions signatures correspond to the given chain ID and public key.
type VoteExtensionIf ¶ added in v1.0.0
type VoteExtensionIf interface { // Return type of this vote extension GetType() tmproto.VoteExtensionType // Return extension bytes GetExtension() []byte // Return signature bytes GetSignature() []byte // Copy creates a deep copy of VoteExtension Copy() VoteExtensionIf // ToProto transforms the current state of vote-extension into VoteExtension's proto-generated object. // It should prioritize performance and can do a shallow copy of the vote-extension, // so the returned object should not be modified. ToProto() tmproto.VoteExtension SignItem(chainID string, height int64, round int32, quorumType btcjson.LLMQType, quorumHash []byte) (SignItem, error) IsThresholdRecoverable() bool // Validate returns error if a vote-extension is invalid. // It should not modify the state of the vote-extension. Validate() error SetSignature(sig []byte) zerolog.LogObjectMarshaler }
func VoteExtensionFromProto ¶ added in v1.0.0
func VoteExtensionFromProto(ve tmproto.VoteExtension) VoteExtensionIf
type VoteExtensions ¶
type VoteExtensions []VoteExtensionIf
VoteExtensions is a container where the key is vote-extension type and value is a list of VoteExtension
func NewVoteExtensionsFromABCIExtended ¶
func NewVoteExtensionsFromABCIExtended(exts []*abci.ExtendVoteExtension) VoteExtensions
NewVoteExtensionsFromABCIExtended returns vote-extensions container for given ExtendVoteExtension
func VoteExtensionsFromProto ¶
func VoteExtensionsFromProto(pve ...*tmproto.VoteExtension) VoteExtensions
VoteExtensionsFromProto creates VoteExtensions container from VoteExtensions's protobuf
func (*VoteExtensions) Add ¶
func (e *VoteExtensions) Add(ext tmproto.VoteExtension)
Add creates and adds protobuf VoteExtension into a container by vote-extension type
func (VoteExtensions) Copy ¶
func (e VoteExtensions) Copy() VoteExtensions
Copy creates a deep copy of VoteExtensions
func (VoteExtensions) CopySignsFromProto ¶
func (e VoteExtensions) CopySignsFromProto(src tmproto.VoteExtensions) error
CopySignsFromProto copies the signatures from VoteExtensions's protobuf into the current VoteExtension state
func (VoteExtensions) CopySignsToProto ¶
func (e VoteExtensions) CopySignsToProto(dest tmproto.VoteExtensions) error
CopySignsToProto copies the signatures from the current VoteExtensions into VoteExtension's protobuf
func (VoteExtensions) Filter ¶ added in v1.0.0
func (e VoteExtensions) Filter(fn func(ext VoteExtensionIf) bool) VoteExtensions
Filter returns a new VoteExtensions container with vote-extensions filtered by provided function. It does not copy data, just creates a new container with references to the same data
func (VoteExtensions) Fingerprint ¶
func (e VoteExtensions) Fingerprint() []byte
Fingerprint returns a fingerprint of all vote-extensions in a state of this container
func (VoteExtensions) GetExtensions ¶ added in v1.0.0
func (e VoteExtensions) GetExtensions() [][]byte
func (VoteExtensions) GetSignatures ¶ added in v1.0.0
func (e VoteExtensions) GetSignatures() [][]byte
func (VoteExtensions) IsEmpty ¶
func (e VoteExtensions) IsEmpty() bool
IsEmpty returns true if a vote-extension container is empty, otherwise false
func (VoteExtensions) IsSameWithProto ¶
func (e VoteExtensions) IsSameWithProto(right tmproto.VoteExtensions) bool
IsSameWithProto compares the current state of the vote-extension with the same in VoteExtensions's protobuf checks only the value of extensions
func (VoteExtensions) Len ¶ added in v1.0.0
func (e VoteExtensions) Len() int
func (VoteExtensions) MarshalZerologArray ¶ added in v1.0.0
func (e VoteExtensions) MarshalZerologArray(a *zerolog.Array)
Marshal VoteExtensions as zerolog array
func (VoteExtensions) SetSignatures ¶ added in v1.0.0
func (e VoteExtensions) SetSignatures(src [][]byte) error
func (VoteExtensions) SignItems ¶ added in v1.0.0
func (e VoteExtensions) SignItems( chainID string, quorumType btcjson.LLMQType, quorumHash []byte, height int64, round int32, ) ([]SignItem, error)
MakeVoteExtensionSignItems creates a list SignItem structs for a vote extensions
func (VoteExtensions) ToExtendProto ¶
func (e VoteExtensions) ToExtendProto() []*abci.ExtendVoteExtension
ToExtendProto transforms the current state of vote-extension container into ExtendVoteExtension's protobuf
func (VoteExtensions) ToProto ¶
func (e VoteExtensions) ToProto() []*tmproto.VoteExtension
ToProto transforms the current state of vote-extension container into VoteExtensions's protobuf
func (VoteExtensions) Validate ¶
func (e VoteExtensions) Validate() error
Validate returns error if an added vote-extension is invalid
type VoteSet ¶
type VoteSet struct {
// contains filtered or unexported fields
}
VoteSet helps collect signatures from validators at each height+round for a predefined vote type.
We need VoteSet to be able to keep track of conflicting votes when validators double-sign. Yet, we can't keep track of *all* the votes seen, as that could be a DoS attack vector.
There are two storage areas for votes. 1. voteSet.votes 2. voteSet.votesByBlock
`.votes` is the "canonical" list of votes. It always has at least one vote, if a vote from a validator had been seen at all. Usually it keeps track of the first vote seen, but when a 2/3 majority is found, votes for that get priority and are copied over from `.votesByBlock`.
`.votesByBlock` keeps track of a list of votes for a particular block. There are two ways a &blockVotes{} gets created in `.votesByBlock`. 1. the first vote seen by a validator was for the particular block. 2. a peer claims to have seen 2/3 majority for the particular block.
Since the first vote from a validator will always get added in `.votesByBlock` , all votes in `.votes` will have a corresponding entry in `.votesByBlock`.
When a &blockVotes{} in `.votesByBlock` reaches a 2/3 majority quorum, its votes are copied into `.votes`.
All this is memory bounded because conflicting votes only get added if a peer told us to track that block, each peer only gets to tell us 1 such block, and, there's only a limited number of peers.
NOTE: Assumes that the sum total of voting power does not exceed MaxUInt64.
func NewVoteSet ¶
func NewVoteSet(chainID string, height int64, round int32, signedMsgType tmproto.SignedMsgType, valSet *ValidatorSet) *VoteSet
NewVoteSet instantiates all fields of a new vote set. This constructor requires that no vote extension data be present on the votes that are added to the set.
func (*VoteSet) AddVote ¶
AddVote Returns added=true if vote is valid and new. Otherwise returns err=ErrVote[
UnexpectedStep | InvalidIndex | InvalidAddress | InvalidSignature | InvalidBlockHash | ConflictingVotes ]
Duplicate votes return added=false, err=nil. Conflicting votes return added=*, err=ErrVoteConflictingVotes. NOTE: vote should not be mutated after adding. NOTE: VoteSet must not be nil NOTE: Vote must not be nil
func (*VoteSet) BitArrayByBlockID ¶
func (*VoteSet) BitArrayString ¶
Return the bit-array of votes including the fraction of power that has voted like: "BA{29:xx__x__x_x___x__x_______xxx__} 856/1304 = 0.66"
func (*VoteSet) GetByIndex ¶
NOTE: if validator has conflicting votes, returns "canonical" vote Implements VoteSetReader.
func (*VoteSet) GetByProTxHash ¶
func (*VoteSet) HasTwoThirdsAny ¶
HasTwoThirdsAny returns true if we are above voting threshold, regardless of the block id voted
func (*VoteSet) HasTwoThirdsMajority ¶
func (*VoteSet) IsQuorumReached ¶
IsQuorumReached returns true if quorum was reached otherwise returns false
func (*VoteSet) MakeCommit ¶
MakeCommit constructs a Commit from the VoteSet. It only includes precommits for the block, which has 2/3+ majority, and nil.
Panics if the vote type is not PrecommitType or if there's no +2/3 votes for a single block.
func (*VoteSet) MarshalJSON ¶
Marshal the VoteSet to JSON. Same as String(), just in JSON, and without the height/round/signedMsgType (since its already included in the votes).
func (*VoteSet) MarshalZerologObject ¶
MarshalZerologObject marshals vote-set into the zerolog structure
func (*VoteSet) SetPeerMaj23 ¶
func (voteSet *VoteSet) SetPeerMaj23(peerID string, blockID BlockID, height int64, round int32) error
If a peer claims that it has 2/3 majority for given blockKey, call this. NOTE: if there are too many peers, or too much peer churn, this can cause memory issues. TODO: implement ability to remove peers too NOTE: VoteSet must not be nil
func (*VoteSet) StringIndented ¶
StringIndented returns an indented String.
Height Round Type Votes Votes bit array 2/3+ majority
See Vote#String.
func (*VoteSet) StringShort ¶
StringShort returns a short representation of VoteSet.
1. height 2. round 3. signed msg type 4. first 2/3+ majority 5. fraction of voted power 6. votes bit array 7. 2/3+ majority for each peer
func (*VoteSet) TwoThirdsMajority ¶
If there was a +2/3 majority for blockID, return blockID and true. Else, return the empty BlockID{} and false.
func (*VoteSet) VoteStrings ¶
Returns a list of votes compressed to more readable strings.
type VoteSetJSON ¶
type VoteSetJSON struct { Votes []string `json:"votes"` VotesBitArray string `json:"votes_bit_array"` PeerMaj23s map[string]maj23Info `json:"peer_maj_23s"` }
More human readable JSON of the vote set NOTE: insufficient for unmarshaling from (compressed votes) TODO: make the peerMaj23s nicer to read (eg just the block hash)
Source Files ¶
- block.go
- block_dash.go
- block_meta.go
- canonical.go
- core_chainlock.go
- encoding_helper.go
- errors.go
- events.go
- evidence.go
- generator.go
- genesis.go
- light.go
- mempool.go
- netaddress.go
- node_id.go
- node_info.go
- node_key.go
- params.go
- part_set.go
- priv_validator.go
- proposal.go
- protobuf.go
- quorum.go
- quorum_sign_data.go
- signable.go
- signed_msg_type.go
- signs_recoverer.go
- test_util.go
- tx.go
- utils.go
- validation.go
- validator.go
- validator_address.go
- validator_set.go
- vote.go
- vote_dash.go
- vote_extension.go
- vote_set.go