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{})
}