@@ -36,9 +36,11 @@ std::vector<unsigned char> pegin_transaction = ParseHex("020000000101f321df97906
3636
3737COutPoint prevout (uint256S(" ce9b0ee70f82e48f78e2a2e66e61ee4281df74419c23673cc33b639097df21f3" ), 1);
3838
39+ const std::string fedpegscript_str = " 512103dff4923d778550cc13ce0d887d737553b4b58f4e8e886507fc39f5e447b2186451ae" ;
40+
3941// Needed for easier parent PoW check, and setting fedpegscript
4042struct FedpegSetup : public BasicTestingSetup {
41- FedpegSetup () : BasicTestingSetup(" custom" , " 512103dff4923d778550cc13ce0d887d737553b4b58f4e8e886507fc39f5e447b2186451ae " ) {}
43+ FedpegSetup () : BasicTestingSetup(" custom" , fedpegscript_str ) {}
4244};
4345
4446BOOST_FIXTURE_TEST_SUITE (pegin_witness_tests, FedpegSetup)
@@ -50,40 +52,46 @@ BOOST_AUTO_TEST_CASE(witness_valid)
5052
5153 std::string err;
5254
53- bool valid = IsValidPeginWitness (witness, prevout, err, false );
55+ std::vector<unsigned char > fedpegscript_bytes = ParseHex (fedpegscript_str);
56+ CScript fedpegscript (fedpegscript_bytes.begin (), fedpegscript_bytes.end ());
57+ std::vector<CScript> fedpegscripts;
58+ // TODO test with additional scripts
59+ fedpegscripts.push_back (fedpegscript);
60+
61+ bool valid = IsValidPeginWitness (witness, fedpegscripts, prevout, err, false );
5462 BOOST_CHECK (err == " " );
5563 BOOST_CHECK (valid);
5664
5765 // Missing byte on each field to make claim ill-formatted
5866 // This will break deserialization and other data-matching checks
5967 for (unsigned int i = 0 ; i < witness.stack .size (); i++) {
6068 witness.stack [i].pop_back ();
61- BOOST_CHECK (!IsValidPeginWitness (witness, prevout, err, false ));
69+ BOOST_CHECK (!IsValidPeginWitness (witness, fedpegscripts, prevout, err, false ));
6270 witness.stack = witness_stack;
63- BOOST_CHECK (IsValidPeginWitness (witness, prevout, err, false ));
71+ BOOST_CHECK (IsValidPeginWitness (witness, fedpegscripts, prevout, err, false ));
6472 }
6573
6674 // Test mismatched but valid nOut to proof
6775 COutPoint fake_prevout = prevout;
6876 fake_prevout.n = 0 ;
69- BOOST_CHECK (!IsValidPeginWitness (witness, fake_prevout, err, false ));
77+ BOOST_CHECK (!IsValidPeginWitness (witness, fedpegscripts, fake_prevout, err, false ));
7078
7179 // Test mistmatched but valid txid
7280 fake_prevout = prevout;
7381 fake_prevout.hash = uint256S (" 2f103ee04a5649eecb932b4da4ca9977f53a12bbe04d9d1eb5ccc0f4a06334" );
74- BOOST_CHECK (!IsValidPeginWitness (witness, fake_prevout, err, false ));
82+ BOOST_CHECK (!IsValidPeginWitness (witness, fedpegscripts, fake_prevout, err, false ));
7583
7684 // Ensure that all witness stack sizes are handled
77- BOOST_CHECK (IsValidPeginWitness (witness, prevout, err, false ));
85+ BOOST_CHECK (IsValidPeginWitness (witness, fedpegscripts, prevout, err, false ));
7886 for (unsigned int i = 0 ; i < witness.stack .size (); i++) {
7987 witness.stack .pop_back ();
80- BOOST_CHECK (!IsValidPeginWitness (witness, prevout, err, false ));
88+ BOOST_CHECK (!IsValidPeginWitness (witness, fedpegscripts, prevout, err, false ));
8189 }
8290 witness.stack = witness_stack;
8391
8492 // Extra element causes failure
8593 witness.stack .push_back (witness.stack .back ());
86- BOOST_CHECK (!IsValidPeginWitness (witness, prevout, err, false ));
94+ BOOST_CHECK (!IsValidPeginWitness (witness, fedpegscripts, prevout, err, false ));
8795 witness.stack = witness_stack;
8896
8997 // Check validation of peg-in transaction's inputs and balance
@@ -103,23 +111,25 @@ BOOST_AUTO_TEST_CASE(witness_valid)
103111 BOOST_CHECK (tx.vin [0 ].m_is_pegin );
104112 // Check that serialization doesn't cause issuance to become non-null
105113 BOOST_CHECK (tx.vin [0 ].assetIssuance .IsNull ());
106- BOOST_CHECK (IsValidPeginWitness (tx.witness .vtxinwit [0 ].m_pegin_witness , prevout, err, false ));
114+ BOOST_CHECK (IsValidPeginWitness (tx.witness .vtxinwit [0 ].m_pegin_witness , fedpegscripts, prevout, err, false ));
107115
108116 CAmountMap fee_map;
109117
110118 std::set<std::pair<uint256, COutPoint> > setPeginsSpent;
111119 CValidationState state;
112120 CCoinsView coinsDummy;
113121 CCoinsViewCache coins (&coinsDummy);
114- BOOST_CHECK (Consensus::CheckTxInputs (tx, state, coins, 0 , fee_map, setPeginsSpent, NULL , false , true ));
122+ // Get the latest block index to look up fedpegscripts
123+ // For these tests, should be genesis-block-hardcoded consensus.fedpegscript
124+ BOOST_CHECK (Consensus::CheckTxInputs (tx, state, coins, 0 , fee_map, setPeginsSpent, NULL , false , true , fedpegscripts));
115125 BOOST_CHECK (setPeginsSpent.size () == 1 );
116126 setPeginsSpent.clear ();
117127
118128 // Strip pegin_witness
119129 CMutableTransaction mtxn (tx);
120130 mtxn.witness .vtxinwit [0 ].m_pegin_witness .SetNull ();
121131 CTransaction tx2 (mtxn);
122- BOOST_CHECK (!Consensus::CheckTxInputs (tx2, state, coins, 0 , fee_map, setPeginsSpent, NULL , false , true ));
132+ BOOST_CHECK (!Consensus::CheckTxInputs (tx2, state, coins, 0 , fee_map, setPeginsSpent, NULL , false , true , fedpegscripts ));
123133 BOOST_CHECK (setPeginsSpent.empty ());
124134
125135 // Invalidate peg-in (and spending) authorization by pegin marker.
@@ -128,7 +138,7 @@ BOOST_AUTO_TEST_CASE(witness_valid)
128138 CMutableTransaction mtxn2 (tx);
129139 mtxn2.vin [0 ].m_is_pegin = false ;
130140 CTransaction tx3 (mtxn2);
131- BOOST_CHECK (!Consensus::CheckTxInputs (tx3, state, coins, 0 , fee_map, setPeginsSpent, NULL , false , true ));
141+ BOOST_CHECK (!Consensus::CheckTxInputs (tx3, state, coins, 0 , fee_map, setPeginsSpent, NULL , false , true , fedpegscripts ));
132142 BOOST_CHECK (setPeginsSpent.empty ());
133143
134144
0 commit comments