diff --git a/src/gtest/test_keys.cpp b/src/gtest/test_keys.cpp index 74a3bb642..23ed00a65 100644 --- a/src/gtest/test_keys.cpp +++ b/src/gtest/test_keys.cpp @@ -4,7 +4,7 @@ #include -TEST(Keys, EncodeAndDecodeSapling) +TEST(Keys, DISABLED_EncodeAndDecodeSapling) { SelectParams(CBaseChainParams::MAIN); diff --git a/src/key_io.cpp b/src/key_io.cpp index f01e6d627..b129ce37b 100644 --- a/src/key_io.cpp +++ b/src/key_io.cpp @@ -286,7 +286,11 @@ libzcash::PaymentAddress DecodePaymentAddress(const std::string& str) } data.clear(); auto bech = bech32::Decode(str); - if (bech.first == Params().Bech32HRP(CChainParams::SAPLING_PAYMENT_ADDRESS) && + bool allowSapling = Params().NetworkIDString() == "regtest" || ( + Params().NetworkIDString() == "test" && + GetBoolArg("-experimentalfeatures", false) && + GetBoolArg("-developersapling", false)); + if (allowSapling && bech.first == Params().Bech32HRP(CChainParams::SAPLING_PAYMENT_ADDRESS) && bech.second.size() == ConvertedSaplingPaymentAddressSize) { // Bech32 decoding data.reserve((bech.second.size() * 5) / 8); @@ -352,7 +356,11 @@ libzcash::SpendingKey DecodeSpendingKey(const std::string& str) } data.clear(); auto bech = bech32::Decode(str); - if (bech.first == Params().Bech32HRP(CChainParams::SAPLING_SPENDING_KEY) && + bool allowSapling = Params().NetworkIDString() == "regtest" || ( + Params().NetworkIDString() == "test" && + GetBoolArg("-experimentalfeatures", false) && + GetBoolArg("-developersapling", false)); + if (allowSapling && bech.first == Params().Bech32HRP(CChainParams::SAPLING_SPENDING_KEY) && bech.second.size() == ConvertedSaplingSpendingKeySize) { // Bech32 decoding data.reserve((bech.second.size() * 5) / 8); diff --git a/src/test/rpc_wallet_tests.cpp b/src/test/rpc_wallet_tests.cpp index 7b04b8ebd..edbcb6552 100644 --- a/src/test/rpc_wallet_tests.cpp +++ b/src/test/rpc_wallet_tests.cpp @@ -383,12 +383,13 @@ BOOST_AUTO_TEST_CASE(rpc_wallet_z_validateaddress) BOOST_CHECK_NO_THROW(retValue = CallRPC("z_validateaddress zs1z7rejlpsa98s2rrrfkwmaxu53e4ue0ulcrw0h4x5g8jl04tak0d3mm47vdtahatqrlkngh9slya")); resultObj = retValue.get_obj(); b = find_value(resultObj, "isvalid").get_bool(); - BOOST_CHECK_EQUAL(b, true); - BOOST_CHECK_EQUAL(find_value(resultObj, "type").get_str(), "sapling"); - b = find_value(resultObj, "ismine").get_bool(); + // TODO: Revert when we re-enable Sapling addresses on mainnet BOOST_CHECK_EQUAL(b, false); - BOOST_CHECK_EQUAL(find_value(resultObj, "diversifier").get_str(), "1787997c30e94f050c634d"); - BOOST_CHECK_EQUAL(find_value(resultObj, "diversifiedtransmissionkey").get_str(), "34ed1f60f5db5763beee1ddbb37dd5f7e541d4d4fbdcc09fbfcc6b8e949bbe9d"); + // BOOST_CHECK_EQUAL(find_value(resultObj, "type").get_str(), "sapling"); + // b = find_value(resultObj, "ismine").get_bool(); + // BOOST_CHECK_EQUAL(b, false); + // BOOST_CHECK_EQUAL(find_value(resultObj, "diversifier").get_str(), "1787997c30e94f050c634d"); + // BOOST_CHECK_EQUAL(find_value(resultObj, "diversifiedtransmissionkey").get_str(), "34ed1f60f5db5763beee1ddbb37dd5f7e541d4d4fbdcc09fbfcc6b8e949bbe9d"); } /* @@ -536,6 +537,8 @@ BOOST_AUTO_TEST_CASE(rpc_wallet_z_importwallet) */ BOOST_AUTO_TEST_CASE(rpc_wallet_z_importexport) { + SelectParams(CBaseChainParams::REGTEST); + LOCK2(cs_main, pwalletMain->cs_wallet); UniValue retValue; int n1 = 1000; // number of times to import/export diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 0d7861aa2..18986b0aa 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -3133,9 +3133,13 @@ UniValue z_getnewaddress(const UniValue& params, bool fHelp) addrType = params[0].get_str(); } + bool allowSapling = Params().NetworkIDString() == "regtest" || ( + Params().NetworkIDString() == "test" && + GetBoolArg("-experimentalfeatures", false) && + GetBoolArg("-developersapling", false)); if (addrType == ADDR_TYPE_SPROUT) { return EncodePaymentAddress(pwalletMain->GenerateNewZKey()); - } else if (addrType == ADDR_TYPE_SAPLING) { + } else if (addrType == ADDR_TYPE_SAPLING && allowSapling) { return EncodePaymentAddress(pwalletMain->GenerateNewSaplingZKey()); } else { throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid address type");