txvalidator

package
v2.0.1+incompatible Latest Latest
Warning

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

Go to latest
Published: Feb 26, 2020 License: Apache-2.0 Imports: 29 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func IsSysCC

func IsSysCC(name string) bool

func IsSysCCAndNotInvokableCC2CC

func IsSysCCAndNotInvokableCC2CC(name string) bool

func IsSysCCAndNotInvokableExternal

func IsSysCCAndNotInvokableExternal(name string) bool

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

func (Context) String

func (c Context) String() string

String returns a string representation of this Context

type IdentityDeserializer

type IdentityDeserializer interface {
	msp.IdentityDeserializer
}

IdentityDeserializer local interface used to generate mock for foreign interface.

type Mapper

type Mapper interface {
	vp.Mapper
}

Mapper local interface use 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) 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

func (s *StateImpl) GetStateRangeScanIterator(namespace string, startKey string, endKey string) (vs.ResultsIterator, error)

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:

  1. to keep the approach simple, the committer thread enqueues all transactions in the block and then moves on to reading the results.
  2. 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

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

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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