mirror of
https://github.com/XRPLF/rippled.git
synced 2025-12-02 17:06:00 +00:00
Merge branch 'master' of github.com:jedmccaleb/NewCoin
This commit is contained in:
@@ -861,9 +861,11 @@ Json::Value Ledger::getJson(int options)
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ledger["closed"] = false;
|
||||
}
|
||||
|
||||
if (mTransactionMap && (bFull || ((options & LEDGER_JSON_DUMP_TXRP) != 0)))
|
||||
if (mTransactionMap && (bFull || isSetBit(options, LEDGER_JSON_DUMP_TXRP)))
|
||||
{
|
||||
Json::Value txns(Json::arrayValue);
|
||||
SHAMapTreeNode::TNType type;
|
||||
@@ -871,7 +873,7 @@ Json::Value Ledger::getJson(int options)
|
||||
for (SHAMapItem::pointer item = mTransactionMap->peekFirstItem(type); !!item;
|
||||
item = mTransactionMap->peekNextItem(item->getTag(), type))
|
||||
{
|
||||
if (bFull)
|
||||
if (bFull || isSetBit(options, LEDGER_JSON_EXPAND))
|
||||
{
|
||||
if (type == SHAMapTreeNode::tnTRANSACTION_NM)
|
||||
{
|
||||
@@ -904,14 +906,14 @@ Json::Value Ledger::getJson(int options)
|
||||
ledger["transactions"] = txns;
|
||||
}
|
||||
|
||||
if (mAccountStateMap && (bFull || ((options & LEDGER_JSON_DUMP_STATE) != 0)))
|
||||
if (mAccountStateMap && (bFull || isSetBit(options, LEDGER_JSON_DUMP_STATE)))
|
||||
{
|
||||
Json::Value state(Json::arrayValue);
|
||||
ScopedLock l(mAccountStateMap->Lock());
|
||||
for (SHAMapItem::pointer item = mAccountStateMap->peekFirstItem(); !!item;
|
||||
item = mAccountStateMap->peekNextItem(item->getTag()))
|
||||
{
|
||||
if (bFull)
|
||||
if (bFull || isSetBit(options, LEDGER_JSON_EXPAND))
|
||||
{
|
||||
SerializerIterator sit(item->peekSerializer());
|
||||
SerializedLedgerEntry sle(sit, item->getTag());
|
||||
|
||||
@@ -38,7 +38,8 @@ enum LedgerStateParms
|
||||
|
||||
#define LEDGER_JSON_DUMP_TXRP 0x10000000
|
||||
#define LEDGER_JSON_DUMP_STATE 0x20000000
|
||||
#define LEDGER_JSON_FULL 0x40000000
|
||||
#define LEDGER_JSON_EXPAND 0x40000000
|
||||
#define LEDGER_JSON_FULL 0x80000000
|
||||
|
||||
DEFINE_INSTANCE(Ledger);
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
SETUP_LOG();
|
||||
|
||||
static const int rpcCOST_DEFAULT = 10;
|
||||
static const int rpcCOST_DEFAULT = 10;
|
||||
static const int rpcCOST_EXCEPTION = 20;
|
||||
static const int rpcCOST_EXPENSIVE = 50;
|
||||
|
||||
@@ -1617,7 +1617,7 @@ Json::Value RPCHandler::doLedgerCurrent(Json::Value, int& cost)
|
||||
// }
|
||||
Json::Value RPCHandler::doLedger(Json::Value jvRequest, int& cost)
|
||||
{
|
||||
if (!jvRequest.isMember("ledger"))
|
||||
if (!jvRequest.isMember("ledger") && !jvRequest.isMember("ledger_hash") && !jvRequest.isMember("ledger_index"))
|
||||
{
|
||||
Json::Value ret(Json::objectValue), current(Json::objectValue), closed(Json::objectValue);
|
||||
|
||||
@@ -1630,27 +1630,25 @@ Json::Value RPCHandler::doLedger(Json::Value jvRequest, int& cost)
|
||||
return ret;
|
||||
}
|
||||
|
||||
std::string strLedger = jvRequest["ledger"].asString();
|
||||
Ledger::pointer ledger;
|
||||
Ledger::pointer lpLedger;
|
||||
Json::Value jvResult = lookupLedger(jvRequest, lpLedger);
|
||||
|
||||
if (strLedger == "current")
|
||||
ledger = theApp->getLedgerMaster().getCurrentLedger();
|
||||
else if (strLedger == "closed")
|
||||
ledger = theApp->getLedgerMaster().getClosedLedger();
|
||||
else if (strLedger.size() > 12)
|
||||
ledger = theApp->getLedgerMaster().getLedgerByHash(uint256(strLedger));
|
||||
else
|
||||
ledger = theApp->getOPs().getLedgerBySeq(jvRequest["ledger"].asUInt());
|
||||
if (!lpLedger)
|
||||
return jvResult;
|
||||
|
||||
if (!ledger)
|
||||
return rpcError(rpcLGR_NOT_FOUND);
|
||||
|
||||
bool full = jvRequest.isMember("full") && jvRequest["full"].asBool();
|
||||
bool bFull = jvRequest.isMember("full") && jvRequest["full"].asBool();
|
||||
bool bTransactions = jvRequest.isMember("transactions") && jvRequest["transactions"].asBool();
|
||||
bool bAccounts = jvRequest.isMember("accounts") && jvRequest["accounts"].asBool();
|
||||
bool bExpand = jvRequest.isMember("expand") && jvRequest["expand"].asBool();
|
||||
int iOptions = (bFull ? LEDGER_JSON_FULL : 0)
|
||||
| (bExpand ? LEDGER_JSON_EXPAND : 0)
|
||||
| (bTransactions ? LEDGER_JSON_DUMP_TXRP : 0)
|
||||
| (bAccounts ? LEDGER_JSON_DUMP_STATE : 0);
|
||||
|
||||
Json::Value ret(Json::objectValue);
|
||||
|
||||
ScopedUnlock(theApp->getMasterLock());
|
||||
ledger->addJson(ret, full ? LEDGER_JSON_FULL : 0);
|
||||
lpLedger->addJson(ret, iOptions);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -2260,8 +2258,44 @@ Json::Value RPCHandler::lookupLedger(Json::Value jvRequest, Ledger::pointer& lpL
|
||||
{
|
||||
Json::Value jvResult;
|
||||
|
||||
uint256 uLedger = jvRequest.isMember("ledger_hash") ? uint256(jvRequest["ledger_hash"].asString()) : 0;
|
||||
int32 iLedgerIndex = jvRequest.isMember("ledger_index") && jvRequest["ledger_index"].isNumeric() ? jvRequest["ledger_index"].asInt() : -2;
|
||||
uint256 uLedger = jvRequest.isMember("ledger_hash") ? uint256(jvRequest["ledger_hash"].asString()) : 0;
|
||||
int32 iLedgerIndex = jvRequest.isMember("ledger_index") && jvRequest["ledger_index"].isNumeric() ? jvRequest["ledger_index"].asInt() : LEDGER_CURRENT;
|
||||
|
||||
std::string strLedger;
|
||||
|
||||
if (jvRequest.isMember("ledger_index") && !jvRequest["ledger_index"].isNumeric())
|
||||
strLedger = jvRequest["ledger_index"].asString();
|
||||
|
||||
// Support for DEPRECATED "ledger".
|
||||
if (!jvRequest.isMember("ledger"))
|
||||
{
|
||||
nothing();
|
||||
}
|
||||
else if (jvRequest["ledger"].size() > 12)
|
||||
{
|
||||
uLedger = uint256(jvRequest["ledger"].asString());
|
||||
}
|
||||
else if (jvRequest["ledger"].isNumeric())
|
||||
{
|
||||
iLedgerIndex = jvRequest["ledger"].asInt();
|
||||
}
|
||||
else
|
||||
{
|
||||
strLedger = jvRequest["ledger"].asString();
|
||||
}
|
||||
|
||||
if (strLedger == "current")
|
||||
{
|
||||
iLedgerIndex = LEDGER_CURRENT;
|
||||
}
|
||||
else if (strLedger == "closed")
|
||||
{
|
||||
iLedgerIndex = LEDGER_CLOSED;
|
||||
}
|
||||
else if (strLedger == "validated")
|
||||
{
|
||||
iLedgerIndex = LEDGER_VALIDATED;
|
||||
}
|
||||
|
||||
if (!!uLedger)
|
||||
{
|
||||
@@ -2277,21 +2311,22 @@ Json::Value RPCHandler::lookupLedger(Json::Value jvRequest, Ledger::pointer& lpL
|
||||
|
||||
iLedgerIndex = lpLedger->getLedgerSeq(); // Set the current index, override if needed.
|
||||
}
|
||||
if (-1 == iLedgerIndex)
|
||||
{
|
||||
lpLedger = theApp->getLedgerMaster().getClosedLedger();
|
||||
iLedgerIndex = lpLedger->getLedgerSeq();
|
||||
}
|
||||
if (-2 == iLedgerIndex)
|
||||
{
|
||||
// Default to current ledger.
|
||||
|
||||
switch (iLedgerIndex) {
|
||||
case LEDGER_CURRENT:
|
||||
lpLedger = mNetOps->getCurrentLedger();
|
||||
iLedgerIndex = lpLedger->getLedgerSeq();
|
||||
}
|
||||
if (-3 == iLedgerIndex)
|
||||
{ // Last fully-validated ledger
|
||||
break;
|
||||
|
||||
case LEDGER_CLOSED:
|
||||
lpLedger = theApp->getLedgerMaster().getClosedLedger();
|
||||
iLedgerIndex = lpLedger->getLedgerSeq();
|
||||
break;
|
||||
|
||||
case LEDGER_VALIDATED:
|
||||
lpLedger = mNetOps->getValidatedLedger();
|
||||
iLedgerIndex = lpLedger->getLedgerSeq();
|
||||
iLedgerIndex = lpLedger->getLedgerSeq();
|
||||
break;
|
||||
}
|
||||
|
||||
if (iLedgerIndex <= 0)
|
||||
|
||||
@@ -9,6 +9,10 @@
|
||||
#include "SerializedTypes.h"
|
||||
#include "Ledger.h"
|
||||
|
||||
#define LEDGER_CURRENT -1
|
||||
#define LEDGER_CLOSED -2
|
||||
#define LEDGER_VALIDATED -3
|
||||
|
||||
// used by the RPCServer or WSDoor to carry out these RPC commands
|
||||
class NetworkOPs;
|
||||
class InfoSub;
|
||||
|
||||
@@ -93,14 +93,14 @@ Request.prototype.ledger_index = function (ledger_index) {
|
||||
};
|
||||
|
||||
Request.prototype.ledger_select = function (ledger_spec) {
|
||||
if (ledger_spec === 'closed') {
|
||||
this.message.ledger_index = -1;
|
||||
if (ledger_spec === 'current') {
|
||||
this.message.ledger_index = ledger_spec;
|
||||
|
||||
} else if (ledger_spec === 'current') {
|
||||
this.message.ledger_index = -2;
|
||||
} else if (ledger_spec === 'closed') {
|
||||
this.message.ledger_index = ledger_spec;
|
||||
|
||||
} else if (ledger_spec === 'verified') {
|
||||
this.message.ledger_index = -3;
|
||||
this.message.ledger_index = ledger_spec;
|
||||
|
||||
} else if (String(ledger_spec).length > 12) { // XXX Better test needed
|
||||
this.message.ledger_hash = ledger_spec;
|
||||
@@ -727,16 +727,37 @@ Remote.prototype.request_server_info = function () {
|
||||
|
||||
// XXX This is a bad command. Some varients don't scale.
|
||||
// XXX Require the server to be trusted.
|
||||
Remote.prototype.request_ledger = function (ledger, full) {
|
||||
Remote.prototype.request_ledger = function (ledger, opts) {
|
||||
//utils.assert(this.trusted);
|
||||
|
||||
var request = new Request(this, 'ledger');
|
||||
|
||||
if (ledger)
|
||||
{
|
||||
// DEPRECATED: use .ledger_hash() or .ledger_index()
|
||||
console.log("request_ledger: ledger parameter is deprecated");
|
||||
request.message.ledger = ledger;
|
||||
}
|
||||
|
||||
if (full)
|
||||
if ('object' == typeof opts) {
|
||||
if (opts.full)
|
||||
request.message.full = true;
|
||||
|
||||
if (opts.expand)
|
||||
request.message.expand = true;
|
||||
|
||||
if (opts.transactions)
|
||||
request.message.transactions = true;
|
||||
|
||||
if (opts.accounts)
|
||||
request.message.accounts = true;
|
||||
}
|
||||
// DEPRECATED:
|
||||
else if (opts)
|
||||
{
|
||||
console.log("request_ledger: full parameter is deprecated");
|
||||
request.message.full = true;
|
||||
}
|
||||
|
||||
return request;
|
||||
};
|
||||
@@ -971,17 +992,6 @@ Remote.prototype.request_book_offers = function (gets, pays, taker) {
|
||||
return request;
|
||||
};
|
||||
|
||||
Remote.prototype.request_ledger = function (ledger, full) {
|
||||
var request = new Request(this, 'ledger');
|
||||
|
||||
request.message.ledger = ledger;
|
||||
|
||||
if (full)
|
||||
request.message.full = true;
|
||||
|
||||
return request;
|
||||
};
|
||||
|
||||
Remote.prototype.request_wallet_accounts = function (seed) {
|
||||
utils.assert(this.trusted); // Don't send secrets.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user