StateBasedValidator is used to validate a transaction that performs changes to KVS keys that use key-level endorsement policies. This interface is supposed to be called by any validator plugin (including the default validator plugin). The functions of this interface are to be called as follows: 1) the validator plugin calls PreValidate (even before determining whether the transaction is
valid)
2) the validator plugin calls Validate before or after having determined the validity of the
transaction based on other considerations
3) the validator plugin determines the overall validity of the transaction and then calls
PostValidate
type StateBasedValidator interface { // PreValidate sets the internal data structures of the validator needed before validation // of transaction `txNum` in the specified block can proceed PreValidate(txNum uint64, block *common.Block) // Validate determines whether the transaction on the specified channel at the specified height // is valid according to its chaincode-level endorsement policy and any key-level validation // parametres Validate(cc string, blockNum, txNum uint64, rwset, prp, ep []byte, endorsements []*peer.Endorsement) commonerrors.TxValidationError // PostValidate sets the internal data structures of the validator needed after the validation // code was determined for a transaction on the specified channel at the specified height PostValidate(cc string, blockNum, txNum uint64, err error) }
Validator implements the default transaction validation policy, which is to check the correctness of the read-write set and the endorsement signatures against an endorsement policy that is supplied as argument to every invoke
type Validator struct {
// contains filtered or unexported fields
}
func New(c Capabilities, s StateFetcher, d IdentityDeserializer, pe PolicyEvaluator) *Validator
New creates a new instance of the default VSCC Typically this will only be invoked once per peer
func (vscc *Validator) Validate( block *common.Block, namespace string, txPosition int, actionPosition int, policyBytes []byte, ) commonerrors.TxValidationError
Validate validates the given envelope corresponding to a transaction with an endorsement policy as given in its serialized form. Note that in the case of dependencies in a block, such as tx_n modifying the endorsement policy for key a and tx_n+1 modifying the value of key a, Validate(tx_n+1) will block until Validate(tx_n) has been resolved. If working with a limited number of goroutines for parallel validation, ensure that they are allocated to transactions in ascending order.
func (vscc *Validator) ValidateLSCCInvocation( chid string, env *common.Envelope, cap *pb.ChaincodeActionPayload, payl *common.Payload, ac channelconfig.ApplicationCapabilities, ) commonerrors.TxValidationError