diff --git a/src/ripple_app/ledger/LedgerMaster.cpp b/src/ripple_app/ledger/LedgerMaster.cpp index d4b29c2883..f2744eddb5 100644 --- a/src/ripple_app/ledger/LedgerMaster.cpp +++ b/src/ripple_app/ledger/LedgerMaster.cpp @@ -614,12 +614,18 @@ public: getApp().getInboundLedgers().findCreate(hash, seq, true); } - void checkAccept (uint256 const& hash) + void checkAccept (uint256 const& hash, uint32 seq) { + if ((seq == 0) && (seq <= mValidLedgerSeq)) + return; + Ledger::pointer ledger = mLedgerHistory.getLedgerByHash (hash); if (!ledger) { + // FIXME: We should really only fetch if the ledger + //has sufficient validations to accept it + InboundLedger::pointer l = getApp().getInboundLedgers().findCreateValidationLedger(hash); if (l && l->isComplete() && !l->isFailed()) ledger = l->getLedger(); diff --git a/src/ripple_app/ledger/LedgerMaster.h b/src/ripple_app/ledger/LedgerMaster.h index 9038527ddf..8eb423dbb0 100644 --- a/src/ripple_app/ledger/LedgerMaster.h +++ b/src/ripple_app/ledger/LedgerMaster.h @@ -122,7 +122,7 @@ public: virtual void addValidateCallback (callback& c) = 0; virtual void checkAccept (Ledger::ref ledger) = 0; - virtual void checkAccept (uint256 const& hash) = 0; + virtual void checkAccept (uint256 const& hash, uint32 seq) = 0; virtual void tryAdvance () = 0; virtual void newPathRequest () = 0; diff --git a/src/ripple_app/misc/Validations.cpp b/src/ripple_app/misc/Validations.cpp index fa863837ce..ee9914d61c 100644 --- a/src/ripple_app/misc/Validations.cpp +++ b/src/ripple_app/misc/Validations.cpp @@ -126,7 +126,7 @@ private: << " added " << (val->isTrusted () ? "trusted/" : "UNtrusted/") << (isCurrent ? "current" : "stale"); if (val->isTrusted () && isCurrent) - getApp().getLedgerMaster ().checkAccept (hash); + getApp().getLedgerMaster ().checkAccept (hash, val->getFieldU32 (sfLedgerSequence)); // FIXME: This never forwards untrusted validations return isCurrent;