diff --git a/src/zcash/Address.cpp b/src/zcash/Address.cpp index 3ed8b7184..43bd45ecd 100644 --- a/src/zcash/Address.cpp +++ b/src/zcash/Address.cpp @@ -65,13 +65,17 @@ SaplingSpendingKey SaplingSpendingKey::random() { return SaplingSpendingKey(random_uint256()); } -SaplingPaymentAddress SaplingIncomingViewingKey::address(diversifier_t d) const { +boost::optional SaplingIncomingViewingKey::address(diversifier_t d) const { uint256 pk_d; - librustzcash_ivk_to_pkd(this->begin(), d.data(), pk_d.begin()); - return SaplingPaymentAddress(d, pk_d); + if (librustzcash_check_diversifier(d.data())) { + librustzcash_ivk_to_pkd(this->begin(), d.data(), pk_d.begin()); + return SaplingPaymentAddress(d, pk_d); + } else { + return boost::none; + } } -SaplingPaymentAddress SaplingSpendingKey::default_address() const { +boost::optional SaplingSpendingKey::default_address() const { return full_viewing_key().in_viewing_key().address(default_diversifier(*this)); } diff --git a/src/zcash/Address.hpp b/src/zcash/Address.hpp index 5d0a33cbf..6b8c310f4 100644 --- a/src/zcash/Address.hpp +++ b/src/zcash/Address.hpp @@ -131,7 +131,7 @@ public: SaplingIncomingViewingKey(uint256 ivk) : uint256(ivk) { } // Can pass in diversifier for Sapling addr - SaplingPaymentAddress address(diversifier_t d) const; + boost::optional address(diversifier_t d) const; }; class SaplingFullViewingKey { @@ -206,7 +206,7 @@ public: SaplingFullViewingKey full_viewing_key() const; // Can derive Sapling addr from default diversifier - SaplingPaymentAddress default_address() const; + boost::optional default_address() const; }; }