diff --git a/src/test/zerocoin_transactions_tests.cpp b/src/test/zerocoin_transactions_tests.cpp index 51aa3b605bcc6..979ded2182c31 100644 --- a/src/test/zerocoin_transactions_tests.cpp +++ b/src/test/zerocoin_transactions_tests.cpp @@ -109,6 +109,11 @@ BOOST_AUTO_TEST_CASE(zerocoin_public_spend_test) BOOST_CHECK_MESSAGE(publicSpendTest.HasValidSignature(), "Failed to validate public spend signature"); BOOST_CHECK_MESSAGE(spend->HasValidSignature(), "Failed to validate spend signature"); + // Verify that fails with a different denomination + in.nSequence = 500; + PublicCoinSpend publicSpend2(ZCParams); + BOOST_CHECK_MESSAGE(!ZPIVModule::validateInput(in, out, tx, publicSpend2), "Different denomination"); + } BOOST_AUTO_TEST_SUITE_END() diff --git a/src/zpiv/zpivmodule.cpp b/src/zpiv/zpivmodule.cpp index 8134497e45293..e84622f8e13f4 100644 --- a/src/zpiv/zpivmodule.cpp +++ b/src/zpiv/zpivmodule.cpp @@ -103,10 +103,13 @@ namespace ZPIVModule { bool validateInput(const CTxIn &in, const CTxOut &prevOut, const CTransaction &tx, PublicCoinSpend &publicSpend) { // Now prove that the commitment value opens to the input if (!parseCoinSpend(in, tx, prevOut, publicSpend)) { - std::cout << "parse failed" << std::endl; return false; } - // TODO: Validate that the prev out has the same spend denom? + if (libzerocoin::ZerocoinDenominationToAmount( + libzerocoin::IntToZerocoinDenomination(in.nSequence)) != prevOut.nValue) { + return error("PublicCoinSpend validateInput :: input nSequence different to prevout value\n"); + } + return publicSpend.validate(); }