diff --git a/common/configtx/test/helper.go b/common/configtx/test/helper.go index b2657c80cb2..e8bb245252c 100644 --- a/common/configtx/test/helper.go +++ b/common/configtx/test/helper.go @@ -15,9 +15,9 @@ import ( "github.com/hyperledger/fabric/common/flogging" "github.com/hyperledger/fabric/common/genesis" "github.com/hyperledger/fabric/core/config/configtest" - "github.com/hyperledger/fabric/core/ledger/util" "github.com/hyperledger/fabric/internal/configtxgen/encoder" "github.com/hyperledger/fabric/internal/configtxgen/genesisconfig" + "github.com/hyperledger/fabric/internal/pkg/txflags" "github.com/hyperledger/fabric/protoutil" ) @@ -36,7 +36,7 @@ func MakeGenesisBlock(chainID string) (*cb.Block, error) { return gb, nil } - txsFilter := util.NewTxValidationFlagsSetValue(len(gb.Data.Data), peer.TxValidationCode_VALID) + txsFilter := txflags.NewWithValues(len(gb.Data.Data), peer.TxValidationCode_VALID) gb.Metadata.Metadata[cb.BlockMetadataIndex_TRANSACTIONS_FILTER] = txsFilter return gb, nil diff --git a/common/ledger/blkstorage/fsblkstorage/blockfile_mgr_test.go b/common/ledger/blkstorage/fsblkstorage/blockfile_mgr_test.go index f66989cb50c..48e36fcc4df 100644 --- a/common/ledger/blkstorage/fsblkstorage/blockfile_mgr_test.go +++ b/common/ledger/blkstorage/fsblkstorage/blockfile_mgr_test.go @@ -16,7 +16,7 @@ import ( "github.com/hyperledger/fabric-protos-go/common" "github.com/hyperledger/fabric-protos-go/peer" "github.com/hyperledger/fabric/common/ledger/testutil" - ledgerutil "github.com/hyperledger/fabric/core/ledger/util" + "github.com/hyperledger/fabric/internal/pkg/txflags" "github.com/hyperledger/fabric/protoutil" "github.com/stretchr/testify/assert" ) @@ -209,7 +209,7 @@ func TestBlockfileMgrGetTxByIdDuplicateTxid(t *testing.T) { }, []string{"txid-1", "txid-2", "txid-1"}, ) - txValidationFlags := ledgerutil.NewTxValidationFlags(3) + txValidationFlags := txflags.New(3) txValidationFlags.SetFlag(0, peer.TxValidationCode_VALID) txValidationFlags.SetFlag(1, peer.TxValidationCode_INVALID_OTHER_REASON) txValidationFlags.SetFlag(2, peer.TxValidationCode_DUPLICATE_TXID) @@ -223,7 +223,7 @@ func TestBlockfileMgrGetTxByIdDuplicateTxid(t *testing.T) { }, []string{"txid-3", "txid-1"}, ) - txValidationFlags = ledgerutil.NewTxValidationFlags(2) + txValidationFlags = txflags.New(2) txValidationFlags.SetFlag(0, peer.TxValidationCode_VALID) txValidationFlags.SetFlag(1, peer.TxValidationCode_DUPLICATE_TXID) block2.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER] = txValidationFlags diff --git a/common/ledger/blkstorage/fsblkstorage/blockindex.go b/common/ledger/blkstorage/fsblkstorage/blockindex.go index 4e302411aca..8e54c23ad54 100644 --- a/common/ledger/blkstorage/fsblkstorage/blockindex.go +++ b/common/ledger/blkstorage/fsblkstorage/blockindex.go @@ -17,7 +17,7 @@ import ( "github.com/hyperledger/fabric/common/ledger/blkstorage/fsblkstorage/msgs" "github.com/hyperledger/fabric/common/ledger/util" "github.com/hyperledger/fabric/common/ledger/util/leveldbhelper" - ledgerUtil "github.com/hyperledger/fabric/core/ledger/util" + "github.com/hyperledger/fabric/internal/pkg/txflags" "github.com/pkg/errors" ) @@ -90,7 +90,7 @@ func (index *blockIndex) indexBlock(blockIdxInfo *blockIdxInfo) error { txOffsets := blockIdxInfo.txOffsets blkNum := blockIdxInfo.blockNum blkHash := blockIdxInfo.blockHash - txsfltr := ledgerUtil.TxValidationFlags(blockIdxInfo.metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txsfltr := txflags.ValidationFlags(blockIdxInfo.metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) batch := leveldbhelper.NewUpdateBatch() flpBytes, err := flp.marshal() if err != nil { diff --git a/common/ledger/blkstorage/fsblkstorage/blockindex_test.go b/common/ledger/blkstorage/fsblkstorage/blockindex_test.go index 25421207be2..cbd986332e1 100644 --- a/common/ledger/blkstorage/fsblkstorage/blockindex_test.go +++ b/common/ledger/blkstorage/fsblkstorage/blockindex_test.go @@ -16,7 +16,7 @@ import ( "github.com/hyperledger/fabric/common/ledger/testutil" commonledgerutil "github.com/hyperledger/fabric/common/ledger/util" "github.com/hyperledger/fabric/common/metrics/disabled" - "github.com/hyperledger/fabric/core/ledger/util" + "github.com/hyperledger/fabric/internal/pkg/txflags" "github.com/hyperledger/fabric/protoutil" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -199,7 +199,7 @@ func testBlockIndexSelectiveIndexing(t *testing.T, indexItems []blkstorage.Index } for _, block := range blocks { - flags := util.TxValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + flags := txflags.ValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) for idx, d := range block.Data.Data { txid, err = protoutil.GetOrComputeTxIDFromEnvelope(d) diff --git a/common/ledger/blkstorage/fsblkstorage/fs_blockstore_provider_test.go b/common/ledger/blkstorage/fsblkstorage/fs_blockstore_provider_test.go index eb45e24a6b2..de7c5552576 100644 --- a/common/ledger/blkstorage/fsblkstorage/fs_blockstore_provider_test.go +++ b/common/ledger/blkstorage/fsblkstorage/fs_blockstore_provider_test.go @@ -15,7 +15,7 @@ import ( "github.com/hyperledger/fabric-protos-go/peer" "github.com/hyperledger/fabric/common/ledger/blkstorage" "github.com/hyperledger/fabric/common/ledger/testutil" - "github.com/hyperledger/fabric/core/ledger/util" + "github.com/hyperledger/fabric/internal/pkg/txflags" "github.com/hyperledger/fabric/protoutil" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -95,7 +95,7 @@ func checkBlocks(t *testing.T, expectedBlocks []*common.Block, store blkstorage. for blockNum := 0; blockNum < len(expectedBlocks); blockNum++ { block := expectedBlocks[blockNum] - flags := util.TxValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + flags := txflags.ValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) retrievedBlock, _ := store.RetrieveBlockByNumber(uint64(blockNum)) assert.Equal(t, block, retrievedBlock) diff --git a/common/ledger/testutil/test_helper.go b/common/ledger/testutil/test_helper.go index 8ff83496fb9..ea6308ce8d0 100644 --- a/common/ledger/testutil/test_helper.go +++ b/common/ledger/testutil/test_helper.go @@ -16,9 +16,9 @@ import ( "github.com/hyperledger/fabric/bccsp/sw" "github.com/hyperledger/fabric/common/configtx/test" "github.com/hyperledger/fabric/common/crypto" + "github.com/hyperledger/fabric/internal/pkg/txflags" "github.com/hyperledger/fabric/common/ledger/testutil/fakes" - lutils "github.com/hyperledger/fabric/core/ledger/util" "github.com/hyperledger/fabric/msp" mspmgmt "github.com/hyperledger/fabric/msp/mgmt" msptesttools "github.com/hyperledger/fabric/msp/mgmt/testtools" @@ -75,7 +75,7 @@ type signingIdentity interface { func NewBlockGenerator(t *testing.T, ledgerID string, signTxs bool) (*BlockGenerator, *common.Block) { gb, err := test.MakeGenesisBlock(ledgerID) assert.NoError(t, err) - gb.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER] = lutils.NewTxValidationFlagsSetValue(len(gb.Data.Data), pb.TxValidationCode_VALID) + gb.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER] = txflags.NewWithValues(len(gb.Data.Data), pb.TxValidationCode_VALID) return &BlockGenerator{1, protoutil.BlockHeaderHash(gb.GetHeader()), signTxs, t}, gb } @@ -114,7 +114,7 @@ func (bg *BlockGenerator) NextTestBlocks(numBlocks int) []*common.Block { numTx := 10 for i := 0; i < numBlocks; i++ { block := bg.NextTestBlock(numTx, 100) - block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER] = lutils.NewTxValidationFlagsSetValue(numTx, pb.TxValidationCode_VALID) + block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER] = txflags.NewWithValues(numTx, pb.TxValidationCode_VALID) blocks = append(blocks, block) } return blocks @@ -305,7 +305,7 @@ func NewBlock(env []*common.Envelope, blockNum uint64, previousHash []byte) *com block.Header.DataHash = protoutil.BlockDataHash(block.Data) protoutil.InitBlockMetadata(block) - block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER] = lutils.NewTxValidationFlagsSetValue(len(env), pb.TxValidationCode_VALID) + block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER] = txflags.NewWithValues(len(env), pb.TxValidationCode_VALID) return block } diff --git a/core/chaincode/chaincode_support_test.go b/core/chaincode/chaincode_support_test.go index ffd597e3acb..386ff1d71e7 100644 --- a/core/chaincode/chaincode_support_test.go +++ b/core/chaincode/chaincode_support_test.go @@ -51,12 +51,12 @@ import ( "github.com/hyperledger/fabric/core/ledger/ledgermgmt" "github.com/hyperledger/fabric/core/ledger/ledgermgmt/ledgermgmttest" ledgermock "github.com/hyperledger/fabric/core/ledger/mock" - cut "github.com/hyperledger/fabric/core/ledger/util" "github.com/hyperledger/fabric/core/peer" "github.com/hyperledger/fabric/core/policy" policymocks "github.com/hyperledger/fabric/core/policy/mocks" "github.com/hyperledger/fabric/core/scc" "github.com/hyperledger/fabric/core/scc/lscc" + "github.com/hyperledger/fabric/internal/pkg/txflags" "github.com/hyperledger/fabric/msp" mspmgmt "github.com/hyperledger/fabric/msp/mgmt" msptesttools "github.com/hyperledger/fabric/msp/mgmt/testtools" @@ -1397,7 +1397,7 @@ func endTxSimulation(peerInstance *peer.Peer, channelID string, ccid *pb.Chainco } block := protoutil.NewBlock(blockNumber, bcInfo.CurrentBlockHash) block.Data.Data = [][]byte{envBytes} - txsFilter := cut.NewTxValidationFlagsSetValue(len(block.Data.Data), pb.TxValidationCode_VALID) + txsFilter := txflags.NewWithValues(len(block.Data.Data), pb.TxValidationCode_VALID) block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER] = txsFilter //commit the block diff --git a/core/committer/txvalidator/v14/txvalidator_test.go b/core/committer/txvalidator/v14/txvalidator_test.go index 9f3bfbcb3a5..0ab9d67ee98 100644 --- a/core/committer/txvalidator/v14/txvalidator_test.go +++ b/core/committer/txvalidator/v14/txvalidator_test.go @@ -24,10 +24,9 @@ import ( ledger2 "github.com/hyperledger/fabric/core/ledger" "github.com/hyperledger/fabric/core/ledger/ledgermgmt" "github.com/hyperledger/fabric/core/ledger/ledgermgmt/ledgermgmttest" - "github.com/hyperledger/fabric/core/ledger/util" - ledgerUtil "github.com/hyperledger/fabric/core/ledger/util" mocktxvalidator "github.com/hyperledger/fabric/core/mocks/txvalidator" "github.com/hyperledger/fabric/core/mocks/validator" + "github.com/hyperledger/fabric/internal/pkg/txflags" "github.com/hyperledger/fabric/msp" mspmgmt "github.com/hyperledger/fabric/msp/mgmt" msptesttools "github.com/hyperledger/fabric/msp/mgmt/testtools" @@ -76,7 +75,7 @@ func testValidationWithNTXes(t *testing.T, ledger ledger2.PeerLedger, gbHash []b tValidator.Validate(block) - txsfltr := util.TxValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txsfltr := txflags.ValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) for i := 0; i < nBlocks; i++ { assert.True(t, txsfltr.IsSetTo(i, peer.TxValidationCode_VALID)) @@ -85,7 +84,7 @@ func testValidationWithNTXes(t *testing.T, ledger ledger2.PeerLedger, gbHash []b func TestDetectTXIdDuplicates(t *testing.T) { txids := []string{"", "1", "2", "3", "", "2", ""} - txsfltr := ledgerUtil.NewTxValidationFlags(len(txids)) + txsfltr := txflags.New(len(txids)) markTXIdDuplicates(txids, txsfltr) assert.True(t, txsfltr.IsSetTo(0, peer.TxValidationCode_NOT_VALIDATED)) assert.True(t, txsfltr.IsSetTo(1, peer.TxValidationCode_NOT_VALIDATED)) @@ -96,7 +95,7 @@ func TestDetectTXIdDuplicates(t *testing.T) { assert.True(t, txsfltr.IsSetTo(6, peer.TxValidationCode_NOT_VALIDATED)) txids = []string{"", "1", "2", "3", "", "21", ""} - txsfltr = ledgerUtil.NewTxValidationFlags(len(txids)) + txsfltr = txflags.New(len(txids)) markTXIdDuplicates(txids, txsfltr) assert.True(t, txsfltr.IsSetTo(0, peer.TxValidationCode_NOT_VALIDATED)) assert.True(t, txsfltr.IsSetTo(1, peer.TxValidationCode_NOT_VALIDATED)) @@ -156,7 +155,7 @@ func TestBlockValidationDuplicateTXId(t *testing.T) { acv.On("ForbidDuplicateTXIdInBlock").Return(false).Once() tValidator.Validate(block) - txsfltr := util.TxValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txsfltr := txflags.ValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) assert.True(t, txsfltr.IsSetTo(0, peer.TxValidationCode_VALID)) assert.True(t, txsfltr.IsSetTo(1, peer.TxValidationCode_VALID)) @@ -164,7 +163,7 @@ func TestBlockValidationDuplicateTXId(t *testing.T) { acv.On("ForbidDuplicateTXIdInBlock").Return(true) tValidator.Validate(block) - txsfltr = util.TxValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txsfltr = txflags.ValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) assert.True(t, txsfltr.IsSetTo(0, peer.TxValidationCode_VALID)) assert.True(t, txsfltr.IsSetTo(1, peer.TxValidationCode_DUPLICATE_TXID)) @@ -286,7 +285,7 @@ func TestTxValidationFailure_InvalidTxid(t *testing.T) { // Initialize metadata protoutil.InitBlockMetadata(block) - txsFilter := util.NewTxValidationFlagsSetValue(len(block.Data.Data), peer.TxValidationCode_VALID) + txsFilter := txflags.NewWithValues(len(block.Data.Data), peer.TxValidationCode_VALID) block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER] = txsFilter // Commit block to the ledger @@ -296,7 +295,7 @@ func TestTxValidationFailure_InvalidTxid(t *testing.T) { // because it's already committed tValidator.Validate(block) - txsfltr := util.TxValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txsfltr := txflags.ValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) assert.True(t, txsfltr.IsInvalid(0)) // We expect the tx to be invalid because of a bad txid @@ -393,7 +392,7 @@ func TestInvalidTXsForUpgradeCC(t *testing.T) { 7: {ChannelID: "chain1", ChaincodeName: "cc0", ChaincodeVersion: "v3"}, } - txsfltr := ledgerUtil.NewTxValidationFlags(8) + txsfltr := txflags.New(8) txsfltr.SetFlag(0, peer.TxValidationCode_VALID) txsfltr.SetFlag(1, peer.TxValidationCode_VALID) txsfltr.SetFlag(2, peer.TxValidationCode_VALID) @@ -403,7 +402,7 @@ func TestInvalidTXsForUpgradeCC(t *testing.T) { txsfltr.SetFlag(6, peer.TxValidationCode_VALID) txsfltr.SetFlag(7, peer.TxValidationCode_VALID) - expectTxsFltr := ledgerUtil.NewTxValidationFlags(8) + expectTxsFltr := txflags.New(8) expectTxsFltr.SetFlag(0, peer.TxValidationCode_VALID) expectTxsFltr.SetFlag(1, peer.TxValidationCode_CHAINCODE_VERSION_CONFLICT) expectTxsFltr.SetFlag(2, peer.TxValidationCode_CHAINCODE_VERSION_CONFLICT) diff --git a/core/committer/txvalidator/v14/validator.go b/core/committer/txvalidator/v14/validator.go index 38bc583cbd2..a79573311aa 100644 --- a/core/committer/txvalidator/v14/validator.go +++ b/core/committer/txvalidator/v14/validator.go @@ -24,7 +24,7 @@ import ( "github.com/hyperledger/fabric/core/common/sysccprovider" "github.com/hyperledger/fabric/core/common/validation" "github.com/hyperledger/fabric/core/ledger" - ledgerUtil "github.com/hyperledger/fabric/core/ledger/util" + "github.com/hyperledger/fabric/internal/pkg/txflags" "github.com/hyperledger/fabric/msp" "github.com/hyperledger/fabric/protoutil" "github.com/pkg/errors" @@ -140,7 +140,7 @@ func (v *TxValidator) Validate(block *common.Block) error { logger.Debugf("[%s] START Block Validation for block [%d]", v.ChannelID, block.Header.Number) // Initialize trans as not_validated here, then set invalidation reason code upon invalidation below - txsfltr := ledgerUtil.NewTxValidationFlags(len(block.Data.Data)) + txsfltr := txflags.New(len(block.Data.Data)) // txsChaincodeNames records all the invoked chaincodes by tx in a block txsChaincodeNames := make(map[int]*sysccprovider.ChaincodeInstance) // upgradedChaincodes records all the chaincodes that are upgraded in a block @@ -238,7 +238,7 @@ func (v *TxValidator) Validate(block *common.Block) error { // allValidated returns error if some of the validation flags have not been set // during validation -func (v *TxValidator) allValidated(txsfltr ledgerUtil.TxValidationFlags, block *common.Block) error { +func (v *TxValidator) allValidated(txsfltr txflags.ValidationFlags, block *common.Block) error { for id, f := range txsfltr { if peer.TxValidationCode(f) == peer.TxValidationCode_NOT_VALIDATED { return errors.Errorf("transaction %d in block %d has skipped validation", id, block.Header.Number) @@ -248,7 +248,7 @@ func (v *TxValidator) allValidated(txsfltr ledgerUtil.TxValidationFlags, block * return nil } -func markTXIdDuplicates(txids []string, txsfltr ledgerUtil.TxValidationFlags) { +func markTXIdDuplicates(txids []string, txsfltr txflags.ValidationFlags) { txidMap := make(map[string]struct{}) for id, txid := range txids { @@ -484,7 +484,7 @@ func (v *TxValidator) generateCCKey(ccName, chainID string) string { } // invalidTXsForUpgradeCC invalid all txs that should be invalided because of chaincode upgrade txs -func (v *TxValidator) invalidTXsForUpgradeCC(txsChaincodeNames map[int]*sysccprovider.ChaincodeInstance, txsUpgradedChaincodes map[int]*sysccprovider.ChaincodeInstance, txsfltr ledgerUtil.TxValidationFlags) { +func (v *TxValidator) invalidTXsForUpgradeCC(txsChaincodeNames map[int]*sysccprovider.ChaincodeInstance, txsUpgradedChaincodes map[int]*sysccprovider.ChaincodeInstance, txsfltr txflags.ValidationFlags) { if len(txsUpgradedChaincodes) == 0 { return } diff --git a/core/committer/txvalidator/v14/validator_test.go b/core/committer/txvalidator/v14/validator_test.go index 8fa87ba947c..d2cc264f405 100644 --- a/core/committer/txvalidator/v14/validator_test.go +++ b/core/committer/txvalidator/v14/validator_test.go @@ -42,9 +42,9 @@ import ( "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/rwsetutil" "github.com/hyperledger/fabric/core/ledger/ledgermgmt" "github.com/hyperledger/fabric/core/ledger/ledgermgmt/ledgermgmttest" - lutils "github.com/hyperledger/fabric/core/ledger/util" mocktxvalidator "github.com/hyperledger/fabric/core/mocks/txvalidator" mocks2 "github.com/hyperledger/fabric/discovery/support/mocks" + "github.com/hyperledger/fabric/internal/pkg/txflags" "github.com/hyperledger/fabric/msp" "github.com/hyperledger/fabric/msp/mgmt" msptesttools "github.com/hyperledger/fabric/msp/mgmt/testtools" @@ -273,13 +273,13 @@ func putCCInfo(theLedger ledger.PeerLedger, ccname string, policy []byte, t *tes } func assertInvalid(block *common.Block, t *testing.T, code peer.TxValidationCode) { - txsFilter := lutils.TxValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txsFilter := txflags.ValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) assert.True(t, txsFilter.IsInvalid(0)) assert.True(t, txsFilter.IsSetTo(0, code)) } func assertValid(block *common.Block, t *testing.T) { - txsFilter := lutils.TxValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txsFilter := txflags.ValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) assert.False(t, txsFilter.IsInvalid(0)) } @@ -729,7 +729,7 @@ func TestParallelValidation(t *testing.T) { assert.NoError(t, err) // Block metadata array position to store serialized bit array filter of invalid transactions - txsFilter := lutils.TxValidationFlags(b.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txsFilter := txflags.ValidationFlags(b.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) // tx validity for txNum := 0; txNum < txCnt; txNum += 1 { switch uint(txNum / 10) { @@ -1773,7 +1773,7 @@ func TestDuplicateTxId(t *testing.T) { assertion.NoError(err) // We expect the tx to be invalid because of a duplicate txid - txsfltr := lutils.TxValidationFlags(b.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txsfltr := txflags.ValidationFlags(b.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) assertion.True(txsfltr.IsInvalid(0)) assertion.True(txsfltr.Flag(0) == peer.TxValidationCode_DUPLICATE_TXID) } diff --git a/core/committer/txvalidator/v20/txvalidator_test.go b/core/committer/txvalidator/v20/txvalidator_test.go index 17f01688e91..d6de61ecb7f 100644 --- a/core/committer/txvalidator/v20/txvalidator_test.go +++ b/core/committer/txvalidator/v20/txvalidator_test.go @@ -19,9 +19,8 @@ import ( "github.com/hyperledger/fabric/core/committer/txvalidator/v20/mocks" ledger2 "github.com/hyperledger/fabric/core/ledger" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/rwsetutil" - "github.com/hyperledger/fabric/core/ledger/util" - ledgerUtil "github.com/hyperledger/fabric/core/ledger/util" mocktxvalidator "github.com/hyperledger/fabric/core/mocks/txvalidator" + "github.com/hyperledger/fabric/internal/pkg/txflags" mspmgmt "github.com/hyperledger/fabric/msp/mgmt" "github.com/hyperledger/fabric/protoutil" "github.com/stretchr/testify/assert" @@ -77,7 +76,7 @@ func testValidationWithNTXes(t *testing.T, nBlocks int) { tValidator.Validate(block) - txsfltr := util.TxValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txsfltr := txflags.ValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) for i := 0; i < nBlocks; i++ { assert.True(t, txsfltr.IsSetTo(i, peer.TxValidationCode_VALID)) @@ -86,7 +85,7 @@ func testValidationWithNTXes(t *testing.T, nBlocks int) { func TestDetectTXIdDuplicates(t *testing.T) { txids := []string{"", "1", "2", "3", "", "2", ""} - txsfltr := ledgerUtil.NewTxValidationFlags(len(txids)) + txsfltr := txflags.New(len(txids)) markTXIdDuplicates(txids, txsfltr) assert.True(t, txsfltr.IsSetTo(0, peer.TxValidationCode_NOT_VALIDATED)) assert.True(t, txsfltr.IsSetTo(1, peer.TxValidationCode_NOT_VALIDATED)) @@ -97,7 +96,7 @@ func TestDetectTXIdDuplicates(t *testing.T) { assert.True(t, txsfltr.IsSetTo(6, peer.TxValidationCode_NOT_VALIDATED)) txids = []string{"", "1", "2", "3", "", "21", ""} - txsfltr = ledgerUtil.NewTxValidationFlags(len(txids)) + txsfltr = txflags.New(len(txids)) markTXIdDuplicates(txids, txsfltr) assert.True(t, txsfltr.IsSetTo(0, peer.TxValidationCode_NOT_VALIDATED)) assert.True(t, txsfltr.IsSetTo(1, peer.TxValidationCode_NOT_VALIDATED)) @@ -146,7 +145,7 @@ func TestBlockValidationDuplicateTXId(t *testing.T) { tValidator.Validate(block) - txsfltr := util.TxValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txsfltr := txflags.ValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) assert.True(t, txsfltr.IsSetTo(0, peer.TxValidationCode_VALID)) assert.True(t, txsfltr.IsSetTo(1, peer.TxValidationCode_DUPLICATE_TXID)) @@ -239,14 +238,14 @@ func TestTxValidationFailure_InvalidTxid(t *testing.T) { // Initialize metadata protoutil.InitBlockMetadata(block) - txsFilter := util.NewTxValidationFlagsSetValue(len(block.Data.Data), peer.TxValidationCode_VALID) + txsFilter := txflags.NewWithValues(len(block.Data.Data), peer.TxValidationCode_VALID) block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER] = txsFilter // Validation should invalidate transaction, // because it's already committed tValidator.Validate(block) - txsfltr := util.TxValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txsfltr := txflags.ValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) assert.True(t, txsfltr.IsInvalid(0)) // We expect the tx to be invalid because of a bad txid diff --git a/core/committer/txvalidator/v20/validator.go b/core/committer/txvalidator/v20/validator.go index d704c7b9033..0d8d04e08ac 100644 --- a/core/committer/txvalidator/v20/validator.go +++ b/core/committer/txvalidator/v20/validator.go @@ -25,7 +25,7 @@ import ( "github.com/hyperledger/fabric/core/committer/txvalidator/v20/plugindispatcher" "github.com/hyperledger/fabric/core/common/validation" "github.com/hyperledger/fabric/core/ledger" - ledgerUtil "github.com/hyperledger/fabric/core/ledger/util" + "github.com/hyperledger/fabric/internal/pkg/txflags" "github.com/hyperledger/fabric/msp" "github.com/hyperledger/fabric/protoutil" "github.com/pkg/errors" @@ -186,7 +186,7 @@ func (v *TxValidator) Validate(block *common.Block) error { logger.Debugf("[%s] START Block Validation for block [%d]", v.ChannelID, block.Header.Number) // Initialize trans as valid here, then set invalidation reason code upon invalidation below - txsfltr := ledgerUtil.NewTxValidationFlags(len(block.Data.Data)) + txsfltr := txflags.New(len(block.Data.Data)) // array of txids txidArray := make([]string, len(block.Data.Data)) @@ -267,7 +267,7 @@ func (v *TxValidator) Validate(block *common.Block) error { // allValidated returns error if some of the validation flags have not been set // during validation -func (v *TxValidator) allValidated(txsfltr ledgerUtil.TxValidationFlags, block *common.Block) error { +func (v *TxValidator) allValidated(txsfltr txflags.ValidationFlags, block *common.Block) error { for id, f := range txsfltr { if peer.TxValidationCode(f) == peer.TxValidationCode_NOT_VALIDATED { return errors.Errorf("transaction %d in block %d has skipped validation", id, block.Header.Number) @@ -277,7 +277,7 @@ func (v *TxValidator) allValidated(txsfltr ledgerUtil.TxValidationFlags, block * return nil } -func markTXIdDuplicates(txids []string, txsfltr ledgerUtil.TxValidationFlags) { +func markTXIdDuplicates(txids []string, txsfltr txflags.ValidationFlags) { txidMap := make(map[string]struct{}) for id, txid := range txids { diff --git a/core/committer/txvalidator/v20/validator_test.go b/core/committer/txvalidator/v20/validator_test.go index 8cefbbc3a50..de4fa4cd148 100644 --- a/core/committer/txvalidator/v20/validator_test.go +++ b/core/committer/txvalidator/v20/validator_test.go @@ -35,10 +35,10 @@ import ( "github.com/hyperledger/fabric/core/handlers/validation/builtin" "github.com/hyperledger/fabric/core/ledger" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/rwsetutil" - ledgerutils "github.com/hyperledger/fabric/core/ledger/util" mocktxvalidator "github.com/hyperledger/fabric/core/mocks/txvalidator" "github.com/hyperledger/fabric/core/scc/lscc" supportmocks "github.com/hyperledger/fabric/discovery/support/mocks" + "github.com/hyperledger/fabric/internal/pkg/txflags" "github.com/hyperledger/fabric/msp" "github.com/hyperledger/fabric/msp/mgmt" msptesttools "github.com/hyperledger/fabric/msp/mgmt/testtools" @@ -138,13 +138,13 @@ func getEnvWithSigner(ccID string, event []byte, res []byte, sig msp.SigningIden } func assertInvalid(block *common.Block, t *testing.T, code peer.TxValidationCode) { - txsFilter := ledgerutils.TxValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txsFilter := txflags.ValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) assert.True(t, txsFilter.IsInvalid(0)) assert.True(t, txsFilter.IsSetTo(0, code)) } func assertValid(block *common.Block, t *testing.T) { - txsFilter := ledgerutils.TxValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txsFilter := txflags.ValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) assert.False(t, txsFilter.IsInvalid(0)) } @@ -565,7 +565,7 @@ func TestParallelValidation(t *testing.T) { assert.NoError(t, err) // Block metadata array position to store serialized bit array filter of invalid transactions - txsFilter := ledgerutils.TxValidationFlags(b.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txsFilter := txflags.ValidationFlags(b.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) // tx validity for txNum := 0; txNum < txCnt; txNum += 1 { switch uint(txNum / 10) { @@ -1052,7 +1052,7 @@ func TestDuplicateTxId(t *testing.T) { assertion.NoError(err) // We expect the tx to be invalid because of a duplicate txid - txsfltr := ledgerutils.TxValidationFlags(b.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txsfltr := txflags.ValidationFlags(b.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) assertion.True(txsfltr.IsInvalid(0)) assertion.True(txsfltr.Flag(0) == peer.TxValidationCode_DUPLICATE_TXID) } diff --git a/core/ledger/kvledger/benchmark/chainmgmt/block_gen.go b/core/ledger/kvledger/benchmark/chainmgmt/block_gen.go index ec8310e8783..653afe24fa6 100644 --- a/core/ledger/kvledger/benchmark/chainmgmt/block_gen.go +++ b/core/ledger/kvledger/benchmark/chainmgmt/block_gen.go @@ -12,7 +12,7 @@ import ( "github.com/golang/protobuf/proto" "github.com/hyperledger/fabric-protos-go/common" "github.com/hyperledger/fabric-protos-go/peer" - "github.com/hyperledger/fabric/core/ledger/util" + "github.com/hyperledger/fabric/internal/pkg/txflags" "github.com/hyperledger/fabric/protoutil" ) @@ -85,7 +85,7 @@ func (bg *blkGenerator) nextBlock() *common.Block { block.Header.DataHash = protoutil.BlockDataHash(block.Data) block.Header.Number = bg.blockNum block.Header.PreviousHash = bg.previousBlockHash - txsfltr := util.NewTxValidationFlagsSetValue(len(block.Data.Data), peer.TxValidationCode_VALID) + txsfltr := txflags.NewWithValues(len(block.Data.Data), peer.TxValidationCode_VALID) block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER] = txsfltr bg.blockNum++ diff --git a/core/ledger/kvledger/history/db.go b/core/ledger/kvledger/history/db.go index ac438843826..15655ee3d50 100644 --- a/core/ledger/kvledger/history/db.go +++ b/core/ledger/kvledger/history/db.go @@ -15,7 +15,7 @@ import ( "github.com/hyperledger/fabric/core/ledger" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/rwsetutil" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/version" - "github.com/hyperledger/fabric/core/ledger/util" + "github.com/hyperledger/fabric/internal/pkg/txflags" protoutil "github.com/hyperledger/fabric/protoutil" ) @@ -76,7 +76,7 @@ func (d *DB) Commit(block *common.Block) error { d.name, blockNo, len(block.Data.Data)) // Get the invalidation byte array for the block - txsFilter := util.TxValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txsFilter := txflags.ValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) // write each tran's write set to history db for _, envBytes := range block.Data.Data { diff --git a/core/ledger/kvledger/history/db_test.go b/core/ledger/kvledger/history/db_test.go index 5735c12e3a4..5103644c9c5 100644 --- a/core/ledger/kvledger/history/db_test.go +++ b/core/ledger/kvledger/history/db_test.go @@ -21,7 +21,7 @@ import ( "github.com/hyperledger/fabric/common/ledger/testutil" util2 "github.com/hyperledger/fabric/common/util" "github.com/hyperledger/fabric/core/ledger" - "github.com/hyperledger/fabric/core/ledger/util" + "github.com/hyperledger/fabric/internal/pkg/txflags" "github.com/stretchr/testify/assert" ) @@ -221,7 +221,7 @@ func TestHistoryForInvalidTran(t *testing.T) { block1 := bg.NextBlock([][]byte{pubSimResBytes}) //for this invalid tran test, set the transaction to invalid - txsFilter := util.TxValidationFlags(block1.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txsFilter := txflags.ValidationFlags(block1.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) txsFilter.SetFlag(0, peer.TxValidationCode_INVALID_OTHER_REASON) block1.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER] = txsFilter diff --git a/core/ledger/kvledger/kv_ledger.go b/core/ledger/kvledger/kv_ledger.go index 9d676072dfd..9e6b3b3e9b0 100644 --- a/core/ledger/kvledger/kv_ledger.go +++ b/core/ledger/kvledger/kv_ledger.go @@ -27,7 +27,7 @@ import ( "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr" "github.com/hyperledger/fabric/core/ledger/ledgerstorage" "github.com/hyperledger/fabric/core/ledger/pvtdatapolicy" - lutil "github.com/hyperledger/fabric/core/ledger/util" + "github.com/hyperledger/fabric/internal/pkg/txflags" "github.com/hyperledger/fabric/protoutil" "github.com/pkg/errors" ) @@ -690,7 +690,7 @@ func filterPvtDataOfInvalidTx(hashVerifiedPvtData map[uint64][]*ledger.TxPvtData if err != nil { return nil, err } - blockValidationFlags := lutil.TxValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + blockValidationFlags := txflags.ValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) var blksPvtData []*ledger.TxPvtData for _, pvtData := range txsPvtData { diff --git a/core/ledger/kvledger/tests/util.go b/core/ledger/kvledger/tests/util.go index 1dfc6656d3a..bb90fbda1a0 100644 --- a/core/ledger/kvledger/tests/util.go +++ b/core/ledger/kvledger/tests/util.go @@ -20,8 +20,8 @@ import ( "github.com/hyperledger/fabric/common/metrics/disabled" "github.com/hyperledger/fabric/common/policydsl" "github.com/hyperledger/fabric/core/ledger/kvledger/tests/fakes" - lutils "github.com/hyperledger/fabric/core/ledger/util" "github.com/hyperledger/fabric/core/ledger/util/couchdb" + "github.com/hyperledger/fabric/internal/pkg/txflags" "github.com/hyperledger/fabric/protoutil" "github.com/stretchr/testify/require" ) @@ -228,7 +228,7 @@ func constructTestGenesisBlock(channelid string) (*common.Block, error) { func setBlockFlagsToValid(block *common.Block) { protoutil.InitBlockMetadata(block) block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER] = - lutils.NewTxValidationFlagsSetValue(len(block.Data.Data), protopeer.TxValidationCode_VALID) + txflags.NewWithValues(len(block.Data.Data), protopeer.TxValidationCode_VALID) } func dropCouchDBs(t *testing.T, couchdbConfig *couchdb.Config) { diff --git a/core/ledger/kvledger/tests/verifier.go b/core/ledger/kvledger/tests/verifier.go index bf587336e80..4739d1d3979 100644 --- a/core/ledger/kvledger/tests/verifier.go +++ b/core/ledger/kvledger/tests/verifier.go @@ -16,7 +16,7 @@ import ( "github.com/hyperledger/fabric-protos-go/ledger/rwset/kvrwset" protopeer "github.com/hyperledger/fabric-protos-go/peer" "github.com/hyperledger/fabric/core/ledger" - lgrutil "github.com/hyperledger/fabric/core/ledger/util" + "github.com/hyperledger/fabric/internal/pkg/txflags" "github.com/stretchr/testify/assert" ) @@ -217,7 +217,7 @@ func (r *retrievedBlockAndPvtdata) sameMetadata(expectedBlock *common.Block) { } func (r *retrievedBlockAndPvtdata) containsValidationCode(txSeq int, validationCode protopeer.TxValidationCode) { - var txFilter lgrutil.TxValidationFlags + var txFilter txflags.ValidationFlags txFilter = r.BlockAndPvtData.Block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER] r.assert.Equal(validationCode, txFilter.Flag(txSeq)) } diff --git a/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/pkg_test.go b/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/pkg_test.go index ba6c492280a..6f5621be94b 100644 --- a/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/pkg_test.go +++ b/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/pkg_test.go @@ -28,6 +28,7 @@ import ( "github.com/hyperledger/fabric/core/ledger/pvtdatapolicy" btltestutil "github.com/hyperledger/fabric/core/ledger/pvtdatapolicy/testutil" "github.com/hyperledger/fabric/core/ledger/util" + "github.com/hyperledger/fabric/internal/pkg/txflags" "github.com/stretchr/testify/assert" ) @@ -152,7 +153,7 @@ func (h *txMgrTestHelper) validateAndCommitRWSet(txRWSet *rwset.TxReadWriteSet) block := h.bg.NextBlock([][]byte{rwSetBytes}) _, _, err := h.txMgr.ValidateAndPrepare(&ledger.BlockAndPvtData{Block: block, PvtData: nil}, true) assert.NoError(h.t, err) - txsFltr := util.TxValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txsFltr := txflags.ValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) invalidTxNum := 0 for i := 0; i < len(block.Data.Data); i++ { if txsFltr.IsInvalid(i) { @@ -169,7 +170,7 @@ func (h *txMgrTestHelper) checkRWsetInvalid(txRWSet *rwset.TxReadWriteSet) { block := h.bg.NextBlock([][]byte{rwSetBytes}) _, _, err := h.txMgr.ValidateAndPrepare(&ledger.BlockAndPvtData{Block: block, PvtData: nil}, true) assert.NoError(h.t, err) - txsFltr := util.TxValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txsFltr := txflags.ValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) invalidTxNum := 0 for i := 0; i < len(block.Data.Data); i++ { if txsFltr.IsInvalid(i) { diff --git a/core/ledger/kvledger/txmgmt/validator/valimpl/default_impl.go b/core/ledger/kvledger/txmgmt/validator/valimpl/default_impl.go index 3db80eac9f2..02f05a7c01c 100644 --- a/core/ledger/kvledger/txmgmt/validator/valimpl/default_impl.go +++ b/core/ledger/kvledger/txmgmt/validator/valimpl/default_impl.go @@ -15,7 +15,7 @@ import ( "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/validator" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/validator/internal" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/validator/statebasedval" - "github.com/hyperledger/fabric/core/ledger/util" + "github.com/hyperledger/fabric/internal/pkg/txflags" ) var logger = flogging.MustGetLogger("valimpl") @@ -89,7 +89,7 @@ func (impl *DefaultImpl) ValidateAndPrepareBatch(blockAndPvtdata *ledger.BlockAn postprocessProtoBlock(block, internalBlock) logger.Debug("ValidateAndPrepareBatch() complete") - txsFilter := util.TxValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txsFilter := txflags.ValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) for i := range txsFilter { txsStatInfo[i].ValidationCode = txsFilter.Flag(i) } diff --git a/core/ledger/kvledger/txmgmt/validator/valimpl/helper.go b/core/ledger/kvledger/txmgmt/validator/valimpl/helper.go index 5b0c16d555e..fcaf3bf25e5 100644 --- a/core/ledger/kvledger/txmgmt/validator/valimpl/helper.go +++ b/core/ledger/kvledger/txmgmt/validator/valimpl/helper.go @@ -22,6 +22,7 @@ import ( "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/validator/internal" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/version" "github.com/hyperledger/fabric/core/ledger/util" + "github.com/hyperledger/fabric/internal/pkg/txflags" "github.com/hyperledger/fabric/protoutil" ) @@ -108,7 +109,7 @@ func preprocessProtoBlock(txMgr txmgr.TxMgr, b := &internal.Block{Num: block.Header.Number} txsStatInfo := []*txmgr.TxStatInfo{} // Committer validator has already set validation flags based on well formed tran checks - txsFilter := util.TxValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txsFilter := txflags.ValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) for txIndex, envBytes := range block.Data.Data { var env *common.Envelope var chdr *common.ChannelHeader @@ -235,7 +236,7 @@ func validateWriteset(txRWSet *rwsetutil.TxRwSet, validateKVFunc func(key string // postprocessProtoBlock updates the proto block's validation flags (in metadata) by the results of validation process func postprocessProtoBlock(block *common.Block, validatedBlock *internal.Block) { - txsFilter := util.TxValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txsFilter := txflags.ValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) for _, tx := range validatedBlock.Txs { txsFilter.SetFlag(tx.IndexInBlock, tx.ValidationCode) } diff --git a/core/ledger/kvledger/txmgmt/validator/valimpl/helper_test.go b/core/ledger/kvledger/txmgmt/validator/valimpl/helper_test.go index a4e6a240c2f..48138d8e322 100644 --- a/core/ledger/kvledger/txmgmt/validator/valimpl/helper_test.go +++ b/core/ledger/kvledger/txmgmt/validator/valimpl/helper_test.go @@ -32,6 +32,7 @@ import ( "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/version" mocklgr "github.com/hyperledger/fabric/core/ledger/mock" lutils "github.com/hyperledger/fabric/core/ledger/util" + "github.com/hyperledger/fabric/internal/pkg/txflags" "github.com/hyperledger/fabric/protoutil" "github.com/stretchr/testify/assert" ) @@ -156,7 +157,7 @@ func TestPreprocessProtoBlock(t *testing.T) { gb = testutil.ConstructTestBlock(t, 11, 1, 1) gb.Data = &common.BlockData{Data: [][]byte{{123}}} gb.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER] = - lutils.NewTxValidationFlagsSetValue(len(gb.Data.Data), peer.TxValidationCode_VALID) + txflags.NewWithValues(len(gb.Data.Data), peer.TxValidationCode_VALID) _, _, err = preprocessProtoBlock(nil, allwaysValidKVfunc, gb, false, nil) assert.Error(t, err) t.Log(err) @@ -185,7 +186,7 @@ func TestPreprocessProtoBlock(t *testing.T) { }) envBytes, _ = protoutil.GetBytesEnvelope(&common.Envelope{Payload: payloadBytes}) gb.Data = &common.BlockData{Data: [][]byte{envBytes}} - flags := lutils.NewTxValidationFlags(len(gb.Data.Data)) + flags := txflags.New(len(gb.Data.Data)) flags.SetFlag(0, peer.TxValidationCode_BAD_CHANNEL_HEADER) gb.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER] = flags _, _, err = preprocessProtoBlock(nil, allwaysValidKVfunc, gb, false, nil) @@ -196,7 +197,7 @@ func TestPreprocessProtoBlock(t *testing.T) { txid := "testtxid1234" gb = testutil.ConstructBlockWithTxid(t, blockNum, []byte{123}, [][]byte{{123}}, []string{txid}, false) - flags = lutils.NewTxValidationFlags(len(gb.Data.Data)) + flags = txflags.New(len(gb.Data.Data)) flags.SetFlag(0, peer.TxValidationCode_BAD_HEADER_EXTENSION) gb.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER] = flags @@ -239,7 +240,7 @@ func TestPreprocessProtoBlockInvalidWriteset(t *testing.T) { block := testutil.ConstructBlock(t, 1, testutil.ConstructRandomBytes(t, 32), [][]byte{simulation1Bytes, simulation2Bytes}, false) // block with two txs - txfilter := lutils.TxValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txfilter := txflags.ValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) assert.True(t, txfilter.IsValid(0)) assert.True(t, txfilter.IsValid(1)) // both txs are valid initially at the time of block cutting @@ -450,7 +451,7 @@ func TestTxStatsInfo(t *testing.T) { } block := testutil.ConstructBlockFromBlockDetails(t, blockDetails, false) - txsFilter := lutils.NewTxValidationFlags(4) + txsFilter := txflags.New(4) txsFilter.SetFlag(0, peer.TxValidationCode_VALID) txsFilter.SetFlag(1, peer.TxValidationCode_VALID) txsFilter.SetFlag(2, peer.TxValidationCode_BAD_PAYLOAD) diff --git a/core/ledger/ledgerstorage/store_test.go b/core/ledger/ledgerstorage/store_test.go index db79f09a15c..912b9612184 100644 --- a/core/ledger/ledgerstorage/store_test.go +++ b/core/ledger/ledgerstorage/store_test.go @@ -23,7 +23,7 @@ import ( "github.com/hyperledger/fabric/core/ledger/pvtdatapolicy" btltestutil "github.com/hyperledger/fabric/core/ledger/pvtdatapolicy/testutil" "github.com/hyperledger/fabric/core/ledger/pvtdatastorage" - lutil "github.com/hyperledger/fabric/core/ledger/util" + "github.com/hyperledger/fabric/internal/pkg/txflags" "github.com/stretchr/testify/assert" ) @@ -360,7 +360,7 @@ func sampleDataWithPvtdataForSelectiveTx(t *testing.T) []*ledger.BlockAndPvtData // txNum 3, 5, 6 in block 2 has pvtdata but txNum 6 is invalid blockAndpvtdata[2].PvtData = samplePvtData(t, []uint64{3, 5, 6}) - txFilter := lutil.TxValidationFlags(blockAndpvtdata[2].Block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txFilter := txflags.ValidationFlags(blockAndpvtdata[2].Block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) txFilter.SetFlag(6, pb.TxValidationCode_INVALID_WRITESET) blockAndpvtdata[2].Block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER] = txFilter @@ -372,7 +372,7 @@ func sampleDataWithPvtdataForSelectiveTx(t *testing.T) []*ledger.BlockAndPvtData missingData.Add(4, "ns-4", "coll-4", true) missingData.Add(5, "ns-5", "coll-5", true) blockAndpvtdata[5].MissingPvtData = missingData - txFilter = lutil.TxValidationFlags(blockAndpvtdata[5].Block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txFilter = txflags.ValidationFlags(blockAndpvtdata[5].Block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) txFilter.SetFlag(5, pb.TxValidationCode_INVALID_WRITESET) blockAndpvtdata[5].Block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER] = txFilter diff --git a/core/ledger/util/txvalidationflags.go b/core/ledger/util/txvalidationflags.go deleted file mode 100644 index 4354fda4ced..00000000000 --- a/core/ledger/util/txvalidationflags.go +++ /dev/null @@ -1,60 +0,0 @@ -/* -Copyright IBM Corp. All Rights Reserved. - -SPDX-License-Identifier: Apache-2.0 -*/ - -package util - -import ( - "github.com/hyperledger/fabric-protos-go/peer" -) - -// TxValidationFlags is array of transaction validation codes. It is used when committer validates block. -type TxValidationFlags []uint8 - -// NewTxValidationFlags Create new object-array of validation codes with target size. -// Default values: TxValidationCode_NOT_VALIDATED -func NewTxValidationFlags(size int) TxValidationFlags { - return newTxValidationFlagsSetValue(size, peer.TxValidationCode_NOT_VALIDATED) -} - -// NewTxValidationFlagsSetValue Creates new object-array of validation codes with target size -// and the supplied value -func NewTxValidationFlagsSetValue(size int, value peer.TxValidationCode) TxValidationFlags { - return newTxValidationFlagsSetValue(size, value) -} - -func newTxValidationFlagsSetValue(size int, value peer.TxValidationCode) TxValidationFlags { - inst := make(TxValidationFlags, size) - for i := range inst { - inst[i] = uint8(value) - } - - return inst -} - -// SetFlag assigns validation code to specified transaction -func (obj TxValidationFlags) SetFlag(txIndex int, flag peer.TxValidationCode) { - obj[txIndex] = uint8(flag) -} - -// Flag returns validation code at specified transaction -func (obj TxValidationFlags) Flag(txIndex int) peer.TxValidationCode { - return peer.TxValidationCode(obj[txIndex]) -} - -// IsValid checks if specified transaction is valid -func (obj TxValidationFlags) IsValid(txIndex int) bool { - return obj.IsSetTo(txIndex, peer.TxValidationCode_VALID) -} - -// IsInvalid checks if specified transaction is invalid -func (obj TxValidationFlags) IsInvalid(txIndex int) bool { - return !obj.IsValid(txIndex) -} - -// IsSetTo returns true if the specified transaction equals flag; false otherwise. -func (obj TxValidationFlags) IsSetTo(txIndex int, flag peer.TxValidationCode) bool { - return obj.Flag(txIndex) == flag -} diff --git a/core/peer/deliverevents.go b/core/peer/deliverevents.go index 5fd6f8d1b98..d154ebe9ccf 100644 --- a/core/peer/deliverevents.go +++ b/core/peer/deliverevents.go @@ -17,7 +17,7 @@ import ( "github.com/hyperledger/fabric/core/aclmgmt/resources" "github.com/hyperledger/fabric/core/common/privdata" "github.com/hyperledger/fabric/core/ledger" - "github.com/hyperledger/fabric/core/ledger/util" + "github.com/hyperledger/fabric/internal/pkg/txflags" "github.com/hyperledger/fabric/msp" "github.com/hyperledger/fabric/msp/mgmt" "github.com/hyperledger/fabric/protoutil" @@ -295,7 +295,7 @@ func (block *blockEvent) toFilteredBlock() (*peer.FilteredBlock, error) { Number: block.Header.Number, } - txsFltr := util.TxValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txsFltr := txflags.ValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) for txIndex, ebytes := range block.Data.Data { var env *common.Envelope var err error diff --git a/core/peer/pkg_test.go b/core/peer/pkg_test.go index 688e92296e8..9c6856742ec 100644 --- a/core/peer/pkg_test.go +++ b/core/peer/pkg_test.go @@ -23,10 +23,10 @@ import ( pb "github.com/hyperledger/fabric-protos-go/peer" configtxtest "github.com/hyperledger/fabric/common/configtx/test" "github.com/hyperledger/fabric/core/ledger/mock" - "github.com/hyperledger/fabric/core/ledger/util" "github.com/hyperledger/fabric/core/peer" "github.com/hyperledger/fabric/internal/pkg/comm" "github.com/hyperledger/fabric/internal/pkg/comm/testpb" + "github.com/hyperledger/fabric/internal/pkg/txflags" "github.com/hyperledger/fabric/msp" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -118,7 +118,7 @@ func createConfigBlock(chainID string, appMSPConf, ordererMSPConf *mspproto.MSPC return block, err } - txsFilter := util.NewTxValidationFlagsSetValue(len(block.Data.Data), pb.TxValidationCode_VALID) + txsFilter := txflags.NewWithValues(len(block.Data.Data), pb.TxValidationCode_VALID) block.Metadata.Metadata[cb.BlockMetadataIndex_TRANSACTIONS_FILTER] = txsFilter return block, nil diff --git a/core/scc/cscc/configure.go b/core/scc/cscc/configure.go index 59cf638ccb8..4c8697b9e9d 100644 --- a/core/scc/cscc/configure.go +++ b/core/scc/cscc/configure.go @@ -26,9 +26,9 @@ import ( "github.com/hyperledger/fabric/core/aclmgmt/resources" "github.com/hyperledger/fabric/core/committer/txvalidator/v20/plugindispatcher" "github.com/hyperledger/fabric/core/ledger" - "github.com/hyperledger/fabric/core/ledger/util" "github.com/hyperledger/fabric/core/peer" "github.com/hyperledger/fabric/core/policy" + "github.com/hyperledger/fabric/internal/pkg/txflags" "github.com/hyperledger/fabric/protoutil" "github.com/pkg/errors" ) @@ -166,10 +166,10 @@ func (e *PeerConfiger) InvokeNoShim(args [][]byte, sp *pb.SignedProposal) pb.Res // Initialize txsFilter if it does not yet exist. We can do this safely since // it's the genesis block anyway - txsFilter := util.TxValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) + txsFilter := txflags.ValidationFlags(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) if len(txsFilter) == 0 { // add array of validation code hardcoded to valid - txsFilter = util.NewTxValidationFlagsSetValue(len(block.Data.Data), pb.TxValidationCode_VALID) + txsFilter = txflags.NewWithValues(len(block.Data.Data), pb.TxValidationCode_VALID) block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER] = txsFilter } diff --git a/internal/pkg/txflags/validation_flags.go b/internal/pkg/txflags/validation_flags.go new file mode 100644 index 00000000000..3950c8f49a8 --- /dev/null +++ b/internal/pkg/txflags/validation_flags.go @@ -0,0 +1,60 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package txflags + +import ( + "github.com/hyperledger/fabric-protos-go/peer" +) + +// ValidationFlags is array of transaction validation codes. It is used when committer validates block. +type ValidationFlags []uint8 + +// New create new object-array of validation codes with target size. +// Default values: TxValidationCode_NOT_VALIDATED +func New(size int) ValidationFlags { + return newWithValues(size, peer.TxValidationCode_NOT_VALIDATED) +} + +// NewWithValues creates new object-array of validation codes with target size +// and the supplied value +func NewWithValues(size int, value peer.TxValidationCode) ValidationFlags { + return newWithValues(size, value) +} + +func newWithValues(size int, value peer.TxValidationCode) ValidationFlags { + inst := make(ValidationFlags, size) + for i := range inst { + inst[i] = uint8(value) + } + + return inst +} + +// SetFlag assigns validation code to specified transaction +func (obj ValidationFlags) SetFlag(txIndex int, flag peer.TxValidationCode) { + obj[txIndex] = uint8(flag) +} + +// Flag returns validation code at specified transaction +func (obj ValidationFlags) Flag(txIndex int) peer.TxValidationCode { + return peer.TxValidationCode(obj[txIndex]) +} + +// IsValid checks if specified transaction is valid +func (obj ValidationFlags) IsValid(txIndex int) bool { + return obj.IsSetTo(txIndex, peer.TxValidationCode_VALID) +} + +// IsInvalid checks if specified transaction is invalid +func (obj ValidationFlags) IsInvalid(txIndex int) bool { + return !obj.IsValid(txIndex) +} + +// IsSetTo returns true if the specified transaction equals flag; false otherwise. +func (obj ValidationFlags) IsSetTo(txIndex int, flag peer.TxValidationCode) bool { + return obj.Flag(txIndex) == flag +} diff --git a/core/ledger/util/txvalidationflags_test.go b/internal/pkg/txflags/validation_flags_test.go similarity index 86% rename from core/ledger/util/txvalidationflags_test.go rename to internal/pkg/txflags/validation_flags_test.go index 69ded81913e..80e1ae11148 100644 --- a/core/ledger/util/txvalidationflags_test.go +++ b/internal/pkg/txflags/validation_flags_test.go @@ -4,7 +4,7 @@ Copyright IBM Corp. All Rights Reserved. SPDX-License-Identifier: Apache-2.0 */ -package util +package txflags import ( "testing" @@ -14,7 +14,7 @@ import ( ) func TestTransactionValidationFlags(t *testing.T) { - txFlags := NewTxValidationFlagsSetValue(10, peer.TxValidationCode_VALID) + txFlags := NewWithValues(10, peer.TxValidationCode_VALID) assert.Equal(t, 10, len(txFlags)) txFlags.SetFlag(0, peer.TxValidationCode_VALID)