fabric: github.com/hyperledger/fabric/core/endorser Index | Files | Directories

package endorser

import "github.com/hyperledger/fabric/core/endorser"

Index

Package Files

endorser.go metrics.go msgvalidation.go plugin_endorser.go pvtrwset_assembler.go state.go support.go

func AssemblePvtRWSet Uses

func AssemblePvtRWSet(channelName string,
    privData *rwset.TxPvtReadWriteSet,
    txsim ledger.SimpleQueryExecutor,
    deployedCCInfoProvider ledger.DeployedChaincodeInfoProvider) (
    *transientstore.TxPvtReadWriteSetWithConfigInfo, error,
)

AssemblePvtRWSet prepares TxPvtReadWriteSet for distribution augmenting it into TxPvtReadWriteSetWithConfigInfo adding information about collections config available related to private read-write set

func CreateCCEventBytes Uses

func CreateCCEventBytes(ccevent *pb.ChaincodeEvent) ([]byte, error)

type Channel Uses

type Channel struct {
    IdentityDeserializer msp.IdentityDeserializer
}

type ChannelFetcher Uses

type ChannelFetcher interface {
    Channel(channelID string) *Channel
}

ChannelFetcher fetches the channel context for a given channel ID.

type ChannelState Uses

type ChannelState struct {
    *transientstore.Store
    QueryCreator
}

ChannelState defines state operations

func (*ChannelState) FetchState Uses

func (cs *ChannelState) FetchState() (endorsement.State, error)

FetchState fetches state

type ChannelStateRetriever Uses

type ChannelStateRetriever interface {
    // NewQueryCreator returns a QueryCreator for the given Channel
    NewQueryCreator(channel string) (QueryCreator, error)
}

ChannelStateRetriever retrieves Channel state

type CollectionConfigRetriever Uses

type CollectionConfigRetriever interface {
    // GetState gets the value for given namespace and key. For a chaincode, the namespace corresponds to the chaincodeId
    GetState(namespace string, key string) ([]byte, error)
}

CollectionConfigRetriever encapsulates sub-functionality of ledger.TxSimulator to abstract minimum required functions set

type Context Uses

type Context struct {
    PluginName     string
    Channel        string
    TxID           string
    Proposal       *pb.Proposal
    SignedProposal *pb.SignedProposal
    Visibility     []byte
    Response       *pb.Response
    Event          []byte
    ChaincodeID    *pb.ChaincodeID
    SimRes         []byte
}

Context defines the data that is related to an in-flight endorsement

func (Context) String Uses

func (c Context) String() string

String returns a text representation of this context

type Endorser Uses

type Endorser struct {
    ChannelFetcher         ChannelFetcher
    LocalMSP               msp.IdentityDeserializer
    PrivateDataDistributor PrivateDataDistributor
    Support                Support
    PvtRWSetAssembler      PvtRWSetAssembler
    Metrics                *Metrics
}

Endorser provides the Endorser service ProcessProposal

func (*Endorser) ProcessProposal Uses

func (e *Endorser) ProcessProposal(ctx context.Context, signedProp *pb.SignedProposal) (*pb.ProposalResponse, error)

ProcessProposal process the Proposal

func (*Endorser) ProcessProposalSuccessfullyOrError Uses

func (e *Endorser) ProcessProposalSuccessfullyOrError(up *UnpackedProposal) (*pb.ProposalResponse, error)

func (*Endorser) SimulateProposal Uses

func (e *Endorser) SimulateProposal(txParams *ccprovider.TransactionParams, chaincodeName string, chaincodeInput *pb.ChaincodeInput) (*pb.Response, []byte, *pb.ChaincodeEvent, error)

SimulateProposal simulates the proposal by calling the chaincode

type MapBasedPluginMapper Uses

type MapBasedPluginMapper map[string]endorsement.PluginFactory

MapBasedPluginMapper maps plugin names to their corresponding factories

func (MapBasedPluginMapper) PluginFactoryByName Uses

func (m MapBasedPluginMapper) PluginFactoryByName(name PluginName) endorsement.PluginFactory

PluginFactoryByName returns a plugin factory for the given plugin name, or nil if not found

type Metrics Uses

type Metrics struct {
    ProposalDuration         metrics.Histogram
    ProposalsReceived        metrics.Counter
    SuccessfulProposals      metrics.Counter
    ProposalValidationFailed metrics.Counter
    ProposalACLCheckFailed   metrics.Counter
    InitFailed               metrics.Counter
    EndorsementsFailed       metrics.Counter
    DuplicateTxsFailure      metrics.Counter
}

func NewMetrics Uses

func NewMetrics(p metrics.Provider) *Metrics

type PeerOperations Uses

type PeerOperations interface {
    GetApplicationConfig(cid string) (channelconfig.Application, bool)
    GetLedger(cid string) ledger.PeerLedger
}

PeerOperations contains the peer operatiosn required to support the endorser.

type PluginEndorser Uses

type PluginEndorser struct {
    sync.Mutex
    PluginMapper

    ChannelStateRetriever
    endorsement3.SigningIdentityFetcher
    TransientStoreRetriever
    // contains filtered or unexported fields
}

PluginEndorser endorsers proposal responses using plugins

func NewPluginEndorser Uses

func NewPluginEndorser(ps *PluginSupport) *PluginEndorser

NewPluginEndorser endorses with using a plugin

func (*PluginEndorser) EndorseWithPlugin Uses

func (pe *PluginEndorser) EndorseWithPlugin(pluginName, channelID string, prpBytes []byte, signedProposal *pb.SignedProposal) (*pb.Endorsement, []byte, error)

EndorseWithPlugin endorses the response with a plugin

type PluginMapper Uses

type PluginMapper interface {
    PluginFactoryByName(name PluginName) endorsement.PluginFactory
}

PluginMapper maps plugin names to their corresponding factories

type PluginName Uses

type PluginName string

PluginName defines the name of the plugin as it appears in the configuration

type PluginSupport Uses

type PluginSupport struct {
    ChannelStateRetriever
    endorsement3.SigningIdentityFetcher
    PluginMapper
    TransientStoreRetriever
}

PluginSupport aggregates the support interfaces needed for the operation of the plugin endorser

type PrivateDataDistributor Uses

type PrivateDataDistributor interface {
    DistributePrivateData(channel string, txID string, privateData *transientstore.TxPvtReadWriteSetWithConfigInfo, blkHt uint64) error
}

type PvtRWSetAssembler Uses

type PvtRWSetAssembler interface {
    // AssemblePvtRWSet prepares TxPvtReadWriteSet for distribution
    // augmenting it into TxPvtReadWriteSetWithConfigInfo adding
    // information about collections config available related
    // to private read-write set
    AssemblePvtRWSet(channelName string,
        privData *rwset.TxPvtReadWriteSet,
        txsim ledger.SimpleQueryExecutor,
        deployedCCInfoProvider ledger.DeployedChaincodeInfoProvider) (
        *transientstore.TxPvtReadWriteSetWithConfigInfo, error,
    )
}

PvtRWSetAssembler assembles private read write set for distribution augments with additional information if needed

type QueryCreator Uses

type QueryCreator interface {
    NewQueryExecutor() (ledger.QueryExecutor, error)
}

go:generate mockery -dir . -name QueryCreator -case underscore -output mocks/ QueryCreator creates new QueryExecutors

type StateContext Uses

type StateContext struct {
    *transientstore.Store
    ledger.QueryExecutor
}

StateContext defines an execution context that interacts with the state

func (*StateContext) GetTransientByTXID Uses

func (sc *StateContext) GetTransientByTXID(txID string) ([]*rwset.TxPvtReadWriteSet, error)

GetTransientByTXID returns the private data associated with this transaction ID.

type Support Uses

type Support interface {
    identity.SignerSerializer
    // GetTxSimulator returns the transaction simulator for the specified ledger
    // a client may obtain more than one such simulator; they are made unique
    // by way of the supplied txid
    GetTxSimulator(ledgername string, txid string) (ledger.TxSimulator, error)

    // GetHistoryQueryExecutor gives handle to a history query executor for the
    // specified ledger
    GetHistoryQueryExecutor(ledgername string) (ledger.HistoryQueryExecutor, error)

    // GetTransactionByID retrieves a transaction by id
    GetTransactionByID(chid, txID string) (*pb.ProcessedTransaction, error)

    // IsSysCC returns true if the name matches a system chaincode's
    // system chaincode names are system, chain wide
    IsSysCC(name string) bool

    // Execute - execute proposal, return original response of chaincode
    Execute(txParams *ccprovider.TransactionParams, name string, input *pb.ChaincodeInput) (*pb.Response, *pb.ChaincodeEvent, error)

    // ExecuteLegacyInit - executes a deployment proposal, return original response of chaincode
    ExecuteLegacyInit(txParams *ccprovider.TransactionParams, name, version string, spec *pb.ChaincodeInput) (*pb.Response, *pb.ChaincodeEvent, error)

    // ChaincodeEndorsementInfo returns the information from lifecycle required to endorse the chaincode.
    ChaincodeEndorsementInfo(channelID, chaincodeID string, txsim ledger.QueryExecutor) (*lifecycle.ChaincodeEndorsementInfo, error)

    // CheckACL checks the ACL for the resource for the channel using the
    // SignedProposal from which an id can be extracted for testing against a policy
    CheckACL(channelID string, signedProp *pb.SignedProposal) error

    // EndorseWithPlugin endorses the response with a plugin
    EndorseWithPlugin(pluginName, channnelID string, prpBytes []byte, signedProposal *pb.SignedProposal) (*pb.Endorsement, []byte, error)

    // GetLedgerHeight returns ledger height for given channelID
    GetLedgerHeight(channelID string) (uint64, error)

    // GetDeployedCCInfoProvider returns ledger.DeployedChaincodeInfoProvider
    GetDeployedCCInfoProvider() ledger.DeployedChaincodeInfoProvider
}

Support contains functions that the endorser requires to execute its tasks

type SupportImpl Uses

type SupportImpl struct {
    *PluginEndorser
    identity.SignerSerializer
    Peer             PeerOperations
    ChaincodeSupport *chaincode.ChaincodeSupport
    ACLProvider      aclmgmt.ACLProvider
    BuiltinSCCs      scc.BuiltinSCCs
}

SupportImpl provides an implementation of the endorser.Support interface issuing calls to various static methods of the peer

func (*SupportImpl) ChaincodeEndorsementInfo Uses

func (s *SupportImpl) ChaincodeEndorsementInfo(channelID, chaincodeName string, txsim ledger.QueryExecutor) (*lifecycle.ChaincodeEndorsementInfo, error)

ChaincodeEndorsementInfo returns info needed to endorse a tx for the chaincode with the supplied name.

func (*SupportImpl) CheckACL Uses

func (s *SupportImpl) CheckACL(channelID string, signedProp *pb.SignedProposal) error

CheckACL checks the ACL for the resource for the Channel using the SignedProposal from which an id can be extracted for testing against a policy

func (*SupportImpl) Execute Uses

func (s *SupportImpl) Execute(txParams *ccprovider.TransactionParams, name string, input *pb.ChaincodeInput) (*pb.Response, *pb.ChaincodeEvent, error)

Execute a proposal and return the chaincode response

func (*SupportImpl) ExecuteLegacyInit Uses

func (s *SupportImpl) ExecuteLegacyInit(txParams *ccprovider.TransactionParams, name, version string, input *pb.ChaincodeInput) (*pb.Response, *pb.ChaincodeEvent, error)

ExecuteInit a deployment proposal and return the chaincode response

func (*SupportImpl) GetApplicationConfig Uses

func (s *SupportImpl) GetApplicationConfig(cid string) (channelconfig.Application, bool)

GetApplicationConfig returns the configtxapplication.SharedConfig for the Channel and whether the Application config exists

func (*SupportImpl) GetDeployedCCInfoProvider Uses

func (s *SupportImpl) GetDeployedCCInfoProvider() ledger.DeployedChaincodeInfoProvider

GetDeployedCCInfoProvider returns ledger.DeployedChaincodeInfoProvider

func (*SupportImpl) GetHistoryQueryExecutor Uses

func (s *SupportImpl) GetHistoryQueryExecutor(ledgername string) (ledger.HistoryQueryExecutor, error)

GetHistoryQueryExecutor gives handle to a history query executor for the specified ledger

func (*SupportImpl) GetLedgerHeight Uses

func (s *SupportImpl) GetLedgerHeight(channelID string) (uint64, error)

GetLedgerHeight returns ledger height for given channelID

func (*SupportImpl) GetTransactionByID Uses

func (s *SupportImpl) GetTransactionByID(chid, txID string) (*pb.ProcessedTransaction, error)

GetTransactionByID retrieves a transaction by id

func (*SupportImpl) GetTxSimulator Uses

func (s *SupportImpl) GetTxSimulator(ledgername string, txid string) (ledger.TxSimulator, error)

GetTxSimulator returns the transaction simulator for the specified ledger a client may obtain more than one such simulator; they are made unique by way of the supplied txid

func (*SupportImpl) IsSysCC Uses

func (s *SupportImpl) IsSysCC(name string) bool

IsSysCC returns true if the name matches a system chaincode's system chaincode names are system, chain wide

func (*SupportImpl) NewQueryCreator Uses

func (s *SupportImpl) NewQueryCreator(channel string) (QueryCreator, error)

func (*SupportImpl) SigningIdentityForRequest Uses

func (s *SupportImpl) SigningIdentityForRequest(*pb.SignedProposal) (endorsement.SigningIdentity, error)

type TransientStoreRetriever Uses

type TransientStoreRetriever interface {
    // StoreForChannel returns the transient store for the given channel
    StoreForChannel(channel string) *transientstore.Store
}

TransientStoreRetriever retrieves transient stores

type UnpackedProposal Uses

type UnpackedProposal struct {
    ChaincodeName   string
    ChannelHeader   *cb.ChannelHeader
    Input           *pb.ChaincodeInput
    Proposal        *pb.Proposal
    SignatureHeader *cb.SignatureHeader
    SignedProposal  *pb.SignedProposal
    ProposalHash    []byte
}

UnpackedProposal contains the interesting artifacts from inside the proposal.

func UnpackProposal Uses

func UnpackProposal(signedProp *pb.SignedProposal) (*UnpackedProposal, error)

UnpackProposal creates an an *UnpackedProposal which is guaranteed to have no zero-ed fields or it returns an error.

func (*UnpackedProposal) ChannelID Uses

func (up *UnpackedProposal) ChannelID() string

func (*UnpackedProposal) TxID Uses

func (up *UnpackedProposal) TxID() string

func (*UnpackedProposal) Validate Uses

func (up *UnpackedProposal) Validate(idDeserializer msp.IdentityDeserializer) error

Directories

PathSynopsis
fakeCode generated by counterfeiter.
mocksCode generated by mockery v1.0.0

Package endorser imports 34 packages (graph) and is imported by 17 packages. Updated 2019-11-14. Refresh now. Tools for package owners.