diff --git a/src/NetworkOPs.cpp b/src/NetworkOPs.cpp index 85508664fe..624145d92a 100644 --- a/src/NetworkOPs.cpp +++ b/src/NetworkOPs.cpp @@ -528,4 +528,12 @@ void NetworkOPs::setMode(OperatingMode om) mMode = om; } +std::vector< std::pair > + NetworkOPs::getAffectedAccounts(const NewcoinAddress& account, uint32 minLedger, uint32 maxLedger) +{ + // WRITEME + std::vector< std::pair > affectedAccounts; + return affectedAccounts; +} + // vim:ts=4 diff --git a/src/NetworkOPs.h b/src/NetworkOPs.h index 005ef02a97..1dddca15e4 100644 --- a/src/NetworkOPs.h +++ b/src/NetworkOPs.h @@ -125,6 +125,10 @@ public: int beginConsensus(Ledger::pointer closingLedger); void endConsensus(); void setStateTimer(int seconds); + + // client information retrieval functions + std::vector< std::pair > + getAffectedAccounts(const NewcoinAddress& account, uint32 minLedger, uint32 maxLedger); }; #endif diff --git a/src/RPCServer.cpp b/src/RPCServer.cpp index 6ba9ad38d4..b09f4d987f 100644 --- a/src/RPCServer.cpp +++ b/src/RPCServer.cpp @@ -319,7 +319,7 @@ Json::Value RPCServer::accountFromString(const uint256& uLedger, NewcoinAddress& naRegular0Public.setAccountPublic(naGenerator, 0); naRegular0Private.setAccountPrivate(naGenerator, naSeed, 0); - uint160 uGeneratorID = naRegular0Public.getAccountID(); +// uint160 uGeneratorID = naRegular0Public.getAccountID(); SLE::pointer sleGen = mNetOps->getGenerator(uLedger, naRegular0Public.getAccountID()); if (!sleGen) { @@ -1145,7 +1145,7 @@ Json::Value RPCServer::doPasswordSet(Json::Value& params) naRegular0Private.setAccountPrivate(naRegularGenerator, naRegularSeed, 0); // Hash of regular account #0 public key. - uint160 uGeneratorID = naRegular0Public.getAccountID(); +// uint160 uGeneratorID = naRegular0Public.getAccountID(); std::vector vucGeneratorCipher = naRegular0Private.accountPrivateEncrypt(naRegular0Public, naMasterGenerator.getFamilyGenerator()); std::vector vucGeneratorSig; @@ -1418,7 +1418,7 @@ Json::Value RPCServer::doLedger(Json::Value& params) { return "invalid params"; } - else if (!mNetOps->available()) + if (!mNetOps->available()) { return JSONRPCError(503, "network not available"); } @@ -1464,6 +1464,59 @@ Json::Value RPCServer::doLedger(Json::Value& params) return ret; } +// account_tx +// account_tx +Json::Value RPCServer::doAccountTransactions(Json::Value& params) +{ + std::string param; + uint32 minLedger, maxLedger; + + if ((params.size() < 2) || (params.size() > 3) || !extractString(param, params, 0)) + return "invalid params"; + + if (!mNetOps->available()) + { + return JSONRPCError(503, "network not available"); + } + + NewcoinAddress account; + if (!account.setAccountID(param)) + return JSONRPCError(500, "invalid account"); + + if (!extractString(param, params, 1)) + minLedger = boost::lexical_cast(param); + + if ((params.size() == 3) && extractString(param, params, 2)) + maxLedger = boost::lexical_cast(param); + else + maxLedger = minLedger; + + if ((maxLedger < minLedger) || (minLedger == 0) || (maxLedger == 0)) + return JSONRPCError(500, "invalid ledger indexes"); + + try + { + std::vector< std::pair > txns = + mNetOps->getAffectedAccounts(account, minLedger, maxLedger); + Json::Value ret(Json::objectValue); + ret["Account"] = account.humanAccountID(); + Json::Value jtxns(Json::arrayValue); + for (std::vector< std::pair >::iterator it = txns.begin(), + end = txns.end(); it != end; ++it) + { + Json::Value txn = it->second->getJson(0); + txn["InLedger"] = it->first; + jtxns.append(txn); + } + ret["Transactions"] = jtxns; + return ret; + } + catch (...) + { + return JSONRPCError(500, "internal error"); + } +} + // unl_add | [] Json::Value RPCServer::doUnlAdd(Json::Value& params) { @@ -2143,13 +2196,13 @@ Json::Value RPCServer::doCommand(const std::string& command, Json::Value& params if (command == "wallet_propose") return doWalletPropose(params); if (command == "wallet_seed") return doWalletSeed(params); - if (command=="ledger") return doLedger(params); - + if (command == "ledger") return doLedger(params); + if (command == "account_tx") return doAccountTransactions(params); // // Obsolete or need rewrite: // - if (command=="tx") return doTx(params); + if (command == "tx") return doTx(params); return "unknown command"; } diff --git a/src/RPCServer.h b/src/RPCServer.h index 4af47f84d4..5a2af47d8c 100644 --- a/src/RPCServer.h +++ b/src/RPCServer.h @@ -91,6 +91,8 @@ private: Json::Value doWalletUnlock(Json::Value& params); Json::Value doWalletVerify(Json::Value& params); + Json::Value doAccountTransactions(Json::Value& params); + void validatorsResponse(const boost::system::error_code& err, std::string strResponse); public: