From 1167ba2cc075264dfc6c40f92d7be2cea5e703e9 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 28 Jul 2012 14:49:34 -0700 Subject: [PATCH] Set up for ledger diffs to populate the metadata. Special case for unfunded offers -- need to know how much was taken before deletion --- src/LedgerEntrySet.cpp | 9 ++++++++- src/LedgerEntrySet.h | 2 +- src/TransactionEngine.cpp | 7 +++++-- src/TransactionEngine.h | 2 +- src/TransactionMeta.cpp | 6 ++++++ src/TransactionMeta.h | 6 +++++- 6 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/LedgerEntrySet.cpp b/src/LedgerEntrySet.cpp index e325b47dee..0c87f7849b 100644 --- a/src/LedgerEntrySet.cpp +++ b/src/LedgerEntrySet.cpp @@ -147,7 +147,7 @@ void LedgerEntrySet::entryModify(SLE::pointer& sle) } } -void LedgerEntrySet::entryDelete(SLE::pointer& sle) +void LedgerEntrySet::entryDelete(SLE::pointer& sle, bool unfunded) { boost::unordered_map::iterator it = mEntries.find(sle->getIndex()); if (it == mEntries.end()) @@ -166,6 +166,13 @@ void LedgerEntrySet::entryDelete(SLE::pointer& sle) it->second.mSeq = mSeq; it->second.mEntry = sle; it->second.mAction = taaDELETE; + if (unfunded) + { + assert(sle->getType() == ltOFFER); // only offers can be unfunded + mSet.deleteUnfunded(sle->getIndex(), + sle->getIValueFieldAmount(sfTakerPays), + sle->getIValueFieldAmount(sfTakerGets)); + } break; case taaCREATE: diff --git a/src/LedgerEntrySet.h b/src/LedgerEntrySet.h index 01312e0b52..e600060f33 100644 --- a/src/LedgerEntrySet.h +++ b/src/LedgerEntrySet.h @@ -55,7 +55,7 @@ public: LedgerEntryAction hasEntry(const uint256& index) const; void entryCache(SLE::pointer&); // Add this entry to the cache void entryCreate(SLE::pointer&); // This entry will be created - void entryDelete(SLE::pointer&); // This entry will be deleted + void entryDelete(SLE::pointer&, bool unfunded); void entryModify(SLE::pointer&); // This entry will be modified // iterator functions diff --git a/src/TransactionEngine.cpp b/src/TransactionEngine.cpp index 69dde7cb91..8fdf965608 100644 --- a/src/TransactionEngine.cpp +++ b/src/TransactionEngine.cpp @@ -706,7 +706,10 @@ SLE::pointer TransactionEngine::entryCache(LedgerEntryType letType, const uint25 { sleEntry = mLedger->getSLE(uIndex); if (sleEntry) + { mNodes.entryCache(sleEntry); + mOrigNodes.entryCache(sleEntry); // So the metadata code can compare to the original + } } else if(action == taaDELETE) assert(false); @@ -727,9 +730,9 @@ SLE::pointer TransactionEngine::entryCreate(LedgerEntryType letType, const uint2 } -void TransactionEngine::entryDelete(SLE::pointer sleEntry) +void TransactionEngine::entryDelete(SLE::pointer sleEntry, bool unfunded) { - mNodes.entryDelete(sleEntry); + mNodes.entryDelete(sleEntry, unfunded); } void TransactionEngine::entryModify(SLE::pointer sleEntry) diff --git a/src/TransactionEngine.h b/src/TransactionEngine.h index 82a651181b..8fc31aa5e3 100644 --- a/src/TransactionEngine.h +++ b/src/TransactionEngine.h @@ -186,7 +186,7 @@ protected: SLE::pointer entryCreate(LedgerEntryType letType, const uint256& uIndex); SLE::pointer entryCache(LedgerEntryType letType, const uint256& uIndex); - void entryDelete(SLE::pointer sleEntry); + void entryDelete(SLE::pointer sleEntry, bool unfunded = false); void entryModify(SLE::pointer sleEntry); void entryReset(); diff --git a/src/TransactionMeta.cpp b/src/TransactionMeta.cpp index 7948057856..744e142fa7 100644 --- a/src/TransactionMeta.cpp +++ b/src/TransactionMeta.cpp @@ -230,3 +230,9 @@ void TransactionMetaSet::swap(TransactionMetaSet& s) assert((mTransactionID == s.mTransactionID) && (mLedger == s.mLedger)); mNodes.swap(s.mNodes); } + +bool TransactionMetaSet::deleteUnfunded(const uint256& node, const STAmount& firstBalance, const STAmount &secondBalance) +{ + // WRITEME + return true; +} diff --git a/src/TransactionMeta.h b/src/TransactionMeta.h index a0685a1496..573320116c 100644 --- a/src/TransactionMeta.h +++ b/src/TransactionMeta.h @@ -71,8 +71,12 @@ public: class TMNEUnfunded : public TransactionMetaNodeEntry { // node was deleted because it was unfunded +protected: + STAmount firstAmount, secondAmount; // Amounts left when declared unfunded public: TMNEUnfunded() : TransactionMetaNodeEntry(TMNDeleteUnfunded) { ; } + TMNEUnfunded(const STAmount& f, const STAmount& s) : + TransactionMetaNodeEntry(TMNDeleteUnfunded), firstAmount(f), secondAmount(s) { ; } virtual void addRaw(Serializer&) const; virtual Json::Value getJson(int) const; virtual int compare(const TransactionMetaNodeEntry&) const; @@ -132,7 +136,7 @@ public: void threadNode(const uint256& node, const uint256& previousTransaction, uint32 previousLedger); bool signedBy(const uint256& node, const STAmount& fee); - bool deleteUnfunded(const uint256& node); + bool deleteUnfunded(const uint256& node, const STAmount& firstBalance, const STAmount& secondBalance); bool adjustBalance(const uint256& node, unsigned flags, const STAmount &amount); bool adjustBalances(const uint256& node, unsigned flags, const STAmount &firstAmt, const STAmount &secondAmt); };