Skip to content

Commit

Permalink
[FAB-9834] interfaces for key-level validation
Browse files Browse the repository at this point in the history
This change set introduces new interfaces used for validation of transactions
that use key-level endorsements.

Change-Id: I496e4e329bf1613f816d6a2c537da58fcb60124b
Signed-off-by: Alessandro Sorniotti <ale.linux@sopit.net>
Signed-off-by: Matthias Neugschwandtner <eug@zurich.ibm.com>
  • Loading branch information
ale-linux committed May 5, 2018
1 parent 7106510 commit dcff346
Showing 1 changed file with 39 additions and 0 deletions.
39 changes: 39 additions & 0 deletions core/common/validation/statebased/validator.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/*
Copyright IBM Corp. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/

package statebased

import (
"github.com/hyperledger/fabric/protos/peer"
)

// 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 extracts the read-write set from the transaction and 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 `rwset` on the specified channel at the specified height
PreValidate(ch, cc string, blockNum, txNum uint64, rwset []byte) error
// TODO: remove the channel argument as part of FAB-9908

// 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(ch, cc string, blockNum, txNum uint64, rwset, prp, ep []byte, endorsements []*peer.Endorsement) error
// TODO: remove the channel argument as part of FAB-9908

// 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(ch, cc string, blockNum, txNum uint64, vc peer.TxValidationCode) error
// TODO: remove the channel argument as part of FAB-9908
}

0 comments on commit dcff346

Please sign in to comment.