From 5cb35b7a8f7b98b8fa67cd8c1ad344c8f534874f Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 8 Nov 2012 14:36:15 -0800 Subject: [PATCH] Make the skip lists self-decsriptive. This change will cause old and new servers to diverge ledgers. --- src/cpp/ripple/Ledger.cpp | 8 ++++++++ src/cpp/ripple/LedgerFormats.cpp | 2 ++ src/cpp/ripple/SerializeProto.h | 2 ++ 3 files changed, 12 insertions(+) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 22eeba34a..d19cf9e02 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -1077,13 +1077,17 @@ void Ledger::updateSkipList() std::vector hashes; if (!skipList) + { skipList = boost::make_shared(ltLEDGER_HASHES, hash); + skipList->setFieldU32(sfFirstLedgerSequence, prevIndex); + } else hashes = skipList->getFieldV256(sfHashes).peekValue(); assert(hashes.size() <= 256); hashes.push_back(mParentHash); skipList->setFieldV256(sfHashes, STVector256(hashes)); + skipList->setFieldU32(sfLastLedgerSequence, prevIndex); if (writeBack(lepCREATE, skipList) == lepERROR) { @@ -1096,7 +1100,10 @@ void Ledger::updateSkipList() SLE::pointer skipList = getSLE(hash); std::vector hashes; if (!skipList) + { skipList = boost::make_shared(ltLEDGER_HASHES, hash); + skipList->setFieldU32(sfFirstLedgerSequence, prevIndex); + } else hashes = skipList->getFieldV256(sfHashes).peekValue(); @@ -1105,6 +1112,7 @@ void Ledger::updateSkipList() hashes.erase(hashes.begin()); hashes.push_back(mParentHash); skipList->setFieldV256(sfHashes, STVector256(hashes)); + skipList->setFieldU32(sfLastLedgerSequence, prevIndex); if (writeBack(lepCREATE, skipList) == lepERROR) { diff --git a/src/cpp/ripple/LedgerFormats.cpp b/src/cpp/ripple/LedgerFormats.cpp index 4e8ebfd4d..b4cd7890e 100644 --- a/src/cpp/ripple/LedgerFormats.cpp +++ b/src/cpp/ripple/LedgerFormats.cpp @@ -86,6 +86,8 @@ static bool LEFInit() ; DECLARE_LEF(LedgerHashes, ltLEDGER_HASHES) + << SOElement(sfFirstLedgerSequence, SOE_OPTIONAL) + << SOElement(sfLastLedgerSequence, SOE_OPTIONAL) << SOElement(sfHashes, SOE_REQUIRED) ; diff --git a/src/cpp/ripple/SerializeProto.h b/src/cpp/ripple/SerializeProto.h index 776e7b109..59acb547a 100644 --- a/src/cpp/ripple/SerializeProto.h +++ b/src/cpp/ripple/SerializeProto.h @@ -55,6 +55,8 @@ FIELD(BondAmount, UINT32, 23) FIELD(LoadFee, UINT32, 24) FIELD(OfferSequence, UINT32, 25) + FIELD(FirstLedgerSequence, UINT32, 26) + FIELD(LastLedgerSequence, UINT32, 27) // 64-bit integers FIELD(IndexNext, UINT64, 1)