diff --git a/src/LedgerNode.cpp b/src/LedgerNode.cpp index b2fcc0ec39..1e8fa6ff7b 100644 --- a/src/LedgerNode.cpp +++ b/src/LedgerNode.cpp @@ -1,5 +1,6 @@ #include "Ledger.h" +#include "utils.h" #include @@ -45,31 +46,42 @@ LedgerStateParms Ledger::writeBack(LedgerStateParms parms, SerializedLedgerEntry SerializedLedgerEntry::pointer Ledger::getASNode(LedgerStateParms& parms, const uint256& nodeID, LedgerEntryType let ) { +std::cerr << "getASNode>" << nodeID.ToString() << std::endl; SHAMapItem::pointer account = mAccountStateMap->peekItem(nodeID); +std::cerr << "getASNode: d: " << nodeID.ToString() << std::endl; if (!account) { if ( (parms & lepCREATE) == 0 ) { parms = lepMISSING; +std::cerr << "getASNode: missing: " << nodeID.ToString() << std::endl; return SerializedLedgerEntry::pointer(); } +std::cerr << "getASNode: c: " << nodeID.ToString() << std::endl; parms = parms | lepCREATED | lepOKAY; SerializedLedgerEntry::pointer sle=boost::make_shared(let); sle->setIndex(nodeID); + return sle; } +std::cerr << "getASNode: a: " << nodeID.ToString() << std::endl; +std::cerr << "getASNode: e: " << strHex(account->peekSerializer().getData()) << std::endl; SerializedLedgerEntry::pointer sle = boost::make_shared(account->peekSerializer(), nodeID); +std::cerr << "getASNode: b: " << nodeID.ToString() << std::endl; if(sle->getType() != let) { // maybe it's a currency or something +std::cerr << "getASNode: wrong type: " << nodeID.ToString() << std::endl; parms = parms | lepWRONGTYPE; return SerializedLedgerEntry::pointer(); } parms = parms | lepOKAY; +std::cerr << "getASNode<" << nodeID.ToString() << std::endl; + return sle; } @@ -203,12 +215,14 @@ SerializedLedgerEntry::pointer Ledger::getDirNode(LedgerStateParms& parms, const { ScopedLock l(mAccountStateMap->Lock()); +std::cerr << "getDirNode: " << uNodeIndex.ToString() << std::endl; try { return getASNode(parms, uNodeIndex, ltDIR_NODE); } catch (...) { +std::cerr << "getDirNode: ERROR: " << uNodeIndex.ToString() << std::endl; parms = lepERROR; return SerializedLedgerEntry::pointer(); } diff --git a/src/NetworkOPs.cpp b/src/NetworkOPs.cpp index 85063cd61b..e8285008d7 100644 --- a/src/NetworkOPs.cpp +++ b/src/NetworkOPs.cpp @@ -182,8 +182,19 @@ bool NetworkOPs::getDirInfo( if (sleRoot) { - uDirLineNodeFirst = uRootIndex | sleRoot->getIFieldU64(sfFirstNode); - uDirLineNodeLast = uRootIndex | sleRoot->getIFieldU64(sfLastNode); + std::cerr << "getDirInfo: root index: " << uRootIndex.ToString() << std::endl; + + std::cerr << "getDirInfo: first: " << strHex(sleRoot->getIFieldU64(sfFirstNode)) << std::endl; + std::cerr << "getDirInfo: last: " << strHex(sleRoot->getIFieldU64(sfLastNode)) << std::endl; + uDirLineNodeFirst = Ledger::getDirIndex(uBase, letKind, sleRoot->getIFieldU64(sfFirstNode)); + uDirLineNodeLast = Ledger::getDirIndex(uBase, letKind, sleRoot->getIFieldU64(sfLastNode)); + + std::cerr << "getDirInfo: first: " << uDirLineNodeFirst.ToString() << std::endl; + std::cerr << "getDirInfo: last: " << uDirLineNodeLast.ToString() << std::endl; + } + else + { + std::cerr << "getDirInfo: root index: NOT FOUND: " << uRootIndex.ToString() << std::endl; } return !!sleRoot; @@ -197,7 +208,15 @@ STVector256 NetworkOPs::getDirNode(const uint256& uLedger, const uint256& uDirLi SLE::pointer sleNode = mLedgerMaster->getLedgerByHash(uLedger)->getDirNode(lspNode, uDirLineNode); if (sleNode) + { + std::cerr << "getDirNode: node index: " << uDirLineNode.ToString() << std::endl; + svIndexes = sleNode->getIFieldV256(sfIndexes); + } + else + { + std::cerr << "getDirNode: node index: NOT FOUND: " << uDirLineNode.ToString() << std::endl; + } return svIndexes; } diff --git a/src/RPCServer.cpp b/src/RPCServer.cpp index afb51b7ad7..e158c609b3 100644 --- a/src/RPCServer.cpp +++ b/src/RPCServer.cpp @@ -367,14 +367,11 @@ Json::Value RPCServer::doAccountLines(Json::Value ¶ms) Json::Value ret; - // This needs to use a ledger. ret = accountFromString(uLedger, naAccount, bIndex, strIdent, iIndex); if (!ret.empty()) return ret; - // SHAMap::pointer smAccounts = theApp->getMasterLedger().getCurrentLedger()->peekAccountStateMap(); - // Get info on account. ret = Json::Value(Json::objectValue); @@ -382,13 +379,12 @@ Json::Value RPCServer::doAccountLines(Json::Value ¶ms) if (bIndex) ret["index"] = iIndex; - AccountState::pointer as = mNetOps->getAccountState(uLedger, naAccount); + AccountState::pointer as = mNetOps->getAccountState(uLedger, naAccount); if (as) { ret["account"] = naAccount.humanAccountID(); // We access a committed ledger and need not worry about changes. - // XXX We need to get the ID of the commited ledger for a conistent view. uint256 uDirLineNodeFirst; uint256 uDirLineNodeLast; diff --git a/src/TransactionEngine.cpp b/src/TransactionEngine.cpp index 5bec456678..ba97bfa112 100644 --- a/src/TransactionEngine.cpp +++ b/src/TransactionEngine.cpp @@ -36,10 +36,16 @@ TransactionEngineResult TransactionEngine::dirAdd( uNodeDir = 1; sleRoot = boost::make_shared(ltDIR_ROOT); + + sleRoot->setIndex(uRootIndex); + std::cerr << "dirAdd: Creating dir index: " << sleRoot->getIndex().ToString() << std::endl; + sleRoot->setIFieldU64(sfFirstNode, uNodeDir); sleRoot->setIFieldU64(sfLastNode, uNodeDir); + std::cerr << "dirAdd: first & last: " << strHex(uNodeDir) << std::endl; + accounts.push_back(std::make_pair(taaCREATE, sleRoot)); } @@ -72,6 +78,8 @@ TransactionEngineResult TransactionEngine::dirAdd( // Record new last node. sleNode = SLE::pointer(); + std::cerr << "dirAdd: last: " << strHex(uNodeDir) << std::endl; + sleRoot->setIFieldU64(sfLastNode, uNodeDir); accounts.push_back(std::make_pair(taaMODIFY, sleRoot)); } @@ -83,6 +91,8 @@ TransactionEngineResult TransactionEngine::dirAdd( sleNode = boost::make_shared(ltDIR_NODE); sleNode->setIndex(uNodeIndex); + std::cerr << "dirAdd: Creating dir node: " << sleNode->getIndex().ToString() << std::endl; + STVector256 svIndexes; svIndexes.peekValue().push_back(uLedgerIndex); @@ -597,13 +607,15 @@ TransactionEngineResult TransactionEngine::doCreditSet(const SerializedTransacti } else { - std::cerr << "doCreditSet: Creating ripple line." << std::endl; STAmount saZero(uCurrency); bAddIndex = true; sleRippleState = boost::make_shared(ltRIPPLE_STATE); sleRippleState->setIndex(Ledger::getRippleStateIndex(uSrcAccountID, uDstAccountID, uCurrency)); + std::cerr << "doCreditSet: Creating ripple line: " + << sleRippleState->getIndex().ToString() + << std::endl; sleRippleState->setFlag(uFlags); sleRippleState->setIFieldAmount(sfBalance, saZero); // Zero balance in currency.