diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index 97adc8e9f2..368f59bfeb 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -876,14 +876,15 @@ void NetworkOPs::setMode(OperatingMode om) mMode = om; } + std::vector< std::pair > - NetworkOPs::getAffectedAccounts(const RippleAddress& account, uint32 minLedger, uint32 maxLedger) + NetworkOPs::getAccountTxs(const RippleAddress& account, uint32 minLedger, uint32 maxLedger) { std::vector< std::pair > affectedAccounts; std::string sql = - str(boost::format("SELECT LedgerSeq,TransID FROM AccountTransactions INDEXED BY AcctTxIndex " - " WHERE Account = '%s' AND LedgerSeq <= '%d' AND LedgerSeq >= '%d' ORDER BY LedgerSeq LIMIT 1000;") + str(boost::format("SELECT LedgerSeq,Status,RawTxn,TxnMeta FROM Transactions where TransID in (SELECT TransID from AccountTransactions " + " WHERE Account = '%s' AND LedgerSeq <= '%d' AND LedgerSeq >= '%d' LIMIT 1000) ORDER BY LedgerSeq;") % account.humanAccountID() % maxLedger % minLedger); { @@ -892,6 +893,7 @@ std::vector< std::pair > SQL_FOREACH(db, sql) { + affectedAccounts.push_back(std::make_pair(db->getInt("LedgerSeq"), uint256(db->getStrBinary("TransID")))); } } @@ -1076,6 +1078,7 @@ Json::Value NetworkOPs::transJson(const SerializedTransaction& stTxn, TER terRes void NetworkOPs::pubAcceptedTransaction(Ledger::ref lpCurrent, const SerializedTransaction& stTxn, TER terResult,TransactionMetaSet::pointer& meta) { Json::Value jvObj = transJson(stTxn, terResult, true, lpCurrent, "transaction"); + if(meta) jvObj["meta"]=meta->getJson(0); { boost::recursive_mutex::scoped_lock sl(mMonitorLock); diff --git a/src/cpp/ripple/NetworkOPs.h b/src/cpp/ripple/NetworkOPs.h index 3878689dd8..191a21131a 100644 --- a/src/cpp/ripple/NetworkOPs.h +++ b/src/cpp/ripple/NetworkOPs.h @@ -231,7 +231,7 @@ public: // client information retrieval functions std::vector< std::pair > - getAffectedAccounts(const RippleAddress& account, uint32 minLedger, uint32 maxLedger); + getAccountTxs(const RippleAddress& account, uint32 minLedger, uint32 maxLedger); std::vector getLedgerAffectedAccounts(uint32 ledgerSeq); std::vector getLedgerTransactions(uint32 ledgerSeq); diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 1765efcdf2..22be44e000 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -1292,14 +1292,20 @@ Json::Value RPCHandler::doAccountTransactions(const Json::Value& params) try { #endif - std::vector< std::pair > txns = mNetOps->getAffectedAccounts(account, minLedger, maxLedger); + std::vector< std::pair > txns = mNetOps->getAccountTxs(account, minLedger, maxLedger); Json::Value ret(Json::objectValue); ret["account"] = account.humanAccountID(); Json::Value ledgers(Json::arrayValue); // uint32 currentLedger = 0; - for (std::vector< std::pair >::iterator it = txns.begin(), end = txns.end(); it != end; ++it) + for (std::vector< std::pair >::iterator it = txns.begin(), end = txns.end(); it != end; ++it) { + Json::objectValue obj; + obj["tx"]=it->first->getJson(1); + obj["meta"]=it->second->getJson(0); + ret["transactions"].append(obj); + + Transaction::pointer txn = theApp->getMasterTransaction().fetch(it->second, true); if (!txn) { @@ -1309,6 +1315,9 @@ Json::Value RPCHandler::doAccountTransactions(const Json::Value& params) { txn->setLedger(it->first); ret["transactions"].append(txn->getJson(1)); + + TransactionMetaSet::pointer meta = boost::make_shared( + stTxn.getTransactionID(), lpAccepted->getLedgerSeq(), it.getVL()); } }