txvalidator

package
v1.4.10 Latest Latest
Warning

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

Go to latest
Published: Jan 28, 2021 License: Apache-2.0 Imports: 30 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Context added in v1.2.0

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 added in v1.2.0

func (c Context) String() string

String returns a string representation of this Context

type MapBasedPluginMapper added in v1.2.0

type MapBasedPluginMapper map[string]validation.PluginFactory

MapBasedPluginMapper maps plugin names to their corresponding factories

func (MapBasedPluginMapper) PluginFactoryByName added in v1.2.0

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

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

type PluginMapper added in v1.2.0

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

PluginMapper maps plugin names to their corresponding factory instance. Returns nil if the name isn't associated to any plugin.

type PluginName added in v1.2.0

type PluginName string

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

type PluginValidator added in v1.2.0

type PluginValidator struct {
	sync.Mutex

	PluginMapper
	QueryExecutorCreator
	msp.IdentityDeserializer
	// contains filtered or unexported fields
}

PluginValidator values transactions with validation plugins

func NewPluginValidator added in v1.2.0

func NewPluginValidator(pm PluginMapper, qec QueryExecutorCreator, deserializer msp.IdentityDeserializer, capabilities Capabilities) *PluginValidator

NewPluginValidator creates a new PluginValidator

func (*PluginValidator) ValidateWithPlugin added in v1.2.0

func (pv *PluginValidator) ValidateWithPlugin(ctx *Context) error

type PolicyEvaluator added in v1.2.0

type PolicyEvaluator struct {
	msp.IdentityDeserializer
}

func (*PolicyEvaluator) DeserializeIdentity added in v1.2.0

func (id *PolicyEvaluator) DeserializeIdentity(serializedIdentity []byte) (Identity, error)

DeserializeIdentity unmarshals the given identity to msp.Identity

func (*PolicyEvaluator) Evaluate added in v1.2.0

func (id *PolicyEvaluator) Evaluate(policyBytes []byte, signatureSet []*common.SignedData) error

Evaluate takes a set of SignedData and evaluates whether this set of signatures satisfies the policy

type QueryExecutorCreator added in v1.2.0

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

QueryExecutorCreator creates new query executors

type ResultsIteratorImpl added in v1.2.0

type ResultsIteratorImpl struct {
	ledger2.ResultsIterator
}

func (*ResultsIteratorImpl) Next added in v1.2.0

func (it *ResultsIteratorImpl) Next() (QueryResult, error)

type SerializedPolicy added in v1.2.0

type SerializedPolicy []byte

SerializedPolicy defines a marshaled policy

func (SerializedPolicy) Bytes added in v1.2.0

func (sp SerializedPolicy) Bytes() []byte

Bytes returns te bytes of the SerializedPolicy

type StateFetcherImpl added in v1.2.0

type StateFetcherImpl struct {
	QueryExecutorCreator
}

func (*StateFetcherImpl) FetchState added in v1.2.0

func (sf *StateFetcherImpl) FetchState() (State, error)

type StateImpl added in v1.2.0

type StateImpl struct {
	ledger.QueryExecutor
}

func (*StateImpl) GetStateRangeScanIterator added in v1.2.0

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

type Support

type Support interface {
	// Acquire implements semaphore-like acquire semantics
	Acquire(ctx context.Context, n int64) error

	// Release implements semaphore-like release semantics
	Release(n int64)

	// 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(cid string) []string

	// Capabilities defines the capabilities for the application portion of this channel
	Capabilities() channelconfig.ApplicationCapabilities
}

Support provides all of the needed to evaluate the VSCC

type TxValidator added in v1.2.0

type TxValidator struct {
	ChainID string
	Support Support
	Vscc    vsccValidator
}

implementation of Validator interface, keeps reference to the ledger to enable tx simulation and execution of vscc

func NewTxValidator

func NewTxValidator(chainID string, support Support, sccp sysccprovider.SystemChaincodeProvider, pm PluginMapper) *TxValidator

NewTxValidator creates new transactions validator

func (*TxValidator) Validate added in v1.2.0

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 Validator

type Validator interface {
	Validate(block *common.Block) error
}

Validator interface which defines API to validate block transactions and return the bit array mask indicating invalid transactions which didn't pass validation.

type VsccValidatorImpl added in v1.2.0

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 added in v1.2.0

GetInfoForValidate gets the ChaincodeInstance(with latest version) of tx, vscc and policy from lscc

func (*VsccValidatorImpl) VSCCValidateTx added in v1.2.0

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 added in v1.2.0

func (v *VsccValidatorImpl) VSCCValidateTxForCC(ctx *Context) error

Directories

Path Synopsis
Code generated by mockery v1.0.0.
Code generated by mockery v1.0.0.

Jump to

Keyboard shortcuts

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