...

Package multichannel

import "github.com/hyperledger/fabric/orderer/common/multichannel"
Overview
Index

Overview ▾

Package multichannel tracks the channel resources for the orderer. It initially loads the set of existing channels, and provides an interface for users of these channels to retrieve them, or create new ones.

Index ▾

func ConfigBlock(reader blockledger.Reader) *cb.Block
type BlockWriter
    func (bw *BlockWriter) CreateNextBlock(messages []*cb.Envelope) *cb.Block
    func (bw *BlockWriter) WriteBlock(block *cb.Block, encodedMetadataValue []byte)
    func (bw *BlockWriter) WriteConfigBlock(block *cb.Block, encodedMetadataValue []byte)
type ChainSupport
    func (cs *ChainSupport) Append(block *cb.Block) error
    func (cs *ChainSupport) Block(number uint64) *cb.Block
    func (cs *ChainSupport) BlockCutter() blockcutter.Receiver
    func (cs *ChainSupport) ChainID() string
    func (cs *ChainSupport) ConfigProto() *cb.Config
    func (cs *ChainSupport) ProposeConfigUpdate(configtx *cb.Envelope) (*cb.ConfigEnvelope, error)
    func (cs *ChainSupport) Reader() blockledger.Reader
    func (cs *ChainSupport) Sequence() uint64
    func (cs *ChainSupport) Signer() crypto.LocalSigner
    func (cs *ChainSupport) Validate(configEnv *cb.ConfigEnvelope) error
    func (cs *ChainSupport) VerifyBlockSignature(sd []*cb.SignedData, envelope *cb.ConfigEnvelope) error
type Registrar
    func NewRegistrar(config localconfig.TopLevel, ledgerFactory blockledger.Factory, signer crypto.LocalSigner, metricsProvider metrics.Provider, callbacks ...channelconfig.BundleActor) *Registrar
    func (r *Registrar) BroadcastChannelSupport(msg *cb.Envelope) (*cb.ChannelHeader, bool, *ChainSupport, error)
    func (r *Registrar) ChannelsCount() int
    func (r *Registrar) CreateBundle(channelID string, config *cb.Config) (channelconfig.Resources, error)
    func (r *Registrar) CreateChain(chainName string)
    func (r *Registrar) GetChain(chainID string) *ChainSupport
    func (r *Registrar) Initialize(consenters map[string]consensus.Consenter)
    func (r *Registrar) NewChannelConfig(envConfigUpdate *cb.Envelope) (channelconfig.Resources, error)
    func (r *Registrar) SystemChannelID() string

Package files

blockwriter.go chainsupport.go registrar.go

func ConfigBlock

func ConfigBlock(reader blockledger.Reader) *cb.Block

ConfigBlock retrieves the last configuration block from the given ledger. Panics on failure.

type BlockWriter

BlockWriter efficiently writes the blockchain to disk. To safely use BlockWriter, only one thread should interact with it. BlockWriter will spawn additional committing go routines and handle locking so that these other go routines safely interact with the calling one.

type BlockWriter struct {
    // contains filtered or unexported fields
}

func (*BlockWriter) CreateNextBlock

func (bw *BlockWriter) CreateNextBlock(messages []*cb.Envelope) *cb.Block

CreateNextBlock creates a new block with the next block number, and the given contents.

func (*BlockWriter) WriteBlock

func (bw *BlockWriter) WriteBlock(block *cb.Block, encodedMetadataValue []byte)

WriteBlock should be invoked for blocks which contain normal transactions. It sets the target block as the pending next block, and returns before it is committed. Before returning, it acquires the committing lock, and spawns a go routine which will annotate the block with metadata and signatures, and write the block to the ledger then release the lock. This allows the calling thread to begin assembling the next block before the commit phase is complete.

func (*BlockWriter) WriteConfigBlock

func (bw *BlockWriter) WriteConfigBlock(block *cb.Block, encodedMetadataValue []byte)

WriteConfigBlock should be invoked for blocks which contain a config transaction. This call will block until the new config has taken effect, then will return while the block is written asynchronously to disk.

type ChainSupport

ChainSupport holds the resources for a particular channel.

type ChainSupport struct {
    msgprocessor.Processor
    *BlockWriter
    consensus.Chain

    crypto.LocalSigner
    // contains filtered or unexported fields
}

func (*ChainSupport) Append

func (cs *ChainSupport) Append(block *cb.Block) error

Append appends a new block to the ledger in its raw form, unlike WriteBlock that also mutates its metadata.

func (*ChainSupport) Block

func (cs *ChainSupport) Block(number uint64) *cb.Block

Block returns a block with the following number, or nil if such a block doesn't exist.

func (*ChainSupport) BlockCutter

func (cs *ChainSupport) BlockCutter() blockcutter.Receiver

BlockCutter returns the blockcutter.Receiver instance for this channel.

func (*ChainSupport) ChainID

func (cs *ChainSupport) ChainID() string

ChainID passes through to the underlying configtx.Validator

func (*ChainSupport) ConfigProto

func (cs *ChainSupport) ConfigProto() *cb.Config

ConfigProto passes through to the underlying configtx.Validator

func (*ChainSupport) ProposeConfigUpdate

func (cs *ChainSupport) ProposeConfigUpdate(configtx *cb.Envelope) (*cb.ConfigEnvelope, error)

ProposeConfigUpdate passes through to the underlying configtx.Validator

func (*ChainSupport) Reader

func (cs *ChainSupport) Reader() blockledger.Reader

func (*ChainSupport) Sequence

func (cs *ChainSupport) Sequence() uint64

Sequence passes through to the underlying configtx.Validator

func (*ChainSupport) Signer

func (cs *ChainSupport) Signer() crypto.LocalSigner

Signer returns the crypto.Localsigner for this channel.

func (*ChainSupport) Validate

func (cs *ChainSupport) Validate(configEnv *cb.ConfigEnvelope) error

Validate passes through to the underlying configtx.Validator

func (*ChainSupport) VerifyBlockSignature

func (cs *ChainSupport) VerifyBlockSignature(sd []*cb.SignedData, envelope *cb.ConfigEnvelope) error

VerifyBlockSignature verifies a signature of a block. It has an optional argument of a configuration envelope which would make the block verification to use validation rules based on the given configuration in the ConfigEnvelope. If the config envelope passed is nil, then the validation rules used are the ones that were applied at commit of previous blocks.

type Registrar

Registrar serves as a point of access and control for the individual channel resources.

type Registrar struct {
    // contains filtered or unexported fields
}

func NewRegistrar

func NewRegistrar(
    config localconfig.TopLevel,
    ledgerFactory blockledger.Factory,
    signer crypto.LocalSigner,
    metricsProvider metrics.Provider,
    callbacks ...channelconfig.BundleActor) *Registrar

NewRegistrar produces an instance of a *Registrar.

func (*Registrar) BroadcastChannelSupport

func (r *Registrar) BroadcastChannelSupport(msg *cb.Envelope) (*cb.ChannelHeader, bool, *ChainSupport, error)

BroadcastChannelSupport returns the message channel header, whether the message is a config update and the channel resources for a message or an error if the message is not a message which can be processed directly (like CONFIG and ORDERER_TRANSACTION messages)

func (*Registrar) ChannelsCount

func (r *Registrar) ChannelsCount() int

ChannelsCount returns the count of the current total number of channels.

func (*Registrar) CreateBundle

func (r *Registrar) CreateBundle(channelID string, config *cb.Config) (channelconfig.Resources, error)

CreateBundle calls channelconfig.NewBundle

func (*Registrar) CreateChain

func (r *Registrar) CreateChain(chainName string)

CreateChain makes the Registrar create a chain with the given name.

func (*Registrar) GetChain

func (r *Registrar) GetChain(chainID string) *ChainSupport

GetChain retrieves the chain support for a chain if it exists.

func (*Registrar) Initialize

func (r *Registrar) Initialize(consenters map[string]consensus.Consenter)

func (*Registrar) NewChannelConfig

func (r *Registrar) NewChannelConfig(envConfigUpdate *cb.Envelope) (channelconfig.Resources, error)

NewChannelConfig produces a new template channel configuration based on the system channel's current config.

func (*Registrar) SystemChannelID

func (r *Registrar) SystemChannelID() string

SystemChannelID returns the ChannelID for the system channel.