From 7581b4d24a39428af227ed83fdc69b9c7ab69f9b Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 29 Jul 2013 11:50:56 -0700 Subject: [PATCH] Track whether a ledger is fully-validated. --- modules/ripple_app/ledger/Ledger.cpp | 7 ++++++- modules/ripple_app/ledger/Ledger.h | 10 +++++++++- modules/ripple_app/ledger/LedgerMaster.cpp | 3 +++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/modules/ripple_app/ledger/Ledger.cpp b/modules/ripple_app/ledger/Ledger.cpp index 0ed9320caf..c27c26f494 100644 --- a/modules/ripple_app/ledger/Ledger.cpp +++ b/modules/ripple_app/ledger/Ledger.cpp @@ -14,6 +14,7 @@ Ledger::Ledger (const RippleAddress& masterID, uint64 startAmount) , mCloseResolution (LEDGER_TIME_ACCURACY) , mCloseFlags (0) , mClosed (false) + , mValidated (false) , mValidHash (false) , mAccepted (false) , mImmutable (false) @@ -58,6 +59,7 @@ Ledger::Ledger (uint256 const& parentHash, , mCloseResolution (closeResolution) , mCloseFlags (closeFlags) , mClosed (false) + , mValidated (false) , mValidHash (false) , mAccepted (false) , mImmutable (true) @@ -97,6 +99,7 @@ Ledger::Ledger (Ledger& ledger, , mCloseResolution (ledger.mCloseResolution) , mCloseFlags (ledger.mCloseFlags) , mClosed (ledger.mClosed) + , mValidated (ledger.mValidated) , mValidHash (false) , mAccepted (ledger.mAccepted) , mImmutable (!isMutable) @@ -116,6 +119,7 @@ Ledger::Ledger (bool /* dummy */, , mCloseResolution (prevLedger.mCloseResolution) , mCloseFlags (0) , mClosed (false) + , mValidated (false) , mValidHash (false) , mAccepted (false) , mImmutable (false) @@ -148,6 +152,7 @@ Ledger::Ledger (bool /* dummy */, Ledger::Ledger (Blob const& rawLedger, bool hasPrefix) : mClosed (false) + , mValidated (false) , mValidHash (false) , mAccepted (false) , mImmutable (true) @@ -160,7 +165,7 @@ Ledger::Ledger (Blob const& rawLedger, } Ledger::Ledger (const std::string& rawLedger, bool hasPrefix) : - mClosed (false), mValidHash (false), mAccepted (false), mImmutable (true) + mClosed (false), mValidated(false), mValidHash (false), mAccepted (false), mImmutable (true) { Serializer s (rawLedger); setRaw (s, hasPrefix); diff --git a/modules/ripple_app/ledger/Ledger.h b/modules/ripple_app/ledger/Ledger.h index 6d0ddc686a..869a0963f8 100644 --- a/modules/ripple_app/ledger/Ledger.h +++ b/modules/ripple_app/ledger/Ledger.h @@ -91,6 +91,10 @@ public: { mClosed = true; } + void setValidated() + { + mValidated = true; + } void setAccepted (uint32 closeTime, int closeResolution, bool correctCloseTime); void setAccepted (); void setImmutable (); @@ -102,6 +106,10 @@ public: { return mAccepted; } + bool isValidated () + { + return mValidated; + } bool isImmutable () { return mImmutable; @@ -449,7 +457,7 @@ private: uint32 mParentCloseTime; // when the previous ledger closed int mCloseResolution; // the resolution for this ledger close time (2-120 seconds) uint32 mCloseFlags; // flags indicating how this ledger close took place - bool mClosed, mValidHash, mAccepted, mImmutable; + bool mClosed, mValidated, mValidHash, mAccepted, mImmutable; uint32 mReferenceFeeUnits; // Fee units for the reference transaction uint32 mReserveBase, mReserveIncrement; // Reserve basse and increment in fee units diff --git a/modules/ripple_app/ledger/LedgerMaster.cpp b/modules/ripple_app/ledger/LedgerMaster.cpp index fa85521d94..6dca9fa09a 100644 --- a/modules/ripple_app/ledger/LedgerMaster.cpp +++ b/modules/ripple_app/ledger/LedgerMaster.cpp @@ -159,6 +159,7 @@ void LedgerMaster::storeLedger (Ledger::pointer ledger) void LedgerMaster::forceValid (Ledger::pointer ledger) { + ledger->setValidated(); if (!mValidLedger || (mPubLedger->getLedgerSeq() < ledger->getLedgerSeq())) mValidLedger = ledger; if (!mPubLedger || (mPubLedger->getLedgerSeq() < 2)) @@ -683,6 +684,7 @@ void LedgerMaster::checkAccept (uint256 const& hash, uint32 seq) return; } + ledger->setValidated(); mValidLedger = ledger; uint64 fee, fee2, ref; @@ -769,6 +771,7 @@ void LedgerMaster::tryPublish () if (ledger && (ledger->getLedgerSeq() == (mPubLedger->getLedgerSeq() + 1))) { // We acquired the next ledger we need to publish + ledger->setValidated(); mPubLedger = ledger; mPubLedgers.push_back (mPubLedger); }