Browse Source

Refactor RPC payload generation

pull/99/head
Duke Leto 5 years ago
parent
commit
b5972c6e44
  1. 2
      src/connection.cpp
  2. 109
      src/rpc.cpp
  3. 2
      src/rpc.h

2
src/connection.cpp

@ -720,7 +720,7 @@ void Connection::doRPC(const json& payload, const std::function<void(json)>& cb,
return; return;
} }
qDebug() << "RPC: " << QString::fromStdString(payload["method"]) << " " << QString::fromStdString(payload.dump()); qDebug() << "RPC:" << QString::fromStdString(payload["method"]) << QString::fromStdString(payload.dump());
QNetworkReply *reply = restclient->post(*request, QByteArray::fromStdString(payload.dump())); QNetworkReply *reply = restclient->post(*request, QByteArray::fromStdString(payload.dump()));

109
src/rpc.cpp

@ -104,25 +104,34 @@ void RPC::setConnection(Connection* c) {
refresh(true); refresh(true);
} }
void RPC::getTAddresses(const std::function<void(json)>& cb) { json RPC::makePayload(std::string method, std::string params) {
json payload = { json payload = {
{"jsonrpc", "1.0"}, {"jsonrpc", "1.0"},
{"id", "someid"}, {"id", "42" },
{"method", "getaddressesbyaccount"}, {"method", method },
{"params", {""}} {"params", {params}}
}; };
return payload;
conn->doRPCWithDefaultErrorHandling(payload, cb);
} }
void RPC::getZAddresses(const std::function<void(json)>& cb) { json RPC::makePayload(std::string method) {
json payload = { json payload = {
{"jsonrpc", "1.0"}, {"jsonrpc", "1.0"},
{"id", "someid"}, {"id", "42" },
{"method", "z_listaddresses"}, {"method", method },
}; };
return payload;
}
conn->doRPCWithDefaultErrorHandling(payload, cb); void RPC::getTAddresses(const std::function<void(json)>& cb) {
std::string method = "getaddressesbyaccount";
std::string params = "";
conn->doRPCWithDefaultErrorHandling(makePayload(method, std::string("")), cb);
}
void RPC::getZAddresses(const std::function<void(json)>& cb) {
std::string method = "z_listaddresses";
conn->doRPCWithDefaultErrorHandling(makePayload(method), cb);
} }
void RPC::getTransparentUnspent(const std::function<void(json)>& cb) { void RPC::getTransparentUnspent(const std::function<void(json)>& cb) {
@ -159,35 +168,19 @@ void RPC::newZaddr(bool sapling, const std::function<void(json)>& cb) {
} }
void RPC::newTaddr(const std::function<void(json)>& cb) { void RPC::newTaddr(const std::function<void(json)>& cb) {
json payload = {
{"jsonrpc", "1.0"},
{"id", "someid"},
{"method", "getnewaddress"},
};
conn->doRPCWithDefaultErrorHandling(payload, cb); std::string method = "getnewaddress";
conn->doRPCWithDefaultErrorHandling(makePayload(method), cb);
} }
void RPC::getZPrivKey(QString addr, const std::function<void(json)>& cb) { void RPC::getZPrivKey(QString addr, const std::function<void(json)>& cb) {
json payload = { std::string method = "z_exportkey";
{"jsonrpc", "1.0"}, conn->doRPCWithDefaultErrorHandling(makePayload(method, addr.toStdString()), cb);
{"id", "someid"},
{"method", "z_exportkey"},
{"params", { addr.toStdString() }},
};
conn->doRPCWithDefaultErrorHandling(payload, cb);
} }
void RPC::getTPrivKey(QString addr, const std::function<void(json)>& cb) { void RPC::getTPrivKey(QString addr, const std::function<void(json)>& cb) {
json payload = { std::string method = "dumpprivkey";
{"jsonrpc", "1.0"}, conn->doRPCWithDefaultErrorHandling(makePayload(method, addr.toStdString()), cb);
{"id", "someid"},
{"method", "dumpprivkey"},
{"params", { addr.toStdString() }},
};
conn->doRPCWithDefaultErrorHandling(payload, cb);
} }
void RPC::importZPrivKey(QString privkey, bool rescan, const std::function<void(json)>& cb) { void RPC::importZPrivKey(QString privkey, bool rescan, const std::function<void(json)>& cb) {
@ -232,15 +225,7 @@ void RPC::importTPrivKey(QString privkey, bool rescan, const std::function<void(
void RPC::validateAddress(QString address, const std::function<void(json)>& cb) { void RPC::validateAddress(QString address, const std::function<void(json)>& cb) {
QString method = address.startsWith("z") ? "z_validateaddress" : "validateaddress"; QString method = address.startsWith("z") ? "z_validateaddress" : "validateaddress";
conn->doRPCWithDefaultErrorHandling(makePayload(method.toStdString(), address.toStdString()), cb);
json payload = {
{"jsonrpc", "1.0"},
{"id", "someid"},
{"method", method.toStdString() },
{"params", { address.toStdString() } },
};
conn->doRPCWithDefaultErrorHandling(payload, cb);
} }
void RPC::getBalance(const std::function<void(json)>& cb) { void RPC::getBalance(const std::function<void(json)>& cb) {
@ -255,13 +240,8 @@ void RPC::getBalance(const std::function<void(json)>& cb) {
} }
void RPC::getTransactions(const std::function<void(json)>& cb) { void RPC::getTransactions(const std::function<void(json)>& cb) {
json payload = { std::string method = "listtransactions";
{"jsonrpc", "1.0"}, conn->doRPCWithDefaultErrorHandling(makePayload(method), cb);
{"id", "someid"},
{"method", "listtransactions"}
};
conn->doRPCWithDefaultErrorHandling(payload, cb);
} }
void RPC::sendZTransaction(json params, const std::function<void(json)>& cb, void RPC::sendZTransaction(json params, const std::function<void(json)>& cb,
@ -565,14 +545,9 @@ void RPC::getInfoThenRefresh(bool force) {
if (conn == nullptr) if (conn == nullptr)
return noConnection(); return noConnection();
json payload = {
{"jsonrpc", "1.0"},
{"id", "someid"},
{"method", "getinfo"}
};
static bool prevCallSucceeded = false; static bool prevCallSucceeded = false;
conn->doRPC(payload, [=] (const json& reply) { std::string method = "getinfo";
conn->doRPC(makePayload(method), [=] (const json& reply) {
prevCallSucceeded = true; prevCallSucceeded = true;
// Testnet? // Testnet?
if (!reply["testnet"].is_null()) { if (!reply["testnet"].is_null()) {
@ -640,7 +615,8 @@ void RPC::getInfoThenRefresh(bool force) {
{"method", "getnetworksolps"} {"method", "getnetworksolps"}
}; };
conn->doRPCIgnoreError(payload, [=](const json& reply) { std::string method = "getnetworksolps";
conn->doRPCIgnoreError(makePayload(method), [=](const json& reply) {
qint64 solrate = reply.get<json::number_unsigned_t>(); qint64 solrate = reply.get<json::number_unsigned_t>();
ui->numconnections->setText(QString::number(connections)); ui->numconnections->setText(QString::number(connections));
@ -662,13 +638,9 @@ void RPC::getInfoThenRefresh(bool force) {
ui->localservices->setText(localservices); ui->localservices->setText(localservices);
}); });
payload = {
{"jsonrpc", "1.0"},
{"id", "someid"},
{"method", "getwalletinfo"}
};
conn->doRPCIgnoreError(payload, [=](const json& reply) { std::string method2 = "getwalletinfo";
conn->doRPCIgnoreError(makePayload(method2), [=](const json& reply) {
int txcount = reply["txcount"].get<json::number_integer_t>(); int txcount = reply["txcount"].get<json::number_integer_t>();
ui->txcount->setText(QString::number(txcount)); ui->txcount->setText(QString::number(txcount));
}); });
@ -1185,13 +1157,8 @@ void RPC::shutdownZcashd() {
return; return;
} }
json payload = { std::string method = "stop";
{"jsonrpc", "1.0"}, conn->doRPCWithDefaultErrorHandling(makePayload(method), [=](auto) {});
{"id", "someid"},
{"method", "stop"}
};
conn->doRPCWithDefaultErrorHandling(payload, [=](auto) {});
conn->shutdown(); conn->shutdown();
QDialog d(main); QDialog d(main);
@ -1199,8 +1166,8 @@ void RPC::shutdownZcashd() {
Ui_ConnectionDialog connD; Ui_ConnectionDialog connD;
connD.setupUi(&d); connD.setupUi(&d);
connD.topIcon->setBasePixmap(QIcon(":/icons/res/icon.ico").pixmap(256, 256)); connD.topIcon->setBasePixmap(QIcon(":/icons/res/icon.ico").pixmap(256, 256));
connD.status->setText(QObject::tr("Please wait for SilentDragon to exit")); connD.status->setText(QObject::tr("Please enhance your calm and wait for SilentDragon to exit"));
connD.statusDetail->setText(QObject::tr("Waiting for hushd to exit")); connD.statusDetail->setText(QObject::tr("Waiting for hushd to exit, y'all"));
QTimer waiter(main); QTimer waiter(main);

2
src/rpc.h

@ -102,6 +102,8 @@ private:
void getInfoThenRefresh(bool force); void getInfoThenRefresh(bool force);
void getBalance(const std::function<void(json)>& cb); void getBalance(const std::function<void(json)>& cb);
json makePayload(std::string method, std::string params);
json makePayload(std::string method);
void getTransparentUnspent (const std::function<void(json)>& cb); void getTransparentUnspent (const std::function<void(json)>& cb);
void getZUnspent (const std::function<void(json)>& cb); void getZUnspent (const std::function<void(json)>& cb);

Loading…
Cancel
Save