func ConfigurationEnvelop(configBlock *common.Block) (*common.ConfigEnvelope, error)
ConfigurationEnvelop extract configuration envelop
func LastBlockFromLedgerOrPanic(ledger Ledger, logger PanicLogger) *common.Block
func LastConfigBlockFromLedgerOrPanic(ledger Ledger, logger PanicLogger) *common.Block
func New( pmr PolicyManagerRetriever, signerSerializer signerSerializer, clusterDialer *cluster.PredicateDialer, conf *localconfig.TopLevel, srvConf comm.ServerConfig, srv *comm.GRPCServer, r *multichannel.Registrar, metricsProvider metrics.Provider, ) consensus.Consenter
New creates Consenter of type smart bft
func PreviousConfigBlockFromLedgerOrPanic(ledger Ledger, logger PanicLogger) *common.Block
func ProposalToBlock(proposal types.Proposal) (*common.Block, error)
AccessController is used to determine if a signature of a certain client is valid
type AccessController interface { // Evaluate takes a set of SignedData and evaluates whether this set of signatures satisfies the policy Evaluate(signatureSet []*common.SignedData) error }
type Assembler struct { Logger *flogging.FabricLogger VerificationSeq func() uint64 sync.RWMutex LastConfigBlockNum uint64 LastBlock *common.Block }
func (a *Assembler) AssembleProposal(metadata []byte, requests [][]byte) (nextProp types.Proposal)
BFTChain implements Chain interface to wire with BFT smart library
type BFTChain struct { Config smartbft.Configuration BlockPuller BlockPuller Comm cluster.Communicator SignerSerializer signerSerializer PolicyManager policies.Manager RemoteNodes []cluster.RemoteNode ID2Identities NodeIdentitiesByID Logger *flogging.FabricLogger WALDir string Metrics *Metrics // contains filtered or unexported fields }
func NewChain( config smartbft.Configuration, walDir string, blockPuller BlockPuller, comm cluster.Communicator, signerSerializer signerSerializer, policyManager policies.Manager, remoteNodes []cluster.RemoteNode, id2Identities NodeIdentitiesByID, support consensus.ConsenterSupport, metrics *Metrics, ) (*BFTChain, error)
NewChain creates new BFT Smart chain
func (c *BFTChain) Configure(config *common.Envelope, configSeq uint64) error
func (c *BFTChain) Deliver(proposal types.Proposal, signatures []types.Signature)
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
BlockPuller is used to pull blocks from other OSN
type BlockPuller interface { PullBlock(seq uint64) *common.Block HeightsByEndpoints() (map[string]uint64, error) Close() }
type ByteBufferTuple struct { A []byte B []byte }
func (bbt *ByteBufferTuple) FromBytes(bytes []byte) error
func (bbt *ByteBufferTuple) ToBytes() []byte
ChainGetter obtains instances of ChainSupport for the given channel
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 }
Consenter implementation of the BFT smart based consenter
type Consenter struct { 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 }
func (c *Consenter) HandleChain(support consensus.ConsenterSupport, metadata *common.Metadata) (consensus.Chain, error)
func (c *Consenter) ReceiverByChain(channelID string) MessageReceiver
ReceiverByChain returns the MessageReceiver for the given channelID or nil if not found.
func (c *Consenter) TargetChannel(message proto2.Message) string
TargetChannel extracts the channel from the given proto.Message. Returns an empty string on failure.
ConsenterCertificate denotes a TLS certificate of a consenter
type ConsenterCertificate []byte
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.
ConsenterVerifier is used to determine whether a signature from one of the consenters is valid
type ConsenterVerifier interface { // Evaluate takes a set of SignedData and evaluates whether this set of signatures satisfies the policy Evaluate(signatureSet []*common.SignedData) error }
type Egress struct { Channel string RPC RPC Logger PanicLogger // contains filtered or unexported fields }
func (e *Egress) Nodes() []uint64
func (e *Egress) SendConsensus(targetID uint64, m *protos.Message)
func (e *Egress) SendTransaction(targetID uint64, request []byte)
Ingreess dispatches Submit and Step requests to the designated per chain instances
type Ingreess struct { Logger WarningLogger ChainSelector ReceiverGetter }
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
func (in *Ingreess) OnSubmit(channel string, sender uint64, request *orderer.SubmitRequest) error
OnSubmit notifies the Ingreess for a reception of a SubmitRequest from a given sender on a given channel
type Ledger interface { // Height returns the number of blocks in the ledger this channel is associated with. Height() uint64 // Block returns a block with the given number, // or nil if such a block doesn't exist. Block(number uint64) *common.Block }
MessageReceiver receives messages
type MessageReceiver interface { HandleMessage(sender uint64, m *protos.Message) HandleRequest(sender uint64, req []byte) }
type Metrics struct { ClusterSize metrics.Gauge CommittedBlockNumber metrics.Gauge IsLeader metrics.Gauge LeaderID metrics.Gauge }
func NewMetrics(p metrics.Provider) *Metrics
type NodeIdentitiesByID map[uint64][]byte
func (nibd NodeIdentitiesByID) IdentityToID(identity []byte) (uint64, bool)
type PanicLogger interface { Panicf(template string, args ...interface{}) }
type PolicyManagerRetriever func(channel string) policies.Manager
type RPC interface { SendConsensus(dest uint64, msg *orderer.ConsensusRequest) error SendSubmit(dest uint64, request *orderer.SubmitRequest) error }
ReceiverGetter obtains instances of MessageReceiver given a channel ID
type ReceiverGetter interface { // ReceiverByChain returns the MessageReceiver if it exists, or nil if it doesn't ReceiverByChain(channelID string) MessageReceiver }
RequestInspector inspects incomming requests and validates serialized identity
type RequestInspector struct { ValidateIdentityStructure func(identity *msp.SerializedIdentity) error }
func (ri *RequestInspector) RequestID(rawReq []byte) types.RequestInfo
Sequencer returns sequences
type Sequencer interface { Sequence() uint64 }
type Signature struct { SignatureHeader []byte BlockHeader []byte OrdererBlockMetadata []byte }
func (sig Signature) AsBytes() []byte
func (sig *Signature) Marshal() []byte
func (sig *Signature) Unmarshal(bytes []byte) error
type Signer struct { ID uint64 SignerSerializer SignerSerializer Logger PanicLogger LastConfigBlockNum func() uint64 }
func (s *Signer) Sign(msg []byte) []byte
func (s *Signer) SignProposal(proposal types.Proposal) *types.Signature
type SignerSerializer interface { crypto.Signer crypto.IdentitySerializer }
type Synchronizer struct { BlockToDecision func(block *common.Block) *types.Decision UpdateLastHash func(block *common.Block) Support consensus.ConsenterSupport BlockPuller BlockPuller ClusterSize uint64 Logger *flogging.FabricLogger }
func (s *Synchronizer) Close()
func (s *Synchronizer) Sync() types.Decision
type Verifier struct { ReqInspector *RequestInspector Id2Identity NodeIdentitiesByID ConsenterVerifier ConsenterVerifier AccessController AccessController VerificationSequencer Sequencer Ledger Ledger LastCommittedBlockHash string LastConfigBlockNum uint64 Logger *flogging.FabricLogger // contains filtered or unexported fields }
func (v *Verifier) VerificationSequence() uint64
func (v *Verifier) VerifyConsenterSig(signature types.Signature, prop types.Proposal) 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
WALConfig consensus specific configuration parameters from orderer.yaml; for SmartBFT only WALDir is relevant.
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. }
type WarningLogger interface { Warningf(template string, args ...interface{}) }