summaryrefslogtreecommitdiff
path: root/txnsync/encodedgroupsunmarshalers.go
diff options
context:
space:
mode:
Diffstat (limited to 'txnsync/encodedgroupsunmarshalers.go')
-rw-r--r--txnsync/encodedgroupsunmarshalers.go648
1 files changed, 0 insertions, 648 deletions
diff --git a/txnsync/encodedgroupsunmarshalers.go b/txnsync/encodedgroupsunmarshalers.go
deleted file mode 100644
index 750bb0871..000000000
--- a/txnsync/encodedgroupsunmarshalers.go
+++ /dev/null
@@ -1,648 +0,0 @@
-// Copyright (C) 2019-2021 Algorand, Inc.
-// This file is part of go-algorand
-//
-// go-algorand is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Affero General Public License as
-// published by the Free Software Foundation, either version 3 of the
-// License, or (at your option) any later version.
-//
-// go-algorand is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU Affero General Public License for more details.
-//
-// You should have received a copy of the GNU Affero General Public License
-// along with go-algorand. If not, see <https://www.gnu.org/licenses/>.
-
-package txnsync
-
-import (
- "errors"
- "fmt"
-
- "github.com/algorand/go-algorand/crypto"
- "github.com/algorand/go-algorand/data/basics"
- "github.com/algorand/go-algorand/data/pooldata"
- "github.com/algorand/go-algorand/data/transactions"
-)
-
-var errDataMissing = errors.New("failed to decode: data missing")
-
-// the nextSlice definition - copy the next slice and slide the src window.
-func nextSlice(src *[]byte, dst []byte, size int) error {
- if len(*src) < size {
- return errDataMissing
- }
- copy(dst[:], (*src)[:size])
- // slice the src window so next call would get the next entry.
- *src = (*src)[size:]
- return nil
-}
-
-// getNibble returns the nibble at the given index from the provided
-// byte array. A errDataMissing is returned if index is beyond the size
-// of the array.
-func getNibble(b []byte, index int) (byte, error) {
- if index >= len(b)*2 {
- return 0, errDataMissing
- }
- if index%2 == 0 {
- return b[index/2] / 16, nil
- }
- return b[index/2] % 16, nil
-}
-
-func addGroupHashes(txnGroups []pooldata.SignedTxGroup, txnCount int, b bitmask) (err error) {
- index := 0
- txGroupHashes := make([]crypto.Digest, 16)
- tStart := 0
-
- // addGroupHashesFunc adds hashes to transactions in groups of more than 1 transaction,
- // or to transactions with one transaction and bitmask set for that index.
- // It stops at index nextSetBitIndex, or stops when all in txnGroups are visited.
- addGroupHashesFunc := func(nextSetBitIndex int, count int) error {
- remainingTxnGroups := txnGroups[tStart:]
- for t, txns := range remainingTxnGroups {
- if len(txns.Transactions) == 1 && index != nextSetBitIndex {
- index++
- continue
- }
- var txGroup transactions.TxGroup
- txGroup.TxGroupHashes = txGroupHashes[:len(txns.Transactions)]
- for i, tx := range txns.Transactions {
- txGroup.TxGroupHashes[i] = crypto.HashObj(tx.Txn)
- }
- groupHash := crypto.HashObj(txGroup)
- for i := range txns.Transactions {
- txns.Transactions[i].Txn.Group = groupHash
- index++
- }
- if index > nextSetBitIndex {
- tStart += t + 1
- return nil
- }
- }
- tStart = len(txnGroups)
- return nil
- }
- // addGroupHashesFunc will be called for each set bit. Between set bits, all transactions
- // in groups of more than 1 transactions will have the hashes added.
- err = b.iterate(txnCount, txnCount, addGroupHashesFunc)
-
- if err == nil {
- // One more call to addGroupHashesFunc to cover all the remaining transactions in groups of
- // more than 1 transaction that were not added because no groups with one transaction are left.
- err = addGroupHashesFunc(txnCount+1, -1)
- }
- return
-}
-
-func (stub *txGroupsEncodingStub) reconstructSignedTransactions(signedTxns []transactions.SignedTxn, genesisID string, genesisHash crypto.Digest) error {
- err := stub.BitmaskSig.iterate(int(stub.TotalTransactionsCount), len(stub.Sig)/len(crypto.Signature{}), func(i int, _ int) error {
- return nextSlice(&stub.Sig, signedTxns[i].Sig[:], len(crypto.Signature{}))
- })
- if err != nil {
- return err
- }
-
- if err = stub.reconstructMsigs(signedTxns); err != nil {
- return fmt.Errorf("failed to msigs: %w", err)
- }
- if err = stub.reconstructLsigs(signedTxns); err != nil {
- return fmt.Errorf("failed to lsigs: %w", err)
- }
- err = stub.BitmaskAuthAddr.iterate(int(stub.TotalTransactionsCount), len(stub.AuthAddr)/crypto.DigestSize, func(i int, index int) error {
- return nextSlice(&stub.AuthAddr, signedTxns[i].AuthAddr[:], crypto.DigestSize)
- })
- if err != nil {
- return err
- }
-
- return stub.reconstructTransactions(signedTxns, genesisID, genesisHash)
-}
-
-func (stub *txGroupsEncodingStub) reconstructMsigs(signedTxns []transactions.SignedTxn) (err error) {
- err = stub.BitmaskVersion.iterate(int(stub.TotalTransactionsCount), len(stub.Version), func(i int, index int) error {
- signedTxns[i].Msig.Version = stub.Version[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskThreshold.iterate(int(stub.TotalTransactionsCount), len(stub.Threshold), func(i int, index int) error {
- signedTxns[i].Msig.Threshold = stub.Threshold[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskSubsigs.iterate(int(stub.TotalTransactionsCount), len(stub.Subsigs), func(i int, index int) error {
- signedTxns[i].Msig.Subsigs = stub.Subsigs[index]
- return nil
- })
- if err != nil {
- return err
- }
- return nil
-}
-
-func (stub *txGroupsEncodingStub) reconstructLsigs(signedTxns []transactions.SignedTxn) (err error) {
- err = stub.BitmaskLogic.iterate(int(stub.TotalTransactionsCount), len(stub.Logic), func(i int, index int) error {
- signedTxns[i].Lsig.Logic = stub.Logic[index]
- // fetch sig/msig
- signedTxns[i].Lsig.Sig = signedTxns[i].Sig
- signedTxns[i].Sig = crypto.Signature{}
- signedTxns[i].Lsig.Msig = signedTxns[i].Msig
- signedTxns[i].Msig = crypto.MultisigSig{}
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskLogicArgs.iterate(int(stub.TotalTransactionsCount), len(stub.LogicArgs), func(i int, index int) error {
- signedTxns[i].Lsig.Args = stub.LogicArgs[index]
- return nil
- })
- if err != nil {
- return err
- }
- return nil
-}
-
-func (stub *txGroupsEncodingStub) reconstructTransactions(signedTxns []transactions.SignedTxn, genesisID string, genesisHash crypto.Digest) (err error) {
- err = stub.BitmaskTxType.iterate(int(stub.TotalTransactionsCount), len(stub.TxType)*2, func(i int, index int) error {
- b, err := getNibble(stub.TxType, index)
- if err != nil {
- return err
- }
- signedTxns[i].Txn.Type = ByteToTxType(b)
- return nil
- })
- for i := range signedTxns {
- if signedTxns[i].Txn.Type == "" {
- signedTxns[i].Txn.Type = ByteToTxType(stub.TxTypeOffset)
- }
- }
- if err != nil {
- return err
- }
-
- if err := stub.reconstructTxnHeader(signedTxns, genesisID, genesisHash); err != nil {
- return fmt.Errorf("failed to reconstructTxnHeader: %w", err)
- }
- if err := stub.reconstructKeyregTxnFields(signedTxns); err != nil {
- return fmt.Errorf("failed to reconstructKeyregTxnFields: %w", err)
- }
- if err := stub.reconstructPaymentTxnFields(signedTxns); err != nil {
- return fmt.Errorf("failed to reconstructPaymentTxnFields: %w", err)
- }
- if err := stub.reconstructAssetConfigTxnFields(signedTxns); err != nil {
- return fmt.Errorf("failed to reconstructAssetConfigTxnFields: %w", err)
- }
- if err := stub.reconstructAssetTransferTxnFields(signedTxns); err != nil {
- return fmt.Errorf("failed to reconstructAssetTransferTxnFields: %w", err)
- }
- if err := stub.reconstructAssetFreezeTxnFields(signedTxns); err != nil {
- return fmt.Errorf("failed to reconstructAssetFreezeTxnFields: %w", err)
- }
- if err := stub.reconstructApplicationCallTxnFields(signedTxns); err != nil {
- return fmt.Errorf("failed to reconstructApplicationCallTxnFields: %w", err)
- }
- if err := stub.reconstructCompactCertTxnFields(signedTxns); err != nil {
- return fmt.Errorf("failed to reconstructCompactCertTxnFields: %w", err)
- }
- return nil
-}
-
-func (stub *txGroupsEncodingStub) reconstructTxnHeader(signedTxns []transactions.SignedTxn, genesisID string, genesisHash crypto.Digest) (err error) {
- err = stub.BitmaskSender.iterate(int(stub.TotalTransactionsCount), len(stub.Sender)/crypto.DigestSize, func(i int, index int) error {
- return nextSlice(&stub.Sender, signedTxns[i].Txn.Sender[:], crypto.DigestSize)
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskFee.iterate(int(stub.TotalTransactionsCount), len(stub.Fee), func(i int, index int) error {
- signedTxns[i].Txn.Fee = stub.Fee[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskFirstValid.iterate(int(stub.TotalTransactionsCount), len(stub.FirstValid), func(i int, index int) error {
- signedTxns[i].Txn.FirstValid = stub.FirstValid[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskLastValid.iterate(int(stub.TotalTransactionsCount), len(stub.LastValid), func(i int, index int) error {
- signedTxns[i].Txn.LastValid = stub.LastValid[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskNote.iterate(int(stub.TotalTransactionsCount), len(stub.Note), func(i int, index int) error {
- signedTxns[i].Txn.Note = stub.Note[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskGenesisID.iterate(int(stub.TotalTransactionsCount), int(stub.TotalTransactionsCount), func(i int, index int) error {
- signedTxns[i].Txn.GenesisID = genesisID
- return nil
- })
- if err != nil {
- return err
- }
- for i := range signedTxns {
- signedTxns[i].Txn.GenesisHash = genesisHash
- }
- err = stub.BitmaskLease.iterate(int(stub.TotalTransactionsCount), len(stub.Lease)/crypto.DigestSize, func(i int, index int) error {
- return nextSlice(&stub.Lease, signedTxns[i].Txn.Lease[:], transactions.LeaseByteLength)
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskRekeyTo.iterate(int(stub.TotalTransactionsCount), len(stub.RekeyTo)/crypto.DigestSize, func(i int, index int) error {
- return nextSlice(&stub.RekeyTo, signedTxns[i].Txn.RekeyTo[:], crypto.DigestSize)
- })
- if err != nil {
- return err
- }
- return nil
-}
-
-func (stub *txGroupsEncodingStub) reconstructKeyregTxnFields(signedTxns []transactions.SignedTxn) (err error) {
- // should all have same number of elements
- if len(stub.VotePK)/len(crypto.OneTimeSignatureVerifier{}) != len(stub.VoteKeyDilution) || len(stub.SelectionPK)/len(crypto.VRFVerifier{}) != len(stub.VoteKeyDilution) {
- return errDataMissing
- }
- err = stub.BitmaskKeys.iterate(int(stub.TotalTransactionsCount), len(stub.VoteKeyDilution), func(i int, index int) error {
- signedTxns[i].Txn.VoteKeyDilution = stub.VoteKeyDilution[index]
- err := nextSlice(&stub.VotePK, signedTxns[i].Txn.VotePK[:], len(crypto.OneTimeSignatureVerifier{}))
- if err != nil {
- return err
- }
- return nextSlice(&stub.SelectionPK, signedTxns[i].Txn.SelectionPK[:], len(crypto.VRFVerifier{}))
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskVoteFirst.iterate(int(stub.TotalTransactionsCount), len(stub.VoteFirst), func(i int, index int) error {
- if index >= len(stub.VoteFirst) {
- return errDataMissing
- }
- signedTxns[i].Txn.VoteFirst = stub.VoteFirst[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskVoteLast.iterate(int(stub.TotalTransactionsCount), len(stub.VoteLast), func(i int, index int) error {
- if index >= len(stub.VoteLast) {
- return errDataMissing
- }
- signedTxns[i].Txn.VoteLast = stub.VoteLast[index]
- return nil
- })
- if err != nil {
- return err
- }
-
- err = stub.BitmaskNonparticipation.iterate(int(stub.TotalTransactionsCount), int(stub.TotalTransactionsCount), func(i int, index int) error {
- signedTxns[i].Txn.Nonparticipation = true
- return nil
- })
- if err != nil {
- return err
- }
- return nil
-}
-
-func (stub *txGroupsEncodingStub) reconstructPaymentTxnFields(signedTxns []transactions.SignedTxn) (err error) {
- err = stub.BitmaskReceiver.iterate(int(stub.TotalTransactionsCount), len(stub.Receiver)/crypto.DigestSize, func(i int, index int) error {
- return nextSlice(&stub.Receiver, signedTxns[i].Txn.Receiver[:], crypto.DigestSize)
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskAmount.iterate(int(stub.TotalTransactionsCount), len(stub.Amount), func(i int, index int) error {
- signedTxns[i].Txn.Amount = stub.Amount[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskCloseRemainderTo.iterate(int(stub.TotalTransactionsCount), len(stub.CloseRemainderTo)/crypto.DigestSize, func(i int, index int) error {
- return nextSlice(&stub.CloseRemainderTo, signedTxns[i].Txn.CloseRemainderTo[:], crypto.DigestSize)
- })
- if err != nil {
- return err
- }
- return nil
-}
-
-func (stub *txGroupsEncodingStub) reconstructAssetConfigTxnFields(signedTxns []transactions.SignedTxn) (err error) {
- err = stub.BitmaskConfigAsset.iterate(int(stub.TotalTransactionsCount), len(stub.ConfigAsset), func(i int, index int) error {
- signedTxns[i].Txn.ConfigAsset = stub.ConfigAsset[index]
- return nil
- })
- if err != nil {
- return err
- }
- return stub.reconstructAssetParams(signedTxns)
-}
-
-func (stub *txGroupsEncodingStub) reconstructAssetParams(signedTxns []transactions.SignedTxn) (err error) {
- err = stub.BitmaskTotal.iterate(int(stub.TotalTransactionsCount), len(stub.Total), func(i int, index int) error {
- signedTxns[i].Txn.AssetParams.Total = stub.Total[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskDecimals.iterate(int(stub.TotalTransactionsCount), len(stub.Decimals), func(i int, index int) error {
- signedTxns[i].Txn.AssetParams.Decimals = stub.Decimals[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskDefaultFrozen.iterate(int(stub.TotalTransactionsCount), int(stub.TotalTransactionsCount), func(i int, index int) error {
- signedTxns[i].Txn.AssetParams.DefaultFrozen = true
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskUnitName.iterate(int(stub.TotalTransactionsCount), len(stub.UnitName), func(i int, index int) error {
- signedTxns[i].Txn.AssetParams.UnitName = stub.UnitName[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskAssetName.iterate(int(stub.TotalTransactionsCount), len(stub.AssetName), func(i int, index int) error {
- signedTxns[i].Txn.AssetParams.AssetName = stub.AssetName[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskURL.iterate(int(stub.TotalTransactionsCount), len(stub.URL), func(i int, index int) error {
- signedTxns[i].Txn.AssetParams.URL = stub.URL[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskMetadataHash.iterate(int(stub.TotalTransactionsCount), len(stub.MetadataHash)/basics.MetadataHashLength, func(i int, index int) error {
- return nextSlice(&stub.MetadataHash, signedTxns[i].Txn.AssetParams.MetadataHash[:], basics.MetadataHashLength)
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskManager.iterate(int(stub.TotalTransactionsCount), len(stub.Manager)/crypto.DigestSize, func(i int, index int) error {
- return nextSlice(&stub.Manager, signedTxns[i].Txn.AssetParams.Manager[:], crypto.DigestSize)
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskReserve.iterate(int(stub.TotalTransactionsCount), len(stub.Reserve)/crypto.DigestSize, func(i int, index int) error {
- return nextSlice(&stub.Reserve, signedTxns[i].Txn.AssetParams.Reserve[:], crypto.DigestSize)
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskFreeze.iterate(int(stub.TotalTransactionsCount), len(stub.Freeze)/crypto.DigestSize, func(i int, index int) error {
- return nextSlice(&stub.Freeze, signedTxns[i].Txn.AssetParams.Freeze[:], crypto.DigestSize)
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskClawback.iterate(int(stub.TotalTransactionsCount), len(stub.Clawback)/crypto.DigestSize, func(i int, index int) error {
- return nextSlice(&stub.Clawback, signedTxns[i].Txn.AssetParams.Clawback[:], crypto.DigestSize)
- })
- if err != nil {
- return err
- }
- return nil
-}
-
-func (stub *txGroupsEncodingStub) reconstructAssetTransferTxnFields(signedTxns []transactions.SignedTxn) (err error) {
- err = stub.BitmaskXferAsset.iterate(int(stub.TotalTransactionsCount), len(stub.XferAsset), func(i int, index int) error {
- signedTxns[i].Txn.XferAsset = stub.XferAsset[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskAssetAmount.iterate(int(stub.TotalTransactionsCount), len(stub.AssetAmount), func(i int, index int) error {
- signedTxns[i].Txn.AssetAmount = stub.AssetAmount[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskAssetSender.iterate(int(stub.TotalTransactionsCount), len(stub.AssetSender)/crypto.DigestSize, func(i int, index int) error {
- return nextSlice(&stub.AssetSender, signedTxns[i].Txn.AssetSender[:], crypto.DigestSize)
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskAssetReceiver.iterate(int(stub.TotalTransactionsCount), len(stub.AssetReceiver)/crypto.DigestSize, func(i int, index int) error {
- return nextSlice(&stub.AssetReceiver, signedTxns[i].Txn.AssetReceiver[:], crypto.DigestSize)
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskAssetCloseTo.iterate(int(stub.TotalTransactionsCount), len(stub.AssetCloseTo)/crypto.DigestSize, func(i int, index int) error {
- return nextSlice(&stub.AssetCloseTo, signedTxns[i].Txn.AssetCloseTo[:], crypto.DigestSize)
- })
- if err != nil {
- return err
- }
- return nil
-}
-
-func (stub *txGroupsEncodingStub) reconstructAssetFreezeTxnFields(signedTxns []transactions.SignedTxn) (err error) {
- err = stub.BitmaskFreezeAccount.iterate(int(stub.TotalTransactionsCount), len(stub.FreezeAccount)/crypto.DigestSize, func(i int, index int) error {
- return nextSlice(&stub.FreezeAccount, signedTxns[i].Txn.FreezeAccount[:], crypto.DigestSize)
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskFreezeAsset.iterate(int(stub.TotalTransactionsCount), len(stub.FreezeAsset), func(i int, index int) error {
- signedTxns[i].Txn.FreezeAsset = stub.FreezeAsset[index]
- return nil
- })
- if err != nil {
- return err
- }
-
- err = stub.BitmaskAssetFrozen.iterate(int(stub.TotalTransactionsCount), int(stub.TotalTransactionsCount), func(i int, index int) error {
- signedTxns[i].Txn.AssetFrozen = true
- return nil
- })
- if err != nil {
- return err
- }
- return nil
-}
-
-func (stub *txGroupsEncodingStub) reconstructApplicationCallTxnFields(signedTxns []transactions.SignedTxn) (err error) {
- err = stub.BitmaskApplicationID.iterate(int(stub.TotalTransactionsCount), len(stub.ApplicationID), func(i int, index int) error {
- signedTxns[i].Txn.ApplicationID = stub.ApplicationID[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskOnCompletion.iterate(int(stub.TotalTransactionsCount), len(stub.OnCompletion)*2, func(i int, index int) error {
- b, err := getNibble(stub.OnCompletion, index)
- if err != nil {
- return err
- }
- signedTxns[i].Txn.OnCompletion = transactions.OnCompletion(b)
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskApplicationArgs.iterate(int(stub.TotalTransactionsCount), len(stub.ApplicationArgs), func(i int, index int) error {
- signedTxns[i].Txn.ApplicationArgs = stub.ApplicationArgs[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskAccounts.iterate(int(stub.TotalTransactionsCount), len(stub.Accounts), func(i int, index int) error {
- signedTxns[i].Txn.Accounts = stub.Accounts[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskForeignApps.iterate(int(stub.TotalTransactionsCount), len(stub.ForeignApps), func(i int, index int) error {
- signedTxns[i].Txn.ForeignApps = stub.ForeignApps[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskForeignAssets.iterate(int(stub.TotalTransactionsCount), len(stub.ForeignAssets), func(i int, index int) error {
- signedTxns[i].Txn.ForeignAssets = stub.ForeignAssets[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskLocalNumUint.iterate(int(stub.TotalTransactionsCount), len(stub.LocalNumUint), func(i int, index int) error {
- signedTxns[i].Txn.LocalStateSchema.NumUint = stub.LocalNumUint[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskLocalNumByteSlice.iterate(int(stub.TotalTransactionsCount), len(stub.LocalNumByteSlice), func(i int, index int) error {
- signedTxns[i].Txn.LocalStateSchema.NumByteSlice = stub.LocalNumByteSlice[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskGlobalNumUint.iterate(int(stub.TotalTransactionsCount), len(stub.GlobalNumUint), func(i int, index int) error {
- signedTxns[i].Txn.GlobalStateSchema.NumUint = stub.GlobalNumUint[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskGlobalNumByteSlice.iterate(int(stub.TotalTransactionsCount), len(stub.GlobalNumByteSlice), func(i int, index int) error {
- signedTxns[i].Txn.GlobalStateSchema.NumByteSlice = stub.GlobalNumByteSlice[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskApprovalProgram.iterate(int(stub.TotalTransactionsCount), len(stub.ApprovalProgram), func(i int, index int) error {
- signedTxns[i].Txn.ApprovalProgram = stub.ApprovalProgram[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskClearStateProgram.iterate(int(stub.TotalTransactionsCount), len(stub.ClearStateProgram), func(i int, index int) error {
- signedTxns[i].Txn.ClearStateProgram = stub.ClearStateProgram[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskExtraProgramPages.iterate(int(stub.TotalTransactionsCount), len(stub.ExtraProgramPages), func(i int, index int) error {
- signedTxns[i].Txn.ExtraProgramPages = stub.ExtraProgramPages[index]
- return nil
- })
- if err != nil {
- return err
- }
- return nil
-}
-
-func (stub *txGroupsEncodingStub) reconstructCompactCertTxnFields(signedTxns []transactions.SignedTxn) (err error) {
- err = stub.BitmaskCertRound.iterate(int(stub.TotalTransactionsCount), len(stub.CertRound), func(i int, index int) error {
- signedTxns[i].Txn.CertRound = stub.CertRound[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskCertType.iterate(int(stub.TotalTransactionsCount), len(stub.CertType), func(i int, index int) error {
- signedTxns[i].Txn.CertType = stub.CertType[index]
- return nil
- })
- if err != nil {
- return err
- }
- return stub.reconstructCert(signedTxns)
-}
-
-func (stub *txGroupsEncodingStub) reconstructCert(signedTxns []transactions.SignedTxn) (err error) {
- err = stub.BitmaskSigCommit.iterate(int(stub.TotalTransactionsCount), len(stub.SigCommit)/crypto.DigestSize, func(i int, index int) error {
- return nextSlice(&stub.SigCommit, signedTxns[i].Txn.Cert.SigCommit[:], crypto.DigestSize)
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskSignedWeight.iterate(int(stub.TotalTransactionsCount), len(stub.SignedWeight), func(i int, index int) error {
- signedTxns[i].Txn.Cert.SignedWeight = stub.SignedWeight[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskSigProofs.iterate(int(stub.TotalTransactionsCount), len(stub.SigProofs), func(i int, index int) error {
- signedTxns[i].Txn.Cert.SigProofs = stub.SigProofs[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskPartProofs.iterate(int(stub.TotalTransactionsCount), len(stub.PartProofs), func(i int, index int) error {
- signedTxns[i].Txn.Cert.PartProofs = stub.PartProofs[index]
- return nil
- })
- if err != nil {
- return err
- }
- err = stub.BitmaskReveals.iterate(int(stub.TotalTransactionsCount), len(stub.Reveals), func(i int, index int) error {
- signedTxns[i].Txn.Cert.Reveals = stub.Reveals[index]
- return nil
- })
- if err != nil {
- return err
- }
- return nil
-}