// Copyright (c) 2016-2020 The Hush developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html #include #include "primitives/transaction.h" #include "zcash/Note.hpp" #include "zcash/Address.hpp" extern ZCJoinSplit* params; extern int GenZero(int n); extern int GenMax(int n); //TODO: Sapling transaction /* TEST(Transaction, JSDescriptionRandomized) { // construct a merkle tree ZCIncrementalMerkleTree merkleTree; libzcash::SpendingKey k = libzcash::SpendingKey::random(); libzcash::PaymentAddress addr = k.address(); libzcash::Note note(addr.a_pk, 100, uint256(), uint256()); // commitment from coin uint256 commitment = note.cm(); // insert commitment into the merkle tree merkleTree.append(commitment); // compute the merkle root we will be working with uint256 rt = merkleTree.root(); auto witness = merkleTree.witness(); // create JSDescription uint256 pubKeyHash; boost::array inputs = { libzcash::JSInput(witness, note, k), libzcash::JSInput() // dummy input of zero value }; boost::array outputs = { libzcash::JSOutput(addr, 50), libzcash::JSOutput(addr, 50) }; std::array inputMap; std::array outputMap; { auto jsdesc = JSDescription::Randomized( *params, pubKeyHash, rt, inputs, outputs, inputMap, outputMap, 0, 0, false); #ifdef __LP64__ // required for building on MacOS std::set inputSet(inputMap.begin(), inputMap.end()); std::set expectedInputSet {0, 1}; #else std::set inputSet(inputMap.begin(), inputMap.end()); std::set expectedInputSet {0, 1}; #endif EXPECT_EQ(expectedInputSet, inputSet); std::set outputSet(outputMap.begin(), outputMap.end()); std::set expectedOutputSet {0, 1}; EXPECT_EQ(expectedOutputSet, outputSet); } { auto jsdesc = JSDescription::Randomized( *params, pubKeyHash, rt, inputs, outputs, inputMap, outputMap, 0, 0, false, GenZero); std::array expectedInputMap {1, 0}; std::array expectedOutputMap {1, 0}; EXPECT_EQ(expectedInputMap, inputMap); EXPECT_EQ(expectedOutputMap, outputMap); } { auto jsdesc = JSDescription::Randomized( *params, pubKeyHash, rt, inputs, outputs, inputMap, outputMap, 0, 0, false, GenMax); boost::array expectedInputMap {0, 1}; boost::array expectedOutputMap {0, 1}; EXPECT_EQ(expectedInputMap, inputMap); EXPECT_EQ(expectedOutputMap, outputMap); } } */