From 62f6d030c6665537c43405961cc6f12da5ad3180 Mon Sep 17 00:00:00 2001 From: jed Date: Thu, 31 Jan 2013 10:59:19 -0800 Subject: [PATCH] still working --- src/cpp/ripple/Application.cpp | 2 ++ src/cpp/ripple/Application.h | 3 +++ src/cpp/ripple/NetworkOPs.cpp | 1 + src/cpp/ripple/NetworkOPs.h | 2 ++ src/cpp/ripple/OrderBook.h | 7 +++++ src/cpp/ripple/OrderBookDB.cpp | 44 +++++++++++++++++++++++++++++++- src/cpp/ripple/OrderBookDB.h | 9 ++++++- src/cpp/ripple/Pathfinder.cpp | 8 +++--- src/cpp/ripple/Pathfinder.h | 3 +-- src/cpp/ripple/TransactionMeta.h | 1 + src/js/sjcl | 2 +- 11 files changed, 73 insertions(+), 9 deletions(-) diff --git a/src/cpp/ripple/Application.cpp b/src/cpp/ripple/Application.cpp index a2d608279c..17c37c3f43 100644 --- a/src/cpp/ripple/Application.cpp +++ b/src/cpp/ripple/Application.cpp @@ -147,6 +147,8 @@ void Application::setup() else startNewLedger(); + mOrderBookDB.setup(theApp->getLedgerMaster().getCurrentLedger()); // TODO: We need to update this if the ledger jumps + // // Begin validation and ip maintenance. // - Wallet maintains local information: including identity and network connection persistence information. diff --git a/src/cpp/ripple/Application.h b/src/cpp/ripple/Application.h index 7ba1003ce5..343c9d26c2 100644 --- a/src/cpp/ripple/Application.h +++ b/src/cpp/ripple/Application.h @@ -24,6 +24,7 @@ #include "ProofOfWork.h" #include "LoadManager.h" #include "TransactionQueue.h" +#include "OrderBookDB.h" class RPCDoor; class PeerDoor; @@ -66,6 +67,7 @@ class Application LoadManager mLoadMgr; LoadFeeTrack mFeeTrack; TXQueue mTxnQueue; + OrderBookDB mOrderBookDB; DatabaseCon *mRpcDB, *mTxnDB, *mLedgerDB, *mWalletDB, *mHashNodeDB, *mNetNodeDB; @@ -115,6 +117,7 @@ public: LoadFeeTrack& getFeeTrack() { return mFeeTrack; } TXQueue& getTxnQueue() { return mTxnQueue; } PeerDoor& getPeerDoor() { return *mPeerDoor; } + OrderBookDB& getOrderBookDB() { return mOrderBookDB; } bool isNew(const uint256& s) { return mSuppressions.addSuppression(s); } diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index 3fbf0768b2..92a47fa5fc 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1316,6 +1316,7 @@ void NetworkOPs::pubAcceptedTransaction(Ledger::ref lpCurrent, const SerializedT ispListener->send(jvObj); } } + theApp->getOrderBookDB().processTxn(stTxn, terResult, meta, jvObj); pubAccountTransaction(lpCurrent, stTxn, terResult, true, meta); } diff --git a/src/cpp/ripple/NetworkOPs.h b/src/cpp/ripple/NetworkOPs.h index 0979671fb7..c03edae49f 100644 --- a/src/cpp/ripple/NetworkOPs.h +++ b/src/cpp/ripple/NetworkOPs.h @@ -71,6 +71,7 @@ protected: typedef boost::unordered_map >::iterator subInfoMapIterator; typedef boost::unordered_map > subSubmitMapType; + //typedef boost::unordered_map > subOrderMap; typedef boost::unordered_map subRpcMapType; @@ -103,6 +104,7 @@ protected: subInfoMapType mSubAccount; subInfoMapType mSubRTAccount; subSubmitMapType mSubmitMap; // TODO: probably dump this + subRpcMapType mRpcSubMap; diff --git a/src/cpp/ripple/OrderBook.h b/src/cpp/ripple/OrderBook.h index b4556f01d9..c805040849 100644 --- a/src/cpp/ripple/OrderBook.h +++ b/src/cpp/ripple/OrderBook.h @@ -1,5 +1,7 @@ #include "SerializedLedger.h" +#include "NetworkOPs.h" #include + /* Encapsulates the SLE for an orderbook */ @@ -12,6 +14,8 @@ class OrderBook uint160 mIssuerIn; uint160 mIssuerOut; + boost::unordered_set mListeners; + //SerializedLedgerEntry::pointer mLedgerEntry; OrderBook(SerializedLedgerEntry::pointer ledgerEntry); // For accounts in a ledger public: @@ -30,6 +34,9 @@ public: // looks through the best offers to see how much it would cost to take the given amount STAmount& getTakePrice(STAmount& takeAmount); + + void addSubscriber(InfoSub* sub); + void removeSubscriber(InfoSub* sub); }; // vim:ts=4 diff --git a/src/cpp/ripple/OrderBookDB.cpp b/src/cpp/ripple/OrderBookDB.cpp index 192cab703b..0f6956f8c5 100644 --- a/src/cpp/ripple/OrderBookDB.cpp +++ b/src/cpp/ripple/OrderBookDB.cpp @@ -3,8 +3,13 @@ #include +OrderBookDB::OrderBookDB() +{ + +} + // TODO: this would be way faster if we could just look under the order dirs -OrderBookDB::OrderBookDB(Ledger::pointer ledger) +void OrderBookDB::setup(Ledger::pointer ledger) { // walk through the entire ledger looking for orderbook entries uint256 currentIndex=ledger->getFirstLedgerIndex(); @@ -53,4 +58,41 @@ void OrderBookDB::getBooks(const uint160& issuerID, const uint160& currencyID, s } } } +} + +OrderBook::pointer OrderBookDB::getBook(uint160 mCurrencyIn, uint160 mCurrencyOut, uint160 mIssuerIn, uint160 mIssuerOut) +{ + +} + +/* +"CreatedNode" : { +"LedgerEntryType" : "Offer", +"LedgerIndex" : "F353BF8A7DCE35EA2985596F4C8421E30EF3B9A21618566BFE0ED00B62A8A5AB", +"NewFields" : { +"Account" : "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY", +"BookDirectory" : "FF26BE244767D0EA9EFD523941439009E4185E4CBB918F714C08E1BC9BF04000", +"Sequence" : 112, +"TakerGets" : "400000000", +"TakerPays" : { +"currency" : "BTC", +"issuer" : "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", +"value" : "1" +} +} +}*/ + +void OrderBookDB::processTxn(const SerializedTransaction& stTxn, TER terResult,TransactionMetaSet::pointer& meta,Json::Value& jvObj) +{ + // check if this is an offer or an offer cancel or a payment that consumes an offer + //check to see what the meta looks like + BOOST_FOREACH(STObject& node,meta->getNodes()) + { + if(node.getFieldU16(sfLedgerEntryType)==ltOFFER) + { + + } + } + + } \ No newline at end of file diff --git a/src/cpp/ripple/OrderBookDB.h b/src/cpp/ripple/OrderBookDB.h index ded3562ae4..dc3983a36e 100644 --- a/src/cpp/ripple/OrderBookDB.h +++ b/src/cpp/ripple/OrderBookDB.h @@ -11,11 +11,13 @@ class OrderBookDB std::vector mEmptyVector; std::vector mXRPOrders; std::map > mIssuerMap; + //std::vector mAllOrderBooks; std::map mKnownMap; public: - OrderBookDB(Ledger::pointer ledger); + OrderBookDB(); + void setup(Ledger::pointer ledger); // return list of all orderbooks that want XRP std::vector& getXRPInBooks(){ return mXRPOrders; } @@ -27,6 +29,11 @@ public: // returns the best rate we can find float getPrice(uint160& currencyIn,uint160& currencyOut); + + OrderBook::pointer getBook(uint160 mCurrencyIn, uint160 mCurrencyOut, uint160 mIssuerIn, uint160 mIssuerOut); + // see if this txn effects any orderbook + void processTxn(const SerializedTransaction& stTxn, TER terResult,TransactionMetaSet::pointer& meta,Json::Value& jvObj); + }; // vim:ts=4 diff --git a/src/cpp/ripple/Pathfinder.cpp b/src/cpp/ripple/Pathfinder.cpp index a7f03cc1cf..efa070a189 100644 --- a/src/cpp/ripple/Pathfinder.cpp +++ b/src/cpp/ripple/Pathfinder.cpp @@ -269,7 +269,7 @@ bool Pathfinder::findPaths(const unsigned int iMaxSteps, const unsigned int iMax else if (!speEnd.mCurrencyID) { // Last element is for XRP, continue with qualifying books. - BOOST_FOREACH(OrderBook::ref book, mOrderBook.getXRPInBooks()) + BOOST_FOREACH(OrderBook::ref book, theApp->getOrderBookDB().getXRPInBooks()) { // XXX Don't allow looping through same order books. @@ -357,7 +357,7 @@ bool Pathfinder::findPaths(const unsigned int iMaxSteps, const unsigned int iMax // Every book that wants the source currency. std::vector books; - mOrderBook.getBooks(spPath.mCurrentAccount, spPath.mCurrencyID, books); + theApp->getOrderBookDB().getBooks(spPath.mCurrentAccount, spPath.mCurrencyID, books); BOOST_FOREACH(OrderBook::ref book,books) { @@ -499,7 +499,7 @@ void Pathfinder::addOptions(PathOption::pointer tail) { if (!tail->mCurrencyID) { // source XRP - BOOST_FOREACH(OrderBook::ref book, mOrderBook.getXRPInBooks()) + BOOST_FOREACH(OrderBook::ref book, theApp->getOrderBookDB().getXRPInBooks()) { PathOption::pointer pathOption(new PathOption(tail)); @@ -533,7 +533,7 @@ void Pathfinder::addOptions(PathOption::pointer tail) // every offer that wants the source currency std::vector books; - mOrderBook.getBooks(tail->mCurrentAccount, tail->mCurrencyID, books); + theApp->getOrderBookDB().getBooks(tail->mCurrentAccount, tail->mCurrencyID, books); BOOST_FOREACH(OrderBook::ref book,books) { diff --git a/src/cpp/ripple/Pathfinder.h b/src/cpp/ripple/Pathfinder.h index 5682778e49..e624d51675 100644 --- a/src/cpp/ripple/Pathfinder.h +++ b/src/cpp/ripple/Pathfinder.h @@ -3,7 +3,6 @@ #include "SerializedTypes.h" #include "RippleAddress.h" -#include "OrderBookDB.h" #include "RippleCalc.h" #include @@ -42,7 +41,7 @@ class Pathfinder uint160 mSrcIssuerID; STAmount mSrcAmount; - OrderBookDB mOrderBook; + //OrderBookDB mOrderBook; Ledger::pointer mLedger; PathState::pointer mPsDefault; diff --git a/src/cpp/ripple/TransactionMeta.h b/src/cpp/ripple/TransactionMeta.h index 5386b96b87..fd07635c8c 100644 --- a/src/cpp/ripple/TransactionMeta.h +++ b/src/cpp/ripple/TransactionMeta.h @@ -56,6 +56,7 @@ public: void addRaw(Serializer&, TER, uint32 index); STObject getAsObject() const; + STArray& getNodes(){ return(mNodes); } static bool thread(STObject& node, const uint256& prevTxID, uint32 prevLgrID); }; diff --git a/src/js/sjcl b/src/js/sjcl index dbdef434e7..d04d0bdccd 160000 --- a/src/js/sjcl +++ b/src/js/sjcl @@ -1 +1 @@ -Subproject commit dbdef434e76c3f16835f3126a7ff1c717b1ce8af +Subproject commit d04d0bdccd986e434b98fe393e1e01286c10fc36