diff --git a/RPCServer.cpp b/RPCServer.cpp index c95947fb14..3cb1b095b5 100644 --- a/RPCServer.cpp +++ b/RPCServer.cpp @@ -400,6 +400,16 @@ Json::Value RPCServer::doTx(Json::Value& params) if(Transaction::isHexTxID(param1)) { // transaction by ID + Json::Value ret; + uint256 txid(param1); + if(theApp->getWallet().getTxJson(txid, ret)) + return ret; + + Transaction::pointer txn=theApp->getMasterLedger().getCurrentLedger()->getTransaction(txid); + if(!txn) txn=theApp->getMasterLedger().getClosingLedger()->getTransaction(txid); + if(!txn) txn=Transaction::load(txid); + if(!txn) return JSONRPCError(500, "Transaction not found"); + return txn->getJson(true); } if(extractString(param2, params, 1)) diff --git a/Wallet.cpp b/Wallet.cpp index f0e06a6490..e4504b5752 100644 --- a/Wallet.cpp +++ b/Wallet.cpp @@ -890,3 +890,12 @@ void Wallet::addLocalTransactions(Json::Value& ret) it!=mTransactions.end(); ++it) ret[it->first.GetHex()]=it->second->getJson(); } + +bool Wallet::getTxJson(const uint256& txn, Json::Value& ret) +{ + boost::recursive_mutex::scoped_lock sl(mLock); + std::map::iterator it=mTransactions.find(txn); + if(it==mTransactions.end()) return false; + ret=it->second->getJson(); + return true; +} diff --git a/Wallet.h b/Wallet.h index fc1841311b..1ddd230063 100644 --- a/Wallet.h +++ b/Wallet.h @@ -71,7 +71,9 @@ public: bool getFamilyInfo(const uint160& family, std::string& name, std::string& comment); bool getFullFamilyInfo(const uint160& family, std::string& name, std::string& comment, std::string& pubGen, bool& isLocked); + Json::Value getFamilyJson(const uint160& family); + bool getTxJson(const uint256& txid, Json::Value& value); void addLocalTransactions(Json::Value&); static bool isHexPrivateKey(const std::string&);