Documentation ¶
Index ¶
- func IsSysCC(name string) bool
- func IsSysCCAndNotInvokableCC2CC(name string) bool
- func IsSysCCAndNotInvokableExternal(name string) bool
- type Capabilities
- type ChannelResources
- type Context
- type IdentityDeserializer
- type Mapper
- type Plugin
- type PluginFactory
- type PluginValidator
- type PolicyEvaluator
- type QueryExecutorCreator
- type ResultsIteratorImpl
- type Semaphore
- type StateFetcherImpl
- type StateImpl
- type TxValidator
- type VsccValidatorImpl
- func (v *VsccValidatorImpl) GetInfoForValidate(chdr *common.ChannelHeader, ccID string) (*sysccprovider.ChaincodeInstance, *sysccprovider.ChaincodeInstance, []byte, ...)
- func (v *VsccValidatorImpl) VSCCValidateTx(seq int, payload *common.Payload, envBytes []byte, block *common.Block) (error, peer.TxValidationCode)
- func (v *VsccValidatorImpl) VSCCValidateTxForCC(ctx *Context) error
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Capabilities ¶
type Capabilities interface { vc.Capabilities }
Capabilities local interface used to generate mock for foreign interface.
type ChannelResources ¶
type ChannelResources interface { // Ledger returns the ledger associated with this validator Ledger() ledger.PeerLedger // MSPManager returns the MSP manager for this channel MSPManager() msp.MSPManager // Apply attempts to apply a configtx to become the new config Apply(configtx *common.ConfigEnvelope) error // GetMSPIDs returns the IDs for the application MSPs // that have been defined in the channel GetMSPIDs() []string // Capabilities defines the capabilities for the application portion of this channel Capabilities() channelconfig.ApplicationCapabilities }
ChannelResources provides access to channel artefacts or functions to interact with them
type Context ¶
type Context struct { Seq int Envelope []byte TxID string Channel string VSCCName string Policy []byte Namespace string Block *common.Block }
Context defines information about a transaction that is being validated
type IdentityDeserializer ¶
type IdentityDeserializer interface { msp.IdentityDeserializer }
IdentityDeserializer local interface used to generate mock for foreign interface.
type Plugin ¶
type Plugin interface { validation.Plugin }
Plugin local interface used to generate mock for foreign interface.
type PluginFactory ¶
type PluginFactory interface { validation.PluginFactory }
PluginFactory local interface used to generate mock for foreign interface.
type PluginValidator ¶
type PluginValidator struct { sync.Mutex vp.Mapper QueryExecutorCreator msp.IdentityDeserializer // contains filtered or unexported fields }
PluginValidator values transactions with validation plugins
func NewPluginValidator ¶
func NewPluginValidator(pm vp.Mapper, qec QueryExecutorCreator, deserializer msp.IdentityDeserializer, capabilities vc.Capabilities) *PluginValidator
NewPluginValidator creates a new PluginValidator
func (*PluginValidator) ValidateWithPlugin ¶
func (pv *PluginValidator) ValidateWithPlugin(ctx *Context) error
type PolicyEvaluator ¶
type PolicyEvaluator struct {
msp.IdentityDeserializer
}
func (*PolicyEvaluator) DeserializeIdentity ¶
func (id *PolicyEvaluator) DeserializeIdentity(serializedIdentity []byte) (vi.Identity, error)
DeserializeIdentity unmarshals the given identity to msp.Identity
func (*PolicyEvaluator) Evaluate ¶
func (id *PolicyEvaluator) Evaluate(policyBytes []byte, signatureSet []*protoutil.SignedData, vrfSet []*protoutil.VrfData) error
Evaluate takes a set of SignedData and evaluates whether this set of signatures satisfies the policy
type QueryExecutorCreator ¶
type QueryExecutorCreator interface {
NewQueryExecutor() (ledger.QueryExecutor, error)
}
QueryExecutorCreator creates new query executors
type ResultsIteratorImpl ¶
type ResultsIteratorImpl struct {
ledger2.ResultsIterator
}
func (*ResultsIteratorImpl) Next ¶
func (it *ResultsIteratorImpl) Next() (vs.QueryResult, error)
type Semaphore ¶
type Semaphore interface { // Acquire implements semaphore-like acquire semantics Acquire(ctx context.Context) error // Release implements semaphore-like release semantics Release() }
Semaphore provides to the validator means for synchronisation
type StateFetcherImpl ¶
type StateFetcherImpl struct {
QueryExecutorCreator
}
func (*StateFetcherImpl) FetchState ¶
func (sf *StateFetcherImpl) FetchState() (vs.State, error)
type StateImpl ¶
type StateImpl struct {
ledger.QueryExecutor
}
func (*StateImpl) GetStateRangeScanIterator ¶
type TxValidator ¶
type TxValidator struct { ChannelID string Semaphore Semaphore ChannelResources ChannelResources Vscc vsccValidator CryptoProvider bccsp.BCCSP }
implementation of Validator interface, keeps reference to the ledger to enable tx simulation and execution of vscc
func NewTxValidator ¶
func NewTxValidator(channelID string, sem Semaphore, cr ChannelResources, pm plugin.Mapper, cryptoProvider bccsp.BCCSP) *TxValidator
NewTxValidator creates new transactions validator
func (*TxValidator) Validate ¶
func (v *TxValidator) Validate(block *common.Block) error
Validate performs the validation of a block. The validation of each transaction in the block is performed in parallel. The approach is as follows: the committer thread starts the tx validation function in a goroutine (using a semaphore to cap the number of concurrent validating goroutines). The committer thread then reads results of validation (in orderer of completion of the goroutines) from the results channel. The goroutines perform the validation of the txs in the block and enqueue the validation result in the results channel. A few note-worthy facts:
- to keep the approach simple, the committer thread enqueues all transactions in the block and then moves on to reading the results.
- for parallel validation to work, it is important that the validation function does not change the state of the system. Otherwise the order in which validation is perform matters and we have to resort to sequential validation (or some locking). This is currently true, because the only function that affects state is when a config transaction is received, but they are guaranteed to be alone in the block. If/when this assumption is violated, this code must be changed.
type VsccValidatorImpl ¶
type VsccValidatorImpl struct {
// contains filtered or unexported fields
}
VsccValidatorImpl is the implementation used to call the vscc chaincode and validate block transactions
func (*VsccValidatorImpl) GetInfoForValidate ¶
func (v *VsccValidatorImpl) GetInfoForValidate(chdr *common.ChannelHeader, ccID string) (*sysccprovider.ChaincodeInstance, *sysccprovider.ChaincodeInstance, []byte, error)
GetInfoForValidate gets the ChaincodeInstance(with latest version) of tx, vscc and policy from lscc
func (*VsccValidatorImpl) VSCCValidateTx ¶
func (v *VsccValidatorImpl) VSCCValidateTx(seq int, payload *common.Payload, envBytes []byte, block *common.Block) (error, peer.TxValidationCode)
VSCCValidateTx executes vscc validation for transaction
func (*VsccValidatorImpl) VSCCValidateTxForCC ¶
func (v *VsccValidatorImpl) VSCCValidateTxForCC(ctx *Context) error