diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index cf25351..37bd82a 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1071,12 +1071,30 @@ void MainWindow::setupBalancesTab() { } */ + if(addr.startsWith("zs1")) { + menu.addAction(tr("Shield all non-mining taddr funds to this zaddr"), [=] () { + QJsonArray params = QJsonArray { QJsonArray { "ANY_TADDR" } , addr }; + qDebug() << "Calling mergeToAddress with params=" << params; + // TODO: call mergeToAddress and parse reply + rpc->mergeToAddress(params, [=](const QJsonValue& reply) { + qDebug() << "mergeToAddress reply=" << reply; + }, [=](QString errStr) { + qDebug() << "z_mergetoaddress pooped:" << errStr; + if(errStr == "Could not find any funds to merge.") { + ui->statusBar->showMessage("No funds found to shield!"); + } + }); + + }); + } + if(addr.startsWith("zs1")) { menu.addAction(tr("Shield all mining funds to this zaddr"), [=] () { //QJsonArray params = QJsonArray {addr, zaddresses->first() }; // We shield all coinbase funds to the selected zaddr QJsonArray params = QJsonArray {"*", addr }; + qDebug() << "Calling shieldCoinbase with params=" << params; rpc->shieldCoinbase(params, [=](const QJsonValue& reply) { QString shieldingValue = reply.toObject()["shieldingValue"].toString(); QString opid = reply.toObject()["opid"].toString(); diff --git a/src/rpc.cpp b/src/rpc.cpp index 0e938d2..61a938e 100644 --- a/src/rpc.cpp +++ b/src/rpc.cpp @@ -265,6 +265,24 @@ void RPC::getTransactions(const std::function& cb) { conn->doRPCWithDefaultErrorHandling(makePayload(method), cb); } +void RPC::mergeToAddress(QJsonArray ¶ms, const std::function& cb, + const std::function& err) { + QJsonObject payload = { + {"jsonrpc", "1.0"}, + {"id", "42"}, + {"method", "z_mergetoaddress"}, + {"params", params} + }; + + conn->doRPC(payload, cb, [=] (QNetworkReply *reply, const QJsonValue &parsed) { + if (!parsed.isUndefined() && !parsed["error"].toObject()["message"].isNull()) { + err(parsed["error"].toObject()["message"].toString()); + } else { + err(reply->errorString()); + } + }); +} + void RPC::shieldCoinbase(QJsonArray ¶ms, const std::function& cb, const std::function& err) { QJsonObject payload = { diff --git a/src/rpc.h b/src/rpc.h index 6136c79..c5ede99 100644 --- a/src/rpc.h +++ b/src/rpc.h @@ -80,6 +80,7 @@ public: void fillTxJsonParams(QJsonArray& params, Tx tx); void sendZTransaction(QJsonValue params, const std::function& cb, const std::function& err); void shieldCoinbase(QJsonArray& params, const std::function& cb, const std::function& err); + void mergeToAddress(QJsonArray& params, const std::function& cb, const std::function& err); void watchTxStatus(); const QMap getWatchingTxns() { return watchingOps; }