mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-25 13:35:54 +00:00
Refactor RPC ledger.
This commit is contained in:
@@ -131,6 +131,31 @@ Json::Value RPCParser::parseEvented(const Json::Value& jvParams)
|
|||||||
return rpcError(rpcNO_EVENTS);
|
return rpcError(rpcNO_EVENTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ledger [id|ledger_current|ledger_closed] [full]
|
||||||
|
Json::Value RPCParser::parseLedger(const Json::Value& jvParams)
|
||||||
|
{
|
||||||
|
Json::Value jvRequest(Json::objectValue);
|
||||||
|
|
||||||
|
if (!jvParams.size())
|
||||||
|
{
|
||||||
|
return jvRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string strLedger = jvParams[0u].asString();
|
||||||
|
|
||||||
|
if (strLedger == "current" || strLedger == "ledger_closed" || strLedger.length() > 12)
|
||||||
|
jvRequest["ledger"] = strLedger;
|
||||||
|
else
|
||||||
|
jvRequest["ledger"] = lexical_cast_s<uint32>(strLedger);
|
||||||
|
|
||||||
|
if (2 == jvParams.size() && jvParams[1u].asString() == "full")
|
||||||
|
{
|
||||||
|
jvRequest["full"] = bool(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return jvRequest;
|
||||||
|
}
|
||||||
|
|
||||||
// submit any transaction to the network
|
// submit any transaction to the network
|
||||||
// submit private_key json
|
// submit private_key json
|
||||||
Json::Value RPCParser::parseSubmit(const Json::Value& jvParams)
|
Json::Value RPCParser::parseSubmit(const Json::Value& jvParams)
|
||||||
@@ -211,7 +236,7 @@ Json::Value RPCParser::parseCommand(std::string strMethod, Json::Value jvParams)
|
|||||||
// { "data_fetch", &RPCParser::doDataFetch, 1, 1, true, false, optNone },
|
// { "data_fetch", &RPCParser::doDataFetch, 1, 1, true, false, optNone },
|
||||||
// { "data_store", &RPCParser::doDataStore, 2, 2, true, false, optNone },
|
// { "data_store", &RPCParser::doDataStore, 2, 2, true, false, optNone },
|
||||||
// { "get_counts", &RPCParser::doGetCounts, 0, 1, true, false, optNone },
|
// { "get_counts", &RPCParser::doGetCounts, 0, 1, true, false, optNone },
|
||||||
// { "ledger", &RPCParser::doLedger, 0, 2, false, false, optNetwork },
|
{ "ledger", &RPCParser::parseLedger, 0, 2 },
|
||||||
{ "ledger_accept", &RPCParser::parseAsIs, 0, 0 },
|
{ "ledger_accept", &RPCParser::parseAsIs, 0, 0 },
|
||||||
{ "ledger_closed", &RPCParser::parseAsIs, 0, 0 },
|
{ "ledger_closed", &RPCParser::parseAsIs, 0, 0 },
|
||||||
{ "ledger_current", &RPCParser::parseAsIs, 0, 0 },
|
{ "ledger_current", &RPCParser::parseAsIs, 0, 0 },
|
||||||
@@ -266,6 +291,10 @@ Json::Value RPCParser::parseCommand(std::string strMethod, Json::Value jvParams)
|
|||||||
else if ((commandsA[i].iMinParams >= 0 && jvParams.size() < commandsA[i].iMinParams)
|
else if ((commandsA[i].iMinParams >= 0 && jvParams.size() < commandsA[i].iMinParams)
|
||||||
|| (commandsA[i].iMaxParams >= 0 && jvParams.size() > commandsA[i].iMaxParams))
|
|| (commandsA[i].iMaxParams >= 0 && jvParams.size() > commandsA[i].iMaxParams))
|
||||||
{
|
{
|
||||||
|
cLog(lsWARNING) << "Wrong number of parameters: minimum=" << commandsA[i].iMinParams
|
||||||
|
<< " maximum=" << commandsA[i].iMaxParams
|
||||||
|
<< " actual=" << jvParams.size();
|
||||||
|
|
||||||
return rpcError(rpcBAD_SYNTAX);
|
return rpcError(rpcBAD_SYNTAX);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,10 +15,9 @@ protected:
|
|||||||
Json::Value parseAccountInfo(const Json::Value& jvParams);
|
Json::Value parseAccountInfo(const Json::Value& jvParams);
|
||||||
Json::Value parseAccountTransactions(const Json::Value& jvParams);
|
Json::Value parseAccountTransactions(const Json::Value& jvParams);
|
||||||
Json::Value parseConnect(const Json::Value& jvParams);
|
Json::Value parseConnect(const Json::Value& jvParams);
|
||||||
|
|
||||||
Json::Value parseSubmit(const Json::Value& jvParams);
|
|
||||||
Json::Value parseEvented(const Json::Value& jvParams);
|
Json::Value parseEvented(const Json::Value& jvParams);
|
||||||
|
Json::Value parseLedger(const Json::Value& jvParams);
|
||||||
|
Json::Value parseSubmit(const Json::Value& jvParams);
|
||||||
Json::Value parseUnlAdd(const Json::Value& jvParams);
|
Json::Value parseUnlAdd(const Json::Value& jvParams);
|
||||||
Json::Value parseUnlDelete(const Json::Value& jvParams);
|
Json::Value parseUnlDelete(const Json::Value& jvParams);
|
||||||
|
|
||||||
|
|||||||
@@ -1131,41 +1131,47 @@ Json::Value RPCHandler::doLedgerCurrent(Json::Value)
|
|||||||
return jvResult;
|
return jvResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ledger [id|current|lastclosed] [full]
|
// ledger [id|ledger_current|lastclosed] [full]
|
||||||
Json::Value RPCHandler::doLedger(Json::Value params)
|
// {
|
||||||
|
// ledger: 'ledger_current' | 'ledger_closed' | <hex> | <number>, // optional
|
||||||
|
// full: true | false // optional, defaults to false.
|
||||||
|
// }
|
||||||
|
Json::Value RPCHandler::doLedger(Json::Value jvParams)
|
||||||
{
|
{
|
||||||
if (getParamCount(params) == 0)
|
if (!jvParams.isMember("ledger"))
|
||||||
{
|
{
|
||||||
Json::Value ret(Json::objectValue), current(Json::objectValue), closed(Json::objectValue);
|
Json::Value ret(Json::objectValue), current(Json::objectValue), closed(Json::objectValue);
|
||||||
|
|
||||||
theApp->getLedgerMaster().getCurrentLedger()->addJson(current, 0);
|
theApp->getLedgerMaster().getCurrentLedger()->addJson(current, 0);
|
||||||
theApp->getLedgerMaster().getClosedLedger()->addJson(closed, 0);
|
theApp->getLedgerMaster().getClosedLedger()->addJson(closed, 0);
|
||||||
|
|
||||||
ret["open"] = current;
|
ret["open"] = current;
|
||||||
ret["closed"] = closed;
|
ret["closed"] = closed;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string param;
|
std::string strLedger = jvParams["ledger"].asString();
|
||||||
if (!extractString(param, params, 0))
|
|
||||||
{
|
|
||||||
return "bad params";
|
|
||||||
}
|
|
||||||
|
|
||||||
Ledger::pointer ledger;
|
Ledger::pointer ledger;
|
||||||
if (param == "current")
|
|
||||||
|
if (strLedger == "ledger_current")
|
||||||
ledger = theApp->getLedgerMaster().getCurrentLedger();
|
ledger = theApp->getLedgerMaster().getCurrentLedger();
|
||||||
else if ((param == "lastclosed") || (param == "lastaccepted"))
|
else if (strLedger == "ledger_closed")
|
||||||
ledger = theApp->getLedgerMaster().getClosedLedger();
|
ledger = theApp->getLedgerMaster().getClosedLedger();
|
||||||
else if (param.size() > 12)
|
else if (strLedger.size() > 12)
|
||||||
ledger = theApp->getLedgerMaster().getLedgerByHash(uint256(param));
|
ledger = theApp->getLedgerMaster().getLedgerByHash(uint256(strLedger));
|
||||||
else
|
else
|
||||||
ledger = theApp->getLedgerMaster().getLedgerBySeq(lexical_cast_s<uint32>(param));
|
ledger = theApp->getLedgerMaster().getLedgerBySeq(jvParams["ledger"].asUInt());
|
||||||
|
|
||||||
if (!ledger)
|
if (!ledger)
|
||||||
return rpcError(rpcLGR_NOT_FOUND);
|
return rpcError(rpcLGR_NOT_FOUND);
|
||||||
|
|
||||||
bool full = extractString(param, params, 1) && (param == "full");
|
bool full = jvParams.isMember("full") && jvParams["full"].asBool();
|
||||||
|
|
||||||
Json::Value ret(Json::objectValue);
|
Json::Value ret(Json::objectValue);
|
||||||
|
|
||||||
ledger->addJson(ret, full ? LEDGER_JSON_FULL : 0);
|
ledger->addJson(ret, full ? LEDGER_JSON_FULL : 0);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2176,7 +2182,7 @@ Json::Value RPCHandler::doCommand(Json::Value& jvParams, int iRole)
|
|||||||
{ "data_fetch", &RPCHandler::doDataFetch, 1, 1, true, false, optNone },
|
{ "data_fetch", &RPCHandler::doDataFetch, 1, 1, true, false, optNone },
|
||||||
{ "data_store", &RPCHandler::doDataStore, 2, 2, true, false, optNone },
|
{ "data_store", &RPCHandler::doDataStore, 2, 2, true, false, optNone },
|
||||||
{ "get_counts", &RPCHandler::doGetCounts, 0, 1, true, false, optNone },
|
{ "get_counts", &RPCHandler::doGetCounts, 0, 1, true, false, optNone },
|
||||||
{ "ledger", &RPCHandler::doLedger, 0, 2, false, false, optNetwork },
|
{ "ledger", &RPCHandler::doLedger, -1, -1, false, false, optNetwork },
|
||||||
{ "ledger_accept", &RPCHandler::doLedgerAccept, -1, -1, true, false, optCurrent },
|
{ "ledger_accept", &RPCHandler::doLedgerAccept, -1, -1, true, false, optCurrent },
|
||||||
{ "ledger_closed", &RPCHandler::doLedgerClosed, -1, -1, false, false, optClosed },
|
{ "ledger_closed", &RPCHandler::doLedgerClosed, -1, -1, false, false, optClosed },
|
||||||
{ "ledger_current", &RPCHandler::doLedgerCurrent, -1, -1, false, false, optCurrent },
|
{ "ledger_current", &RPCHandler::doLedgerCurrent, -1, -1, false, false, optCurrent },
|
||||||
|
|||||||
@@ -548,13 +548,18 @@ Remote.prototype.request_server_info = function () {
|
|||||||
return new Request(this, 'server_info');
|
return new Request(this, 'server_info');
|
||||||
};
|
};
|
||||||
|
|
||||||
Remote.prototype.request_ledger = function (params) {
|
// XXX This is a bad command. Some varients don't scale.
|
||||||
// XXX Does this require the server to be trusted?
|
// XXX Require the server to be trusted.
|
||||||
|
Remote.prototype.request_ledger = function (ledger, full) {
|
||||||
//assert(this.trusted);
|
//assert(this.trusted);
|
||||||
|
|
||||||
var request = new Request(this, 'ledger');
|
var request = new Request(this, 'ledger');
|
||||||
|
|
||||||
request.message.params = params;
|
if (ledger)
|
||||||
|
request.message.ledger = ledger;
|
||||||
|
|
||||||
|
if (full)
|
||||||
|
request.message.full = true;
|
||||||
|
|
||||||
return request;
|
return request;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user