diff --git a/src/gtest/test_noteencryption.cpp b/src/gtest/test_noteencryption.cpp index 0c8a78c2a..a9b19f184 100644 --- a/src/gtest/test_noteencryption.cpp +++ b/src/gtest/test_noteencryption.cpp @@ -25,16 +25,10 @@ public: TEST(NoteEncryption, NotePlaintext) { SelectParams(CBaseChainParams::REGTEST); - int overwinterActivationHeight = 5; - int saplingActivationHeight = 30; - int canopyActivationHeight = 70; - UpdateNetworkUpgradeParameters(Consensus::UPGRADE_OVERWINTER, overwinterActivationHeight); - UpdateNetworkUpgradeParameters(Consensus::UPGRADE_SAPLING, saplingActivationHeight); - UpdateNetworkUpgradeParameters(Consensus::UPGRADE_CANOPY, canopyActivationHeight); - auto params = Params().GetConsensus(); std::vector zip_212_enabled = {libzcash::Zip212Enabled::BeforeZip212, libzcash::Zip212Enabled::AfterZip212}; - int decryptionHeights[] = {saplingActivationHeight, canopyActivationHeight}; + const Consensus::Params& (*activations [])() = {RegtestActivateSapling, RegtestActivateCanopy}; + void (*deactivations [])() = {RegtestDeactivateSapling, RegtestDeactivateCanopy}; using namespace libzcash; auto xsk = SaplingSpendingKey(uint256()).expanded_spending_key(); @@ -49,6 +43,8 @@ TEST(NoteEncryption, NotePlaintext) } for (int ver = 0; ver < zip_212_enabled.size(); ver++){ + auto params = (*activations[ver])(); + SaplingNote note(addr, 39393, zip_212_enabled[ver]); auto cmu_opt = note.cmu(); if (!cmu_opt) { @@ -71,7 +67,7 @@ TEST(NoteEncryption, NotePlaintext) // Try to decrypt with incorrect commitment ASSERT_FALSE(SaplingNotePlaintext::decrypt( params, - decryptionHeights[ver], + 1, ct, ivk, epk, @@ -81,7 +77,7 @@ TEST(NoteEncryption, NotePlaintext) // Try to decrypt with correct commitment auto foo = SaplingNotePlaintext::decrypt( params, - decryptionHeights[ver], + 1, ct, ivk, epk, @@ -149,7 +145,7 @@ TEST(NoteEncryption, NotePlaintext) ASSERT_FALSE( SaplingNotePlaintext::decrypt( params, - decryptionHeights[ver], + 1, ct, epk, decrypted_out_ct_unwrapped.esk, @@ -161,7 +157,7 @@ TEST(NoteEncryption, NotePlaintext) // Test sender can decrypt the note ciphertext. foo = SaplingNotePlaintext::decrypt( params, - decryptionHeights[ver], + 1, ct, epk, decrypted_out_ct_unwrapped.esk, @@ -179,12 +175,9 @@ TEST(NoteEncryption, NotePlaintext) ASSERT_TRUE(bar.memo() == pt.memo()); ASSERT_TRUE(bar.d == pt.d); ASSERT_TRUE(bar.rcm() == pt.rcm()); - } - // Revert to test default - RegtestDeactivateCanopy(); - RegtestDeactivateHeartwood(); - RegtestDeactivateSapling(); + (*deactivations[ver])(); + } } TEST(NoteEncryption, RejectsInvalidNoteZip212Enabled) diff --git a/src/utiltest.cpp b/src/utiltest.cpp index f5ca85ba5..24ac06a59 100644 --- a/src/utiltest.cpp +++ b/src/utiltest.cpp @@ -264,6 +264,10 @@ const Consensus::Params& RegtestActivateCanopy(bool updatePow, int canopyActivat return Params().GetConsensus(); } +const Consensus::Params& RegtestActivateCanopy() { + return RegtestActivateCanopy(false, Consensus::NetworkUpgrade::ALWAYS_ACTIVE); +} + void RegtestDeactivateCanopy() { UpdateRegtestPow(0, 0, uint256S("0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f")); UpdateNetworkUpgradeParameters(Consensus::UPGRADE_CANOPY, Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT); diff --git a/src/utiltest.h b/src/utiltest.h index 9166f499c..d22f48af9 100644 --- a/src/utiltest.h +++ b/src/utiltest.h @@ -54,6 +54,7 @@ const Consensus::Params& RegtestActivateHeartwood(bool updatePow, int heartwoodA void RegtestDeactivateHeartwood(); const Consensus::Params& RegtestActivateCanopy(bool updatePow, int canopyActivationHeight = Consensus::NetworkUpgrade::ALWAYS_ACTIVE); +const Consensus::Params& RegtestActivateCanopy(); void RegtestDeactivateCanopy(); diff --git a/src/wallet/gtest/test_wallet.cpp b/src/wallet/gtest/test_wallet.cpp index 1c6adaf72..a0a032140 100644 --- a/src/wallet/gtest/test_wallet.cpp +++ b/src/wallet/gtest/test_wallet.cpp @@ -377,18 +377,14 @@ TEST(WalletTests, SetSproutNoteAddrsInCWalletTx) { TEST(WalletTests, SetSaplingNoteAddrsInCWalletTx) { SelectParams(CBaseChainParams::REGTEST); - int overwinterActivationHeight = 5; - int saplingActivationHeight = 30; - int canopyActivationHeight = 70; - UpdateNetworkUpgradeParameters(Consensus::UPGRADE_OVERWINTER, overwinterActivationHeight); - UpdateNetworkUpgradeParameters(Consensus::UPGRADE_SAPLING, saplingActivationHeight); - UpdateNetworkUpgradeParameters(Consensus::UPGRADE_CANOPY, canopyActivationHeight); - auto consensusParams = Params().GetConsensus(); std::vector zip_212_enabled = {libzcash::Zip212Enabled::BeforeZip212, libzcash::Zip212Enabled::AfterZip212}; - int builderHeights[] = {saplingActivationHeight, canopyActivationHeight}; + const Consensus::Params& (*activations [])() = {RegtestActivateSapling, RegtestActivateCanopy}; + void (*deactivations [])() = {RegtestDeactivateSapling, RegtestDeactivateCanopy}; for (int ver = 0; ver < zip_212_enabled.size(); ver++) { + auto consensusParams = (*activations[ver])(); + TestWallet wallet; LOCK(wallet.cs_wallet); @@ -409,7 +405,7 @@ TEST(WalletTests, SetSaplingNoteAddrsInCWalletTx) { ASSERT_TRUE(nf); uint256 nullifier = nf.get(); - auto builder = TransactionBuilder(consensusParams, builderHeights[ver]); + auto builder = TransactionBuilder(consensusParams, 1); builder.AddSaplingSpend(expsk, note, anchor, witness); builder.AddSaplingOutput(fvk.ovk, pk, 50000, {}); builder.SetFee(0); @@ -436,11 +432,9 @@ TEST(WalletTests, SetSaplingNoteAddrsInCWalletTx) { EXPECT_EQ(nullifier, wtx.mapSaplingNoteData[op].nullifier); EXPECT_EQ(nd.witnessHeight, wtx.mapSaplingNoteData[op].witnessHeight); EXPECT_TRUE(witness == wtx.mapSaplingNoteData[op].witnesses.front()); - } - // Revert to default - RegtestDeactivateCanopy(); - RegtestDeactivateSapling(); + (*deactivations[ver])(); + } } TEST(WalletTests, SetSproutInvalidNoteAddrsInCWalletTx) { @@ -652,18 +646,14 @@ TEST(WalletTests, GetConflictedSproutNotes) { // Generate note A and spend to create note B, from which we spend to create two conflicting transactions TEST(WalletTests, GetConflictedSaplingNotes) { SelectParams(CBaseChainParams::REGTEST); - int overwinterActivationHeight = 5; - int saplingActivationHeight = 30; - int canopyActivationHeight = 70; - UpdateNetworkUpgradeParameters(Consensus::UPGRADE_OVERWINTER, overwinterActivationHeight); - UpdateNetworkUpgradeParameters(Consensus::UPGRADE_SAPLING, saplingActivationHeight); - UpdateNetworkUpgradeParameters(Consensus::UPGRADE_CANOPY, canopyActivationHeight); - auto consensusParams = Params().GetConsensus(); std::vector zip_212_enabled = {libzcash::Zip212Enabled::BeforeZip212, libzcash::Zip212Enabled::AfterZip212}; - int builderHeights[] = {saplingActivationHeight, canopyActivationHeight}; + const Consensus::Params& (*activations [])() = {RegtestActivateSapling, RegtestActivateCanopy}; + void (*deactivations [])() = {RegtestDeactivateSapling, RegtestDeactivateCanopy}; for (int ver = 0; ver < zip_212_enabled.size(); ver++) { + auto consensusParams = (*activations[ver])(); + TestWallet wallet; LOCK2(cs_main, wallet.cs_wallet); @@ -686,7 +676,7 @@ TEST(WalletTests, GetConflictedSaplingNotes) { auto witness = saplingTree.witness(); // Generate tx to create output note B - auto builder = TransactionBuilder(consensusParams, builderHeights[ver]); + auto builder = TransactionBuilder(consensusParams, 1); builder.AddSaplingSpend(expsk, note, anchor, witness); builder.AddSaplingOutput(extfvk.fvk.ovk, pk, 35000, {}); auto tx = builder.Build().GetTxOrThrow(); @@ -706,7 +696,7 @@ TEST(WalletTests, GetConflictedSaplingNotes) { EXPECT_EQ(0, chainActive.Height()); // Simulate SyncTransaction which calls AddToWalletIfInvolvingMe - auto saplingNoteData = wallet.FindMySaplingNotes(wtx, builderHeights[ver]).first; + auto saplingNoteData = wallet.FindMySaplingNotes(wtx, 1).first; ASSERT_TRUE(saplingNoteData.size() > 0); wtx.SetSaplingNoteData(saplingNoteData); wtx.SetMerkleBranch(block); @@ -742,13 +732,13 @@ TEST(WalletTests, GetConflictedSaplingNotes) { anchor = saplingTree.root(); // Create transaction to spend note B - auto builder2 = TransactionBuilder(consensusParams, builderHeights[ver] + 1); + auto builder2 = TransactionBuilder(consensusParams, 2); builder2.AddSaplingSpend(expsk, note2, anchor, spend_note_witness); builder2.AddSaplingOutput(extfvk.fvk.ovk, pk, 20000, {}); auto tx2 = builder2.Build().GetTxOrThrow(); // Create conflicting transaction which also spends note B - auto builder3 = TransactionBuilder(consensusParams, builderHeights[ver] + 1); + auto builder3 = TransactionBuilder(consensusParams, 2); builder3.AddSaplingSpend(expsk, note2, anchor, spend_note_witness); builder3.AddSaplingOutput(extfvk.fvk.ovk, pk, 19999, {}); auto tx3 = builder3.Build().GetTxOrThrow(); @@ -776,11 +766,9 @@ TEST(WalletTests, GetConflictedSaplingNotes) { // Tear down chainActive.SetTip(NULL); mapBlockIndex.erase(blockHash); - } - // Revert to test default - RegtestDeactivateCanopy(); - RegtestActivateSapling(); + (*deactivations[ver])(); + } } TEST(WalletTests, SproutNullifierIsSpent) { @@ -1034,18 +1022,14 @@ TEST(WalletTests, SpentSproutNoteIsFromMe) { // Create note A, spend A to create note B, spend and verify note B is from me. TEST(WalletTests, SpentSaplingNoteIsFromMe) { SelectParams(CBaseChainParams::REGTEST); - int overwinterActivationHeight = 5; - int saplingActivationHeight = 30; - int canopyActivationHeight = 70; - UpdateNetworkUpgradeParameters(Consensus::UPGRADE_OVERWINTER, overwinterActivationHeight); - UpdateNetworkUpgradeParameters(Consensus::UPGRADE_SAPLING, saplingActivationHeight); - UpdateNetworkUpgradeParameters(Consensus::UPGRADE_CANOPY, canopyActivationHeight); - auto consensusParams = Params().GetConsensus(); std::vector zip_212_enabled = {libzcash::Zip212Enabled::BeforeZip212, libzcash::Zip212Enabled::AfterZip212}; - int builderHeights[] = {saplingActivationHeight, canopyActivationHeight}; + const Consensus::Params& (*activations [])() = {RegtestActivateSapling, RegtestActivateCanopy}; + void (*deactivations [])() = {RegtestDeactivateSapling, RegtestDeactivateCanopy}; for (int ver = 0; ver < zip_212_enabled.size(); ver++) { + auto consensusParams = (*activations[ver])(); + TestWallet wallet; LOCK2(cs_main, wallet.cs_wallet); @@ -1065,7 +1049,7 @@ TEST(WalletTests, SpentSaplingNoteIsFromMe) { auto witness = saplingTree.witness(); // Generate transaction, which sends funds to note B - auto builder = TransactionBuilder(consensusParams, builderHeights[ver]); + auto builder = TransactionBuilder(consensusParams, 1); builder.AddSaplingSpend(expsk, note, anchor, witness); builder.AddSaplingOutput(extfvk.fvk.ovk, pk, 25000, {}); auto tx = builder.Build().GetTxOrThrow(); @@ -1087,7 +1071,7 @@ TEST(WalletTests, SpentSaplingNoteIsFromMe) { EXPECT_TRUE(chainActive.Contains(&fakeIndex)); EXPECT_EQ(0, chainActive.Height()); - auto saplingNoteData = wallet.FindMySaplingNotes(wtx, builderHeights[ver]).first; + auto saplingNoteData = wallet.FindMySaplingNotes(wtx, 1).first; ASSERT_TRUE(saplingNoteData.size() > 0); wtx.SetSaplingNoteData(saplingNoteData); wtx.SetMerkleBranch(block); @@ -1137,7 +1121,7 @@ TEST(WalletTests, SpentSaplingNoteIsFromMe) { anchor = saplingTree.root(); // Create transaction to spend note B - auto builder2 = TransactionBuilder(consensusParams, builderHeights[ver] + 1); + auto builder2 = TransactionBuilder(consensusParams, 2); builder2.AddSaplingSpend(expsk, note2, anchor, spend_note_witness); builder2.AddSaplingOutput(extfvk.fvk.ovk, pk, 12500, {}); auto tx2 = builder2.Build().GetTxOrThrow(); @@ -1164,7 +1148,7 @@ TEST(WalletTests, SpentSaplingNoteIsFromMe) { EXPECT_TRUE(chainActive.Contains(&fakeIndex2)); EXPECT_EQ(1, chainActive.Height()); - auto saplingNoteData2 = wallet.FindMySaplingNotes(wtx2, builderHeights[ver]).first; + auto saplingNoteData2 = wallet.FindMySaplingNotes(wtx2, 2).first; ASSERT_TRUE(saplingNoteData2.size() > 0); wtx2.SetSaplingNoteData(saplingNoteData2); wtx2.SetMerkleBranch(block2); @@ -1181,11 +1165,9 @@ TEST(WalletTests, SpentSaplingNoteIsFromMe) { chainActive.SetTip(NULL); mapBlockIndex.erase(blockHash); mapBlockIndex.erase(blockHash2); - } - // Revert to test default - RegtestDeactivateCanopy(); - RegtestActivateSapling(); + (*deactivations[ver])(); + } } TEST(WalletTests, CachedWitnessesEmptyChain) {