implement z_getnotescount api call
This commit is contained in:
parent
c2a8beadec
commit
4c40f9f514
|
@ -98,6 +98,8 @@ class ListReceivedTest (BitcoinTestFramework):
|
||||||
|
|
||||||
r = self.nodes[1].z_listreceivedbyaddress(zaddr1)
|
r = self.nodes[1].z_listreceivedbyaddress(zaddr1)
|
||||||
assert_equal(0, len(r), "Should have received no confirmed note")
|
assert_equal(0, len(r), "Should have received no confirmed note")
|
||||||
|
c = self.nodes[1].z_getnotescount()
|
||||||
|
assert_equal(0, c[release], "Count of confirmed notes should be 0")
|
||||||
|
|
||||||
# No confirmation required, one note should be present
|
# No confirmation required, one note should be present
|
||||||
r = self.nodes[1].z_listreceivedbyaddress(zaddr1, 0)
|
r = self.nodes[1].z_listreceivedbyaddress(zaddr1, 0)
|
||||||
|
@ -110,6 +112,9 @@ class ListReceivedTest (BitcoinTestFramework):
|
||||||
assert_equal(-1, r[0]['blockindex'])
|
assert_equal(-1, r[0]['blockindex'])
|
||||||
assert_equal(0, r[0]['blockheight'])
|
assert_equal(0, r[0]['blockheight'])
|
||||||
|
|
||||||
|
c = self.nodes[1].z_getnotescount(0)
|
||||||
|
assert_equal(1, c[release], "Count of unconfirmed notes should be 1")
|
||||||
|
|
||||||
# Confirm transaction (1 ZEC from taddr to zaddr1)
|
# Confirm transaction (1 ZEC from taddr to zaddr1)
|
||||||
self.generate_and_sync(height+3)
|
self.generate_and_sync(height+3)
|
||||||
|
|
||||||
|
@ -215,6 +220,9 @@ class ListReceivedTest (BitcoinTestFramework):
|
||||||
assert_false(r[0]['change'], "Note valued at 0.6 should not be change")
|
assert_false(r[0]['change'], "Note valued at 0.6 should not be change")
|
||||||
assert_equal(no_memo, r[0]['memo'])
|
assert_equal(no_memo, r[0]['memo'])
|
||||||
|
|
||||||
|
c = self.nodes[1].z_getnotescount(0)
|
||||||
|
assert_equal(3, c[release], "Count of unconfirmed notes should be 3(2 in zaddr1 + 1 in zaddr2)")
|
||||||
|
|
||||||
def run_test(self):
|
def run_test(self):
|
||||||
self.run_test_release('sprout', 200)
|
self.run_test_release('sprout', 200)
|
||||||
self.run_test_release('sapling', 214)
|
self.run_test_release('sapling', 214)
|
||||||
|
|
|
@ -144,6 +144,7 @@ static const CRPCConvertParam vRPCConvertParams[] =
|
||||||
{ "z_getpaymentdisclosure", 1},
|
{ "z_getpaymentdisclosure", 1},
|
||||||
{ "z_getpaymentdisclosure", 2},
|
{ "z_getpaymentdisclosure", 2},
|
||||||
{ "z_setmigration", 0},
|
{ "z_setmigration", 0},
|
||||||
|
{ "z_getnotescount", 0},
|
||||||
};
|
};
|
||||||
|
|
||||||
class CRPCConvertTable
|
class CRPCConvertTable
|
||||||
|
|
|
@ -4967,6 +4967,49 @@ UniValue z_listoperationids(const UniValue& params, bool fHelp)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
UniValue z_getnotescount(const UniValue& params, bool fHelp)
|
||||||
|
{
|
||||||
|
if (!EnsureWalletIsAvailable(fHelp))
|
||||||
|
return NullUniValue;
|
||||||
|
|
||||||
|
if (fHelp || params.size() > 1)
|
||||||
|
throw runtime_error(
|
||||||
|
"z_getnotescount\n"
|
||||||
|
"\nArguments:\n"
|
||||||
|
"1. minconf (numeric, optional, default=1) Only include notes in transactions confirmed at least this many times.\n"
|
||||||
|
"\nReturns the number of sprout and sapling notes available in the wallet.\n"
|
||||||
|
"\nResult:\n"
|
||||||
|
"{\n"
|
||||||
|
" \"sprout\" (numeric) the number of sprout notes in the wallet\n"
|
||||||
|
" \"sapling\" (numeric) the number of sapling notes in the wallet\n"
|
||||||
|
"}\n"
|
||||||
|
"\nExamples:\n"
|
||||||
|
+ HelpExampleCli("z_getnotescount", "0")
|
||||||
|
+ HelpExampleRpc("z_getnotescount", "0")
|
||||||
|
);
|
||||||
|
|
||||||
|
LOCK2(cs_main, pwalletMain->cs_wallet);
|
||||||
|
|
||||||
|
int nMinDepth = 1;
|
||||||
|
if (params.size() > 0)
|
||||||
|
nMinDepth = params[0].get_int();
|
||||||
|
|
||||||
|
int sprout = 0;
|
||||||
|
int sapling = 0;
|
||||||
|
for (auto& wtx : pwalletMain->mapWallet) {
|
||||||
|
if (wtx.second.GetDepthInMainChain() >= nMinDepth) {
|
||||||
|
sprout += wtx.second.mapSproutNoteData.size();
|
||||||
|
sapling += wtx.second.mapSaplingNoteData.size();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
UniValue ret(UniValue::VOBJ);
|
||||||
|
ret.push_back(Pair("sprout", sprout));
|
||||||
|
ret.push_back(Pair("sapling", sapling));
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
extern UniValue dumpprivkey(const UniValue& params, bool fHelp); // in rpcdump.cpp
|
extern UniValue dumpprivkey(const UniValue& params, bool fHelp); // in rpcdump.cpp
|
||||||
extern UniValue importprivkey(const UniValue& params, bool fHelp);
|
extern UniValue importprivkey(const UniValue& params, bool fHelp);
|
||||||
extern UniValue importaddress(const UniValue& params, bool fHelp);
|
extern UniValue importaddress(const UniValue& params, bool fHelp);
|
||||||
|
@ -5054,6 +5097,7 @@ static const CRPCCommand commands[] =
|
||||||
{ "wallet", "z_exportwallet", &z_exportwallet, true },
|
{ "wallet", "z_exportwallet", &z_exportwallet, true },
|
||||||
{ "wallet", "z_importwallet", &z_importwallet, true },
|
{ "wallet", "z_importwallet", &z_importwallet, true },
|
||||||
{ "wallet", "z_viewtransaction", &z_viewtransaction, false },
|
{ "wallet", "z_viewtransaction", &z_viewtransaction, false },
|
||||||
|
{ "wallet", "z_getnotescount", &z_getnotescount, false },
|
||||||
// TODO: rearrange into another category
|
// TODO: rearrange into another category
|
||||||
{ "disclosure", "z_getpaymentdisclosure", &z_getpaymentdisclosure, true },
|
{ "disclosure", "z_getpaymentdisclosure", &z_getpaymentdisclosure, true },
|
||||||
{ "disclosure", "z_validatepaymentdisclosure", &z_validatepaymentdisclosure, true }
|
{ "disclosure", "z_validatepaymentdisclosure", &z_validatepaymentdisclosure, true }
|
||||||
|
|
Loading…
Reference in New Issue