]> Git Repo - VerusCoin.git/blob - src/wallet/gtest/test_transaction.cpp
Merge pull request #97 from miketout/dev
[VerusCoin.git] / src / wallet / gtest / test_transaction.cpp
1 #include <gtest/gtest.h>
2
3 #include "primitives/transaction.h"
4 #include "zcash/Note.hpp"
5 #include "zcash/Address.hpp"
6
7 extern ZCJoinSplit* params;
8 extern int GenZero(int n);
9 extern int GenMax(int n);
10
11 TEST(Transaction, JSDescriptionRandomized) {
12     // construct a merkle tree
13     ZCIncrementalMerkleTree merkleTree;
14
15     libzcash::SpendingKey k = libzcash::SpendingKey::random();
16     libzcash::PaymentAddress addr = k.address();
17
18     libzcash::Note note(addr.a_pk, 100, uint256(), uint256());
19
20     // commitment from coin
21     uint256 commitment = note.cm();
22
23     // insert commitment into the merkle tree
24     merkleTree.append(commitment);
25
26     // compute the merkle root we will be working with
27     uint256 rt = merkleTree.root();
28
29     auto witness = merkleTree.witness();
30
31     // create JSDescription
32     uint256 pubKeyHash;
33     boost::array<libzcash::JSInput, ZC_NUM_JS_INPUTS> inputs = {
34         libzcash::JSInput(witness, note, k),
35         libzcash::JSInput() // dummy input of zero value
36     };
37     boost::array<libzcash::JSOutput, ZC_NUM_JS_OUTPUTS> outputs = {
38         libzcash::JSOutput(addr, 50),
39         libzcash::JSOutput(addr, 50)
40     };
41     std::array<size_t, ZC_NUM_JS_INPUTS> inputMap;
42     std::array<size_t, ZC_NUM_JS_OUTPUTS> outputMap;
43
44     {
45         auto jsdesc = JSDescription::Randomized(
46             *params, pubKeyHash, rt,
47             inputs, outputs,
48             inputMap, outputMap,
49             0, 0, false);
50
51         #ifdef __LP64__ // required for building on MacOS
52         std::set<uint64_t> inputSet(inputMap.begin(), inputMap.end());
53         std::set<uint64_t> expectedInputSet {0, 1};
54         #else
55         std::set<size_t> inputSet(inputMap.begin(), inputMap.end());
56         std::set<size_t> expectedInputSet {0, 1};
57         #endif
58         EXPECT_EQ(expectedInputSet, inputSet);
59
60         std::set<size_t> outputSet(outputMap.begin(), outputMap.end());
61         std::set<size_t> expectedOutputSet {0, 1};
62         EXPECT_EQ(expectedOutputSet, outputSet);
63     }
64
65     {
66         auto jsdesc = JSDescription::Randomized(
67             *params, pubKeyHash, rt,
68             inputs, outputs,
69             inputMap, outputMap,
70             0, 0, false, GenZero);
71
72         std::array<size_t, ZC_NUM_JS_INPUTS> expectedInputMap {1, 0};
73         std::array<size_t, ZC_NUM_JS_OUTPUTS> expectedOutputMap {1, 0};
74         EXPECT_EQ(expectedInputMap, inputMap);
75         EXPECT_EQ(expectedOutputMap, outputMap);
76     }
77
78     {
79         auto jsdesc = JSDescription::Randomized(
80             *params, pubKeyHash, rt,
81             inputs, outputs,
82             inputMap, outputMap,
83             0, 0, false, GenMax);
84
85         boost::array<size_t, ZC_NUM_JS_INPUTS> expectedInputMap {0, 1};
86         boost::array<size_t, ZC_NUM_JS_OUTPUTS> expectedOutputMap {0, 1};
87         EXPECT_EQ(expectedInputMap, inputMap);
88         EXPECT_EQ(expectedOutputMap, outputMap);
89     }
90 }
This page took 0.02854 seconds and 4 git commands to generate.