From 3345d034334b1e75b4e79dabe6a9b74af90c13b0 Mon Sep 17 00:00:00 2001 From: Nik Bougalis Date: Wed, 10 Sep 2014 21:09:14 -0700 Subject: [PATCH] Avoid conversions whenever possible during RippleState lookups --- src/ripple/module/app/ledger/Ledger.cpp | 18 ++++++++---------- src/ripple/module/app/ledger/Ledger.h | 19 ++++--------------- .../module/rpc/handlers/LedgerEntry.cpp | 3 ++- 3 files changed, 14 insertions(+), 26 deletions(-) diff --git a/src/ripple/module/app/ledger/Ledger.cpp b/src/ripple/module/app/ledger/Ledger.cpp index 6a3f3a593..f949dc0f3 100644 --- a/src/ripple/module/app/ledger/Ledger.cpp +++ b/src/ripple/module/app/ledger/Ledger.cpp @@ -1775,18 +1775,16 @@ uint256 Ledger::getOwnerDirIndex (Account const& account) } uint256 Ledger::getRippleStateIndex ( - RippleAddress const& naA, RippleAddress const& naB, - Currency const& currency) + Account const& a, Account const& b, Currency const& currency) { - auto uAID = naA.getAccountID (); - auto uBID = naB.getAccountID (); - bool bAltB = uAID < uBID; Serializer s (62); + bool const bAltB = a < b; + s.add16 (spaceRipple); // 2 - s.add160 (bAltB ? uAID : uBID); // 20 - s.add160 (bAltB ? uBID : uAID); // 20 - s.add160 (currency); // 20 + s.add160 (bAltB ? a : b); // 20 + s.add160 (bAltB ? b : a); // 20 + s.add160 (currency); // 20 return s.getSHA512Half (); } @@ -1797,8 +1795,8 @@ uint256 Ledger::getTicketIndex ( Serializer s (26); s.add16 (spaceTicket); // 2 - s.add160 (account); // 20 - s.add32 (uSequence); // 4 + s.add160 (account); // 20 + s.add32 (uSequence); // 4 return s.getSHA512Half (); } diff --git a/src/ripple/module/app/ledger/Ledger.h b/src/ripple/module/app/ledger/Ledger.h index 67f5ea8f9..5e5e7ce24 100644 --- a/src/ripple/module/app/ledger/Ledger.h +++ b/src/ripple/module/app/ledger/Ledger.h @@ -432,30 +432,19 @@ public: // don't access global variables. e.g. // "calculateKeyFromRippleStateAndAddress" static uint256 getRippleStateIndex ( - RippleAddress const&, RippleAddress const&, Currency const&); + Account const& a, Account const& b, Currency const& currency); static uint256 getRippleStateIndex ( - Account const& a, Account const& b, Currency const& uCurrency) + Account const& a, Issue const& issue) { - return getRippleStateIndex ( - RippleAddress::createAccountID (a), - RippleAddress::createAccountID (b), uCurrency); + return getRippleStateIndex (a, issue.account, issue.currency); } SLE::pointer getRippleState (uint256 const& uNode); - SLE::pointer getRippleState ( - RippleAddress const& a, RippleAddress const& b, - Currency const& currency) - { - return getRippleState (getRippleStateIndex (a, b, currency)); - } - SLE::pointer getRippleState ( Account const& a, Account const& b, Currency const& currency) { - return getRippleState (getRippleStateIndex ( - RippleAddress::createAccountID (a), - RippleAddress::createAccountID (b), currency)); + return getRippleState (getRippleStateIndex (a, b, currency)); } std::uint32_t getReferenceFeeUnits () diff --git a/src/ripple/module/rpc/handlers/LedgerEntry.cpp b/src/ripple/module/rpc/handlers/LedgerEntry.cpp index 45c35408f..39c9d1257 100644 --- a/src/ripple/module/rpc/handlers/LedgerEntry.cpp +++ b/src/ripple/module/rpc/handlers/LedgerEntry.cpp @@ -195,7 +195,8 @@ Json::Value doLedgerEntry (RPC::Context& context) } else { - uNodeIndex = Ledger::getRippleStateIndex (naA, naB, uCurrency); + uNodeIndex = Ledger::getRippleStateIndex ( + naA.getAccountID (), naB.getAccountID (), uCurrency); } } else