forked from hyperledger/fabric
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[FAB-9834] interfaces for key-level validation
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
Showing
1 changed file
with
39 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} |