diff --git a/src/Ledger.h b/src/Ledger.h index 96c9347e34..7c670c1c41 100644 --- a/src/Ledger.h +++ b/src/Ledger.h @@ -77,6 +77,9 @@ protected: static Ledger::pointer getSQL(const std::string& sqlStatement); + SerializedLedgerEntry::pointer getASNode(LedgerStateParms& parms, const uint256& nodeID, + LedgerEntryType let); + public: Ledger(const NewcoinAddress& masterID, uint64 startAmount); // used for the starting bootstrap ledger Ledger(const uint256 &parentHash, const uint256 &transHash, const uint256 &accountHash, diff --git a/src/LedgerNode.cpp b/src/LedgerNode.cpp index 21238792ea..0669ca8c7d 100644 --- a/src/LedgerNode.cpp +++ b/src/LedgerNode.cpp @@ -24,12 +24,9 @@ LedgerStateParms Ledger::writeBack(LedgerStateParms parms, SerializedLedgerEntry return create ? lepCREATED : lepOKAY; } -SerializedLedgerEntry::pointer Ledger::getAccountRoot(LedgerStateParms& parms, const uint160& accountID) +SerializedLedgerEntry::pointer Ledger::getASNode(LedgerStateParms& parms, const uint256& nodeID, + LedgerEntryType let ) { - uint256 nodeID=getAccountRootIndex(accountID); - - ScopedLock l(mAccountStateMap->Lock()); - SHAMapItem::pointer account = mAccountStateMap->peekItem(nodeID); if (!account) { @@ -39,26 +36,57 @@ SerializedLedgerEntry::pointer Ledger::getAccountRoot(LedgerStateParms& parms, c return SerializedLedgerEntry::pointer(); } - parms = lepCREATED; - SerializedLedgerEntry::pointer sle=boost::make_shared(ltACCOUNT_ROOT); + parms = parms | lepCREATED | lepOKAY; + SerializedLedgerEntry::pointer sle=boost::make_shared(let); sle->setIndex(nodeID); return sle; } + SerializedLedgerEntry::pointer sle = + boost::make_shared(account->peekSerializer(), nodeID); + + if(sle->getType() != let) + { // maybe it's a currency or something + parms = parms | lepWRONGTYPE; + return SerializedLedgerEntry::pointer(); + } + + parms = parms | lepOKAY; + return sle; + +} + +SerializedLedgerEntry::pointer Ledger::getAccountRoot(LedgerStateParms& parms, const uint160& accountID) +{ + uint256 nodeID=getAccountRootIndex(accountID); + + ScopedLock l(mAccountStateMap->Lock()); + try { - SerializedLedgerEntry::pointer sle = - boost::make_shared(account->peekSerializer(), nodeID); - - if(sle->getType() != ltACCOUNT_ROOT) - { // maybe it's a currency or something - parms = lepWRONGTYPE; - return SerializedLedgerEntry::pointer(); - } - parms = lepOKAY; - return sle; + return getASNode(parms, nodeID, ltACCOUNT_ROOT); } - catch(...) + catch (...) + { + parms = lepERROR; + return SerializedLedgerEntry::pointer(); + } +} + +SerializedLedgerEntry::pointer Ledger::getNickname(LedgerStateParms& parms, const std::string& nickname) +{ + return getNickname(parms, Serializer::getSHA512Half(nickname)); +} + +SerializedLedgerEntry::pointer Ledger::getNickname(LedgerStateParms& parms, const uint256& nickHash) +{ + ScopedLock l(mAccountStateMap->Lock()); + + try + { + return getASNode(parms, nickHash, ltNICKNAME); + } + catch (...) { parms = lepERROR; return SerializedLedgerEntry::pointer();