@@ -87,7 +87,7 @@ UniValue CQuorumRotationInfo::ToJson() const
87
87
bool BuildQuorumRotationInfo (CDeterministicMNManager& dmnman, CQuorumSnapshotManager& qsnapman,
88
88
const ChainstateManager& chainman, const CQuorumManager& qman,
89
89
const CQuorumBlockProcessor& qblockman, const CGetQuorumRotationInfo& request,
90
- CQuorumRotationInfo& response, std::string& errorRet)
90
+ bool use_legacy_construction, CQuorumRotationInfo& response, std::string& errorRet)
91
91
{
92
92
AssertLockHeld (cs_main);
93
93
@@ -112,13 +112,24 @@ bool BuildQuorumRotationInfo(CDeterministicMNManager& dmnman, CQuorumSnapshotMan
112
112
}
113
113
baseBlockIndexes.push_back (blockIndex);
114
114
}
115
+ if (use_legacy_construction) {
116
+ std::sort (baseBlockIndexes.begin (), baseBlockIndexes.end (), [](const CBlockIndex* a, const CBlockIndex* b) {
117
+ return a->nHeight < b->nHeight ;
118
+ });
119
+ }
115
120
}
116
121
117
122
const CBlockIndex* tipBlockIndex = chainman.ActiveChain ().Tip ();
118
123
if (!tipBlockIndex) {
119
124
errorRet = strprintf (" tip block not found" );
120
125
return false ;
121
126
}
127
+ if (use_legacy_construction) {
128
+ // Build MN list Diff always with highest baseblock
129
+ if (!BuildSimplifiedMNListDiff (dmnman, chainman, qblockman, qman, baseBlockIndexes.back ()->GetBlockHash (), tipBlockIndex->GetBlockHash (), response.mnListDiffTip , errorRet)) {
130
+ return false ;
131
+ }
132
+ }
122
133
123
134
const CBlockIndex* blockIndex = chainman.m_blockman .LookupBlockIndex (request.blockRequestHash );
124
135
if (!blockIndex) {
@@ -148,6 +159,13 @@ bool BuildQuorumRotationInfo(CDeterministicMNManager& dmnman, CQuorumSnapshotMan
148
159
return false ;
149
160
}
150
161
162
+ if (use_legacy_construction) {
163
+ // Build MN list Diff always with highest baseblock
164
+ if (!BuildSimplifiedMNListDiff (dmnman, chainman, qblockman, qman, GetLastBaseBlockHash (baseBlockIndexes, pWorkBlockHIndex, use_legacy_construction), pWorkBlockHIndex->GetBlockHash (), response.mnListDiffH , errorRet)) {
165
+ return false ;
166
+ }
167
+ }
168
+
151
169
const CBlockIndex* pBlockHMinusCIndex = tipBlockIndex->GetAncestor (hBlockIndex->nHeight - cycleLength);
152
170
if (!pBlockHMinusCIndex) {
153
171
errorRet = strprintf (" Can not find block H-C" );
@@ -190,6 +208,12 @@ bool BuildQuorumRotationInfo(CDeterministicMNManager& dmnman, CQuorumSnapshotMan
190
208
const CBlockIndex* pWorkBlockHMinus4CIndex = pBlockHMinus4CIndex->GetAncestor (pBlockHMinus4CIndex->nHeight - workDiff);
191
209
// Checked later if extraShare is on
192
210
211
+ if (use_legacy_construction) {
212
+ if (!BuildSimplifiedMNListDiff (dmnman, chainman, qblockman, qman, GetLastBaseBlockHash (baseBlockIndexes, pWorkBlockHMinusCIndex, use_legacy_construction), pWorkBlockHMinusCIndex->GetBlockHash (), response.mnListDiffAtHMinusC , errorRet)) {
213
+ return false ;
214
+ }
215
+ }
216
+
193
217
auto snapshotHMinusC = qsnapman.GetSnapshotForBlock (llmqType, pBlockHMinusCIndex);
194
218
if (!snapshotHMinusC.has_value ()) {
195
219
errorRet = strprintf (" Can not find quorum snapshot at H-C" );
@@ -198,6 +222,12 @@ bool BuildQuorumRotationInfo(CDeterministicMNManager& dmnman, CQuorumSnapshotMan
198
222
response.quorumSnapshotAtHMinusC = std::move (snapshotHMinusC.value ());
199
223
}
200
224
225
+ if (use_legacy_construction) {
226
+ if (!BuildSimplifiedMNListDiff (dmnman, chainman, qblockman, qman, GetLastBaseBlockHash (baseBlockIndexes, pWorkBlockHMinus2CIndex, use_legacy_construction), pWorkBlockHMinus2CIndex->GetBlockHash (), response.mnListDiffAtHMinus2C , errorRet)) {
227
+ return false ;
228
+ }
229
+ }
230
+
201
231
auto snapshotHMinus2C = qsnapman.GetSnapshotForBlock (llmqType, pBlockHMinus2CIndex);
202
232
if (!snapshotHMinus2C.has_value ()) {
203
233
errorRet = strprintf (" Can not find quorum snapshot at H-2C" );
@@ -206,6 +236,12 @@ bool BuildQuorumRotationInfo(CDeterministicMNManager& dmnman, CQuorumSnapshotMan
206
236
response.quorumSnapshotAtHMinus2C = std::move (snapshotHMinus2C.value ());
207
237
}
208
238
239
+ if (use_legacy_construction) {
240
+ if (!BuildSimplifiedMNListDiff (dmnman, chainman, qblockman, qman, GetLastBaseBlockHash (baseBlockIndexes, pWorkBlockHMinus3CIndex, use_legacy_construction), pWorkBlockHMinus3CIndex->GetBlockHash (), response.mnListDiffAtHMinus3C , errorRet)) {
241
+ return false ;
242
+ }
243
+ }
244
+
209
245
auto snapshotHMinus3C = qsnapman.GetSnapshotForBlock (llmqType, pBlockHMinus3CIndex);
210
246
if (!snapshotHMinus3C.has_value ()) {
211
247
errorRet = strprintf (" Can not find quorum snapshot at H-3C" );
@@ -231,11 +267,12 @@ bool BuildQuorumRotationInfo(CDeterministicMNManager& dmnman, CQuorumSnapshotMan
231
267
}
232
268
233
269
CSimplifiedMNListDiff mn4c;
234
- if (!BuildSimplifiedMNListDiff (dmnman, chainman, qblockman, qman, GetLastBaseBlockHash (baseBlockIndexes, pWorkBlockHMinus4CIndex), pWorkBlockHMinus4CIndex->GetBlockHash (), mn4c, errorRet)) {
270
+ if (!BuildSimplifiedMNListDiff (dmnman, chainman, qblockman, qman, GetLastBaseBlockHash (baseBlockIndexes, pWorkBlockHMinus4CIndex, use_legacy_construction ), pWorkBlockHMinus4CIndex->GetBlockHash (), mn4c, errorRet)) {
235
271
return false ;
236
272
}
237
- baseBlockIndexes.push_back (pWorkBlockHMinus4CIndex);
238
-
273
+ if (!use_legacy_construction) {
274
+ baseBlockIndexes.push_back (pWorkBlockHMinus4CIndex);
275
+ }
239
276
response.mnListDiffAtHMinus4C = std::move (mn4c);
240
277
} else {
241
278
response.extraShare = false ;
@@ -288,55 +325,59 @@ bool BuildQuorumRotationInfo(CDeterministicMNManager& dmnman, CQuorumSnapshotMan
288
325
}
289
326
290
327
CSimplifiedMNListDiff mnhneeded;
291
- if (!BuildSimplifiedMNListDiff (dmnman, chainman, qblockman, qman, GetLastBaseBlockHash (baseBlockIndexes, pNeededWorkBlockIndex), pNeededWorkBlockIndex->GetBlockHash (), mnhneeded, errorRet)) {
328
+ if (!BuildSimplifiedMNListDiff (dmnman, chainman, qblockman, qman, GetLastBaseBlockHash (baseBlockIndexes, pNeededWorkBlockIndex, use_legacy_construction ), pNeededWorkBlockIndex->GetBlockHash (), mnhneeded, errorRet)) {
292
329
return false ;
293
330
}
294
- baseBlockIndexes.push_back (pNeededWorkBlockIndex);
295
-
331
+ if (!use_legacy_construction) {
332
+ baseBlockIndexes.push_back (pNeededWorkBlockIndex);
333
+ }
296
334
response.mnListDiffList .push_back (mnhneeded);
297
335
}
298
336
299
- if (!BuildSimplifiedMNListDiff (dmnman, chainman, qblockman, qman,
300
- GetLastBaseBlockHash (baseBlockIndexes, pWorkBlockHMinus3CIndex),
301
- pWorkBlockHMinus3CIndex->GetBlockHash (), response.mnListDiffAtHMinus3C , errorRet)) {
302
- return false ;
303
- }
304
- baseBlockIndexes.push_back (pWorkBlockHMinus3CIndex);
337
+ if (!use_legacy_construction) {
338
+ if (!BuildSimplifiedMNListDiff (dmnman, chainman, qblockman, qman,
339
+ GetLastBaseBlockHash (baseBlockIndexes, pWorkBlockHMinus3CIndex, use_legacy_construction),
340
+ pWorkBlockHMinus3CIndex->GetBlockHash (), response.mnListDiffAtHMinus3C , errorRet)) {
341
+ return false ;
342
+ }
343
+ baseBlockIndexes.push_back (pWorkBlockHMinus3CIndex);
305
344
306
- if (!BuildSimplifiedMNListDiff (dmnman, chainman, qblockman, qman,
307
- GetLastBaseBlockHash (baseBlockIndexes, pWorkBlockHMinus2CIndex),
308
- pWorkBlockHMinus2CIndex->GetBlockHash (), response.mnListDiffAtHMinus2C , errorRet)) {
309
- return false ;
310
- }
311
- baseBlockIndexes.push_back (pWorkBlockHMinus2CIndex);
345
+ if (!BuildSimplifiedMNListDiff (dmnman, chainman, qblockman, qman,
346
+ GetLastBaseBlockHash (baseBlockIndexes, pWorkBlockHMinus2CIndex, use_legacy_construction ),
347
+ pWorkBlockHMinus2CIndex->GetBlockHash (), response.mnListDiffAtHMinus2C , errorRet)) {
348
+ return false ;
349
+ }
350
+ baseBlockIndexes.push_back (pWorkBlockHMinus2CIndex);
312
351
313
- if (!BuildSimplifiedMNListDiff (dmnman, chainman, qblockman, qman,
314
- GetLastBaseBlockHash (baseBlockIndexes, pWorkBlockHMinusCIndex),
315
- pWorkBlockHMinusCIndex->GetBlockHash (), response.mnListDiffAtHMinusC , errorRet)) {
316
- return false ;
317
- }
318
- baseBlockIndexes.push_back (pWorkBlockHMinusCIndex);
352
+ if (!BuildSimplifiedMNListDiff (dmnman, chainman, qblockman, qman,
353
+ GetLastBaseBlockHash (baseBlockIndexes, pWorkBlockHMinusCIndex, use_legacy_construction ),
354
+ pWorkBlockHMinusCIndex->GetBlockHash (), response.mnListDiffAtHMinusC , errorRet)) {
355
+ return false ;
356
+ }
357
+ baseBlockIndexes.push_back (pWorkBlockHMinusCIndex);
319
358
320
- if (!BuildSimplifiedMNListDiff (dmnman, chainman, qblockman, qman,
321
- GetLastBaseBlockHash (baseBlockIndexes, pWorkBlockHIndex),
322
- pWorkBlockHIndex->GetBlockHash (), response.mnListDiffH , errorRet)) {
323
- return false ;
324
- }
325
- baseBlockIndexes.push_back (pWorkBlockHIndex);
359
+ if (!BuildSimplifiedMNListDiff (dmnman, chainman, qblockman, qman,
360
+ GetLastBaseBlockHash (baseBlockIndexes, pWorkBlockHIndex, use_legacy_construction ),
361
+ pWorkBlockHIndex->GetBlockHash (), response.mnListDiffH , errorRet)) {
362
+ return false ;
363
+ }
364
+ baseBlockIndexes.push_back (pWorkBlockHIndex);
326
365
327
- if (!BuildSimplifiedMNListDiff (dmnman, chainman, qblockman, qman, GetLastBaseBlockHash (baseBlockIndexes, tipBlockIndex),
328
- tipBlockIndex->GetBlockHash (), response.mnListDiffTip , errorRet)) {
329
- return false ;
366
+ if (!BuildSimplifiedMNListDiff (dmnman, chainman, qblockman, qman, GetLastBaseBlockHash (baseBlockIndexes, tipBlockIndex, use_legacy_construction),
367
+ tipBlockIndex->GetBlockHash (), response.mnListDiffTip , errorRet)) {
368
+ return false ;
369
+ }
330
370
}
331
-
332
371
return true ;
333
372
}
334
373
335
- uint256 GetLastBaseBlockHash (Span<const CBlockIndex*> baseBlockIndexes, const CBlockIndex* blockIndex)
374
+ uint256 GetLastBaseBlockHash (Span<const CBlockIndex*> baseBlockIndexes, const CBlockIndex* blockIndex, bool use_legacy_construction )
336
375
{
337
376
uint256 hash;
338
- std::sort (baseBlockIndexes.begin (), baseBlockIndexes.end (),
339
- [](const CBlockIndex* a, const CBlockIndex* b) { return a->nHeight < b->nHeight ; });
377
+ if (!use_legacy_construction) {
378
+ std::sort (baseBlockIndexes.begin (), baseBlockIndexes.end (),
379
+ [](const CBlockIndex* a, const CBlockIndex* b) { return a->nHeight < b->nHeight ; });
380
+ }
340
381
for (const auto baseBlock : baseBlockIndexes) {
341
382
if (baseBlock->nHeight >= blockIndex->nHeight )
342
383
break ;
0 commit comments