diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 76c9d5b3e5..dbeb9ab283 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -186,18 +186,22 @@ AccountState::pointer Ledger::getAccountState(const RippleAddress& accountID) #ifdef DEBUG // std::cerr << "Ledger:getAccountState(" << accountID.humanAccountID() << ")" << std::endl; #endif + SHAMapItem::pointer item = mAccountStateMap->peekItem(Ledger::getAccountRootIndex(accountID)); if (!item) { -#ifdef DEBUG -// std::cerr << " notfound" << std::endl; -#endif + cLog(lsDEBUG) << boost::str(boost::format("Ledger:getAccountState: not found: %s: %s") + % accountID.humanAccountID() + % Ledger::getAccountRootIndex(accountID).GetHex()); + return AccountState::pointer(); } + SerializedLedgerEntry::pointer sle = boost::make_shared(item->peekSerializer(), item->getTag()); if (sle->getType() != ltACCOUNT_ROOT) return AccountState::pointer(); + return boost::make_shared(sle,accountID); } diff --git a/src/cpp/ripple/RPCErr.cpp b/src/cpp/ripple/RPCErr.cpp index cbc699a4a3..61414aec3a 100644 --- a/src/cpp/ripple/RPCErr.cpp +++ b/src/cpp/ripple/RPCErr.cpp @@ -55,7 +55,8 @@ Json::Value rpcError(int iError, Json::Value jvResult) { rpcPUBLIC_MALFORMED, "publicMalformed", "Public key is malformed." }, { rpcQUALITY_MALFORMED, "qualityMalformed", "Quality malformed." }, { rpcSRC_ACT_MALFORMED, "srcActMalformed", "Source account is malformed." }, - { rpcSRC_ACT_MISSING, "srcActMissing", "Source account does not exist." }, + { rpcSRC_ACT_MISSING, "srcActMissing", "Source account not provided." }, + { rpcSRC_ACT_NOT_FOUND, "srcActNotFound", "Source amount not found." }, { rpcSRC_AMT_MALFORMED, "srcAmtMalformed", "Source amount/currency/issuer is malformed." }, { rpcSRC_UNCLAIMED, "srcUnclaimed", "Source account is not claimed." }, { rpcTXN_NOT_FOUND, "txnNotFound", "Transaction not found." }, diff --git a/src/cpp/ripple/RPCErr.h b/src/cpp/ripple/RPCErr.h index 0059b35a45..02dcda0080 100644 --- a/src/cpp/ripple/RPCErr.h +++ b/src/cpp/ripple/RPCErr.h @@ -60,6 +60,7 @@ enum { rpcPUBLIC_MALFORMED, rpcSRC_ACT_MALFORMED, rpcSRC_ACT_MISSING, + rpcSRC_ACT_NOT_FOUND, rpcSRC_AMT_MALFORMED, // Internal error (should never happen) diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 8c36b7e81d..d921638688 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -932,7 +932,13 @@ Json::Value RPCHandler::doSubmit(Json::Value jvRequest) } AccountState::pointer asSrc = mNetOps->getAccountState(mNetOps->getCurrentLedger(), raSrcAddressID); - if (!asSrc) return rpcError(rpcSRC_ACT_MALFORMED); + if (!asSrc) + { + cLog(lsDEBUG) << boost::str(boost::format("doSubmit: Failed to find source account in current ledger: %s") + % raSrcAddressID.humanAccountID()); + + return rpcError(rpcSRC_ACT_NOT_FOUND); + } if ("Payment" == txJSON["TransactionType"].asString()) {