smartbft

package
v0.0.0-...-adac428 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 12, 2021 License: Apache-2.0 Imports: 42 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ConfigurationEnvelop

func ConfigurationEnvelop(configBlock *common.Block) (*common.ConfigEnvelope, error)

ConfigurationEnvelop extract configuration envelop

func LastBlockFromLedgerOrPanic

func LastBlockFromLedgerOrPanic(ledger Ledger, logger PanicLogger) *common.Block

func LastConfigBlockFromLedgerOrPanic

func LastConfigBlockFromLedgerOrPanic(ledger Ledger, logger PanicLogger) *common.Block

func New

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

func PreviousConfigBlockFromLedgerOrPanic(ledger Ledger, logger PanicLogger) *common.Block

func ProposalToBlock

func ProposalToBlock(proposal types.Proposal) (*common.Block, error)

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 {
	Logger          *flogging.FabricLogger
	VerificationSeq func() uint64
	sync.RWMutex
	LastConfigBlockNum uint64
	LastBlock          *common.Block
}

func (*Assembler) AssembleProposal

func (a *Assembler) AssembleProposal(metadata []byte, requests [][]byte) (nextProp types.Proposal)

type BFTChain

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
}

BFTChain implements Chain interface to wire with BFT smart library

func NewChain

func NewChain(
	cv ConfigValidator,
	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 (*BFTChain) Configure

func (c *BFTChain) Configure(config *common.Envelope, configSeq uint64) error

func (*BFTChain) Deliver

func (c *BFTChain) Deliver(proposal types.Proposal, signatures []types.Signature)

func (*BFTChain) Errored

func (c *BFTChain) Errored() <-chan struct{}

func (*BFTChain) Halt

func (c *BFTChain) Halt()

func (*BFTChain) HandleMessage

func (c *BFTChain) HandleMessage(sender uint64, m *smartbftprotos.Message)

func (*BFTChain) HandleRequest

func (c *BFTChain) HandleRequest(sender uint64, req []byte)

func (*BFTChain) Order

func (c *BFTChain) Order(env *common.Envelope, configSeq uint64) error

func (*BFTChain) Start

func (c *BFTChain) Start()

func (*BFTChain) WaitReady

func (c *BFTChain) WaitReady() error

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

type ByteBufferTuple struct {
	A []byte
	B []byte
}

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 ConfigTxValidator interface {
	configtx.Validator
}

type ConfigUpdateProposer

type ConfigUpdateProposer interface {
	ProposeConfigUpdate(channel string, configtx *common.Envelope) (*common.ConfigEnvelope, error)
}

type ConfigValidator

type ConfigValidator interface {
	ValidateConfig(env *common.Envelope) error
}

type 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
}

Consenter implementation of the BFT smart based consenter

func (*Consenter) HandleChain

func (c *Consenter) HandleChain(support consensus.ConsenterSupport, metadata *common.Metadata) (consensus.Chain, error)

func (*Consenter) ReceiverByChain

func (c *Consenter) ReceiverByChain(channelID string) MessageReceiver

ReceiverByChain returns the MessageReceiver for the given channelID or nil if not found.

func (*Consenter) TargetChannel

func (c *Consenter) TargetChannel(message proto2.Message) string

TargetChannel extracts the channel from the given proto.Message. Returns an empty string on failure.

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

type Egress struct {
	Channel string
	RPC     RPC
	Logger  PanicLogger
	// contains filtered or unexported fields
}

func (*Egress) Nodes

func (e *Egress) Nodes() []uint64

func (*Egress) SendConsensus

func (e *Egress) SendConsensus(targetID uint64, m *protos.Message)

func (*Egress) SendTransaction

func (e *Egress) SendTransaction(targetID uint64, request []byte)

type Filters

type Filters interface {
	ApplyFilters(channel string, env *common.Envelope) error
}

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

func (*Ingreess) OnSubmit

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

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
}

type MessageReceiver

type MessageReceiver interface {
	HandleMessage(sender uint64, m *protos.Message)
	HandleRequest(sender uint64, req []byte)
}

MessageReceiver receives messages

type Metrics

type Metrics struct {
	ClusterSize          metrics.Gauge
	CommittedBlockNumber metrics.Gauge
	IsLeader             metrics.Gauge
	LeaderID             metrics.Gauge
}

func NewMetrics

func NewMetrics(p metrics.Provider) *Metrics

type NodeIdentitiesByID

type NodeIdentitiesByID map[uint64][]byte

func (NodeIdentitiesByID) IdentityToID

func (nibd NodeIdentitiesByID) IdentityToID(identity []byte) (uint64, bool)

type PanicLogger

type PanicLogger interface {
	Panicf(template string, args ...interface{})
}

type PolicyManagerRetriever

type PolicyManagerRetriever func(channel string) policies.Manager

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 Sequencer

type Sequencer interface {
	Sequence() uint64
}

Sequencer returns sequences

type Signature

type Signature struct {
	SignatureHeader      []byte
	BlockHeader          []byte
	OrdererBlockMetadata []byte
}

func (Signature) AsBytes

func (sig Signature) AsBytes() []byte

func (*Signature) Marshal

func (sig *Signature) Marshal() []byte

func (*Signature) Unmarshal

func (sig *Signature) Unmarshal(bytes []byte) error

type Signer

type Signer struct {
	ID                 uint64
	SignerSerializer   SignerSerializer
	Logger             PanicLogger
	LastConfigBlockNum func(*common.Block) uint64
}

func (*Signer) Sign

func (s *Signer) Sign(msg []byte) []byte

func (*Signer) SignProposal

func (s *Signer) SignProposal(proposal types.Proposal) *types.Signature

type SignerSerializer

type SignerSerializer interface {
	crypto.Signer
	crypto.IdentitySerializer
}

type Synchronizer

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 (*Synchronizer) Close

func (s *Synchronizer) Close()

func (*Synchronizer) Sync

func (s *Synchronizer) Sync() types.Decision

type Verifier

type Verifier struct {
	ReqInspector           *RequestInspector
	Id2Identity            NodeIdentitiesByID
	ConsenterVerifier      ConsenterVerifier
	AccessController       AccessController
	VerificationSequencer  Sequencer
	Ledger                 Ledger
	LastCommittedBlockHash string
	LastConfigBlockNum     uint64
	Logger                 *flogging.FabricLogger

	ConfigValidator ConfigValidator
	// contains filtered or unexported fields
}

func (*Verifier) VerificationSequence

func (v *Verifier) VerificationSequence() uint64

func (*Verifier) VerifyConsenterSig

func (v *Verifier) VerifyConsenterSig(signature types.Signature, prop types.Proposal) error

func (*Verifier) VerifyProposal

func (v *Verifier) VerifyProposal(proposal types.Proposal) ([]types.RequestInfo, error)

func (*Verifier) VerifyRequest

func (v *Verifier) VerifyRequest(rawRequest []byte) (types.RequestInfo, error)

func (*Verifier) VerifySignature

func (v *Verifier) VerifySignature(signature types.Signature) 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.

type WarningLogger

type WarningLogger interface {
	Warningf(template string, args ...interface{})
}

Directories

Path Synopsis
Code generated by counterfeiter.
Code generated by counterfeiter.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL