Documentation ¶
Index ¶
- Variables
- func AddCommitMsgSeeds(m *protos.Message)
- func AddHeartBeatResponseSeeds(m *protos.Message)
- func AddHeartBeatSeeds(m *protos.Message)
- func AddNewViewSeeds(m *protos.Message)
- func AddPrePareMsgSeeds(m *protos.Message)
- func AddPrePrePareMsgSeeds(m *protos.Message)
- func AddStateTransferRequestSeeds(m *protos.Message)
- func AddStateTransferResponseSeeds(m *protos.Message)
- func AddTransactionSeeds(seed []byte)
- func AddViewChangeSeeds(m *protos.Message)
- func AddViewDataSeeds(m *protos.Message)
- func CommitFuzz(m *protos.Message) *protos.Message
- func ConfigurationEnvelop(configBlock *common.Block) (*common.ConfigEnvelope, error)
- func ConsensusMessageFuzzed(m *protos.Message)
- func HeartBeatFuzz(m *protos.Message) *protos.Message
- func HeartBeatResponseFuzz(m *protos.Message) *protos.Message
- func LastBlockFromLedgerOrPanic(ledger Ledger, logger Logger) *common.Block
- func LastConfigBlockFromLedgerOrPanic(ledger Ledger, logger Logger) *common.Block
- func NewViewFuzz(m *protos.Message) *protos.Message
- func PrePareMsgFuzz(m *protos.Message) *protos.Message
- func PrePrePareMsgFuzz(m *protos.Message) *protos.Message
- func PreviousConfigBlockFromLedgerOrPanic(ledger Ledger, logger Logger) *common.Block
- func ProposalToBlock(proposal types.Proposal) (*common.Block, error)
- func RemoteNodesFromConfigBlock(block *common.Block, selfID uint64, logger *flogging.FabricLogger) (*nodeConfig, error)
- func StateTransferRequest(m *protos.Message) *protos.Message
- func StateTransferResponse(m *protos.Message) *protos.Message
- func TransactionMessageFuzzed(req []byte) []byte
- func ViewChangeFuzz(m *protos.Message) *protos.Message
- func ViewDataFuzz(m *protos.Message) *protos.Message
- type AccessController
- type Assembler
- type BFTChain
- func (c *BFTChain) Configure(config *common.Envelope, configSeq uint64) error
- func (c *BFTChain) Deliver(proposal types.Proposal, signatures []types.Signature) types.Reconfig
- func (c *BFTChain) Errored() <-chan struct{}
- func (c *BFTChain) Halt()
- func (c *BFTChain) HandleMessage(sender uint64, m *smartbftprotos.Message)
- func (c *BFTChain) HandleRequest(sender uint64, req []byte)
- func (c *BFTChain) Order(env *common.Envelope, configSeq uint64) error
- func (c *BFTChain) Start()
- func (c *BFTChain) WaitReady() error
- type BlockPuller
- type Bundle
- type ByteBufferTuple
- type ChainGetter
- type ChannelConfigTemplator
- type ConfigBlockValidator
- type ConfigTxValidator
- type ConfigUpdateProposer
- type ConfigValidator
- type Consenter
- type ConsenterCertificate
- type ConsenterVerifier
- type CreateChainCallback
- type Egress
- func (e *Egress) Nodes() []uint64
- func (e *Egress) SendConsensus(targetID uint64, m *protos.Message)
- func (e *Egress) SendConsensusFuzz(targetID uint64, m *protos.Message)
- func (e *Egress) SendTransaction(targetID uint64, request []byte)
- func (e *Egress) SendTransactionFuzz(targetID uint64, request []byte)
- type Filters
- type Ingreess
- type Ledger
- type Logger
- type MessageReceiver
- type MessageType
- type Metrics
- type NodeIdentitiesByID
- type PolicyManagerRetriever
- type ProtocolFuzzer
- type RPC
- type ReceiverGetter
- type RequestInspector
- type RuntimeConfig
- type Sequencer
- type Signature
- type Signer
- type SignerSerializer
- type Synchronizer
- type TransactionFuzzer
- type Verifier
- func (v *Verifier) AuxiliaryData(msg []byte) []byte
- func (v *Verifier) RequestsFromProposal(proposal types.Proposal) []types.RequestInfo
- func (v *Verifier) VerificationSequence() uint64
- func (v *Verifier) VerifyConsenterSig(signature types.Signature, prop types.Proposal) ([]byte, error)
- func (v *Verifier) VerifyProposal(proposal types.Proposal) ([]types.RequestInfo, error)
- func (v *Verifier) VerifyRequest(rawRequest []byte) (types.RequestInfo, error)
- func (v *Verifier) VerifySignature(signature types.Signature) error
- type WALConfig
- type WarningLogger
Constants ¶
This section is empty.
Variables ¶
var CommitMsgSeeds []*protos.Message
var HeartBeatResponseSeeds []*protos.Message
var HeartBeatSeeds []*protos.Message
var NewViewSeeds []*protos.Message
var PrePareMsgSeeds []*protos.Message
var PrePrePareMsgSeeds []*protos.Message
for fuzz seeds
var StateTransferRequestSeeds []*protos.Message
var StateTransferResponseSeeds []*protos.Message
var ViewChangeSeeds []*protos.Message
var ViewDataSeeds []*protos.Message
Functions ¶
func AddCommitMsgSeeds ¶
func AddHeartBeatSeeds ¶
func AddNewViewSeeds ¶
func AddPrePareMsgSeeds ¶
func AddPrePrePareMsgSeeds ¶
func AddTransactionSeeds ¶
func AddTransactionSeeds(seed []byte)
func AddViewChangeSeeds ¶
func AddViewDataSeeds ¶
func ConfigurationEnvelop ¶
func ConfigurationEnvelop(configBlock *common.Block) (*common.ConfigEnvelope, error)
ConfigurationEnvelop extract configuration envelop
func ConsensusMessageFuzzed ¶
======================= funcs for Consensus message Fuzzer =======================
func TransactionMessageFuzzed ¶
======================= Funcs for Transaction message Fuzzer =======================
Types ¶
type AccessController ¶
type AccessController interface { // Evaluate takes a set of SignedData and evaluates whether this set of signatures satisfies the policy Evaluate(signatureSet []*common.SignedData) error }
AccessController is used to determine if a signature of a certain client is valid
type Assembler ¶
type Assembler struct { RuntimeConfig *atomic.Value Logger *flogging.FabricLogger VerificationSeq func() uint64 }
type BFTChain ¶
type BFTChain struct { RuntimeConfig *atomic.Value Channel string Config types.Configuration BlockPuller BlockPuller Comm cluster.Communicator SignerSerializer signerSerializer PolicyManager policies.Manager Logger *flogging.FabricLogger WALDir string Metrics *Metrics // contains filtered or unexported fields }
BFTChain implements Chain interface to wire with BFT smart library
func NewChain ¶
func NewChain( cv ConfigValidator, selfID uint64, config types.Configuration, walDir string, blockPuller BlockPuller, comm cluster.Communicator, signerSerializer signerSerializer, policyManager policies.Manager, support consensus.ConsenterSupport, metrics *Metrics, ) (*BFTChain, error)
NewChain creates new BFT Smart chain
func (*BFTChain) HandleMessage ¶
func (c *BFTChain) HandleMessage(sender uint64, m *smartbftprotos.Message)
func (*BFTChain) HandleRequest ¶
type BlockPuller ¶
type BlockPuller interface { PullBlock(seq uint64) *common.Block HeightsByEndpoints() (map[string]uint64, error) Close() }
BlockPuller is used to pull blocks from other OSN
type Bundle ¶
type Bundle interface { channelconfig.Resources }
type ByteBufferTuple ¶
func (*ByteBufferTuple) FromBytes ¶
func (bbt *ByteBufferTuple) FromBytes(bytes []byte) error
func (*ByteBufferTuple) ToBytes ¶
func (bbt *ByteBufferTuple) ToBytes() []byte
type ChainGetter ¶
type ChainGetter interface { // GetChain obtains the ChainSupport for the given channel. // Returns nil, false when the ChainSupport for the given channel // isn't found. GetChain(chainID string) *multichannel.ChainSupport }
ChainGetter obtains instances of ChainSupport for the given channel
type ChannelConfigTemplator ¶
type ChannelConfigTemplator interface {
NewChannelConfig(env *common.Envelope) (channelconfig.Resources, error)
}
type ConfigBlockValidator ¶
type ConfigBlockValidator struct { ChannelConfigTemplator ChannelConfigTemplator ConfigUpdateProposer ConfigUpdateProposer ValidatingChannel string Filters Filters Logger *flogging.FabricLogger }
func (*ConfigBlockValidator) ValidateConfig ¶
func (cbv *ConfigBlockValidator) ValidateConfig(envelope *common.Envelope) error
type ConfigTxValidator ¶
type ConfigUpdateProposer ¶
type ConfigValidator ¶
type Consenter ¶
type Consenter struct { CreateChain func(chainName string) cluster.InactiveChainRegistry GetPolicyManager PolicyManagerRetriever Logger *flogging.FabricLogger Cert []byte Comm *cluster.Comm Chains ChainGetter SignerSerializer signerSerializer Registrar *multichannel.Registrar WALBaseDir string ClusterDialer *cluster.PredicateDialer Conf *localconfig.TopLevel Metrics *Metrics }
Consenter implementation of the BFT smart based consenter
func New ¶
func New( icr cluster.InactiveChainRegistry, pmr PolicyManagerRetriever, signerSerializer signerSerializer, clusterDialer *cluster.PredicateDialer, conf *localconfig.TopLevel, srvConf comm.ServerConfig, srv *comm.GRPCServer, r *multichannel.Registrar, metricsProvider metrics.Provider, ) *Consenter
New creates Consenter of type smart bft
func (*Consenter) HandleChain ¶
func (*Consenter) ReceiverByChain ¶
func (c *Consenter) ReceiverByChain(channelID string) MessageReceiver
ReceiverByChain returns the MessageReceiver for the given channelID or nil if not found.
type ConsenterCertificate ¶
type ConsenterCertificate []byte
ConsenterCertificate denotes a TLS certificate of a consenter
func (ConsenterCertificate) IsConsenterOfChannel ¶
func (conCert ConsenterCertificate) IsConsenterOfChannel(configBlock *common.Block) error
IsConsenterOfChannel returns whether the caller is a consenter of a channel by inspecting the given configuration block. It returns nil if true, else returns an error.
type ConsenterVerifier ¶
type ConsenterVerifier interface { // Evaluate takes a set of SignedData and evaluates whether this set of signatures satisfies the policy Evaluate(signatureSet []*common.SignedData) error }
ConsenterVerifier is used to determine whether a signature from one of the consenters is valid
type Egress ¶
func (*Egress) SendConsensusFuzz ¶
func (*Egress) SendTransaction ¶
func (*Egress) SendTransactionFuzz ¶
type Ingreess ¶
type Ingreess struct { Logger WarningLogger ChainSelector ReceiverGetter }
Ingreess dispatches Submit and Step requests to the designated per chain instances
func (*Ingreess) OnConsensus ¶
func (in *Ingreess) OnConsensus(channel string, sender uint64, request *orderer.ConsensusRequest) error
OnConsensus notifies the Ingreess for a reception of a StepRequest from a given sender on a given channel
type MessageReceiver ¶
type MessageReceiver interface { HandleMessage(sender uint64, m *protos.Message) HandleRequest(sender uint64, req []byte) }
MessageReceiver receives messages
type MessageType ¶
type MessageType int32
const ( PrePrePareMsg MessageType = 0 PrePareMsg MessageType = 1 CommitMsg MessageType = 2 ViewChangeMsg MessageType = 3 ViewDataMsg MessageType = 4 NewViewMsg MessageType = 5 HeartBeatMsg MessageType = 6 HeartBeatResponseMsg MessageType = 7 StateTransferRequestMsg MessageType = 8 StateTransferResponseMsg MessageType = 9 )
type Metrics ¶
type Metrics struct { ClusterSize metrics.Gauge CommittedBlockNumber metrics.Gauge IsLeader metrics.Gauge LeaderID metrics.Gauge }
func NewMetrics ¶
type NodeIdentitiesByID ¶
func (NodeIdentitiesByID) IdentityToID ¶
func (nibd NodeIdentitiesByID) IdentityToID(identity []byte) (uint64, bool)
type PolicyManagerRetriever ¶
type ProtocolFuzzer ¶
type ProtocolFuzzer struct { Logger *flogging.FabricLogger // contains filtered or unexported fields }
func NewProtocolFuzzer ¶
func NewProtocolFuzzer(cons *smartbft.Consensus) *ProtocolFuzzer
func (*ProtocolFuzzer) BroadcastConsensusFuzz ¶
func (pf *ProtocolFuzzer) BroadcastConsensusFuzz(msg *protos.Message)
TODO every receiver always get the same message
func (*ProtocolFuzzer) RunFuzz ¶
func (pf *ProtocolFuzzer) RunFuzz()
type RPC ¶
type RPC interface { SendConsensus(dest uint64, msg *orderer.ConsensusRequest) error SendSubmit(dest uint64, request *orderer.SubmitRequest) error }
type ReceiverGetter ¶
type ReceiverGetter interface { // ReceiverByChain returns the MessageReceiver if it exists, or nil if it doesn't ReceiverByChain(channelID string) MessageReceiver }
ReceiverGetter obtains instances of MessageReceiver given a channel ID
type RequestInspector ¶
type RequestInspector struct {
ValidateIdentityStructure func(identity *msp.SerializedIdentity) error
}
RequestInspector inspects incomming requests and validates serialized identity
func (*RequestInspector) RequestID ¶
func (ri *RequestInspector) RequestID(rawReq []byte) types.RequestInfo
type RuntimeConfig ¶
type RuntimeConfig struct { BFTConfig types.Configuration LastCommittedBlockHash string RemoteNodes []cluster.RemoteNode ID2Identities NodeIdentitiesByID LastBlock *common.Block LastConfigBlock *common.Block Nodes []uint64 // contains filtered or unexported fields }
RuntimeConfig defines the configuration of the consensus that is related to runtime.
func (RuntimeConfig) BlockCommitted ¶
func (rtc RuntimeConfig) BlockCommitted(block *common.Block) (RuntimeConfig, error)
type Signature ¶
type Signer ¶
type SignerSerializer ¶
type SignerSerializer interface { crypto.Signer crypto.IdentitySerializer }
type Synchronizer ¶
type Synchronizer struct { LatestConfig func() (types.Configuration, []uint64) BlockToDecision func(*common.Block) *types.Decision OnCommit func(*common.Block) types.Reconfig Support consensus.ConsenterSupport BlockPuller BlockPuller Logger *flogging.FabricLogger // contains filtered or unexported fields }
func (*Synchronizer) Close ¶
func (s *Synchronizer) Close()
func (*Synchronizer) Sync ¶
func (s *Synchronizer) Sync() types.SyncResponse
type TransactionFuzzer ¶
type TransactionFuzzer struct { Logger *flogging.FabricLogger // contains filtered or unexported fields }
func NewTransactionFuzzer ¶
func NewTransactionFuzzer(cons *smartbft.Consensus) *TransactionFuzzer
func (*TransactionFuzzer) BroadcastTransactionsFuzz ¶
func (tf *TransactionFuzzer) BroadcastTransactionsFuzz(req []byte)
func (*TransactionFuzzer) RunTxFuzz ¶
func (tf *TransactionFuzzer) RunTxFuzz()
type Verifier ¶
type Verifier struct { RuntimeConfig *atomic.Value ReqInspector *RequestInspector ConsenterVerifier ConsenterVerifier AccessController AccessController VerificationSequencer Sequencer Ledger Ledger Logger *flogging.FabricLogger ConfigValidator ConfigValidator }
func (*Verifier) AuxiliaryData ¶
func (*Verifier) RequestsFromProposal ¶
func (v *Verifier) RequestsFromProposal(proposal types.Proposal) []types.RequestInfo
func (*Verifier) VerificationSequence ¶
func (*Verifier) VerifyConsenterSig ¶
func (*Verifier) VerifyProposal ¶
func (*Verifier) VerifyRequest ¶
func (v *Verifier) VerifyRequest(rawRequest []byte) (types.RequestInfo, error)
type WALConfig ¶
type WALConfig struct { WALDir string // WAL data of <my-channel> is stored in WALDir/<my-channel> SnapDir string // Snapshots of <my-channel> are stored in SnapDir/<my-channel> EvictionSuspicion string // Duration threshold that the node samples in order to suspect its eviction from the channel. }
WALConfig consensus specific configuration parameters from orderer.yaml; for SmartBFT only WALDir is relevant.