From 5f4fa1a9540603262fcc0cff92c726446a500523 Mon Sep 17 00:00:00 2001 From: Simon Date: Wed, 25 Apr 2018 19:03:43 -0700 Subject: [PATCH] Add virtual destructor to SproutNote and BaseNote Also add test to make sure default copy constructors are okay. --- src/gtest/test_joinsplit.cpp | 22 ++++++++++++++++++++++ src/zcash/Note.hpp | 4 ++++ 2 files changed, 26 insertions(+) diff --git a/src/gtest/test_joinsplit.cpp b/src/gtest/test_joinsplit.cpp index d238e4b94..196c61e7f 100644 --- a/src/gtest/test_joinsplit.cpp +++ b/src/gtest/test_joinsplit.cpp @@ -547,3 +547,25 @@ TEST(joinsplit, note_plaintexts) ASSERT_TRUE(decrypted.memo == note_pt.memo); } + +TEST(joinsplit, note_class) +{ + uint252 a_sk = uint252(uint256S("f6da8716682d600f74fc16bd0187faad6a26b4aa4c24d5c055b216d94516840e")); + uint256 a_pk = PRF_addr_a_pk(a_sk); + uint256 sk_enc = ZCNoteEncryption::generate_privkey(a_sk); + uint256 pk_enc = ZCNoteEncryption::generate_pubkey(sk_enc); + PaymentAddress addr_pk(a_pk, pk_enc); + + SproutNote note(a_pk, + 1945813, + random_uint256(), + random_uint256()); + + SproutNote clone = note; + ASSERT_NE(¬e, &clone); + ASSERT_EQ(note.value(), clone.value()); + ASSERT_EQ(note.cm(), clone.cm()); + ASSERT_EQ(note.rho, clone.rho); + ASSERT_EQ(note.r, clone.r); + ASSERT_EQ(note.a_pk, clone.a_pk); +} diff --git a/src/zcash/Note.hpp b/src/zcash/Note.hpp index f4cd4e0f6..586b172b7 100644 --- a/src/zcash/Note.hpp +++ b/src/zcash/Note.hpp @@ -14,6 +14,8 @@ protected: public: BaseNote() {} BaseNote(uint64_t value) : value_(value) {}; + virtual ~BaseNote() {}; + virtual uint256 cm() const {}; inline uint64_t value() const { return value_; }; }; @@ -29,6 +31,8 @@ public: SproutNote(); + virtual ~SproutNote() {}; + virtual uint256 cm() const override; uint256 nullifier(const SpendingKey& a_sk) const;