Skip to content

Commit 02c47fd

Browse files
committed
fix(perf): build mnlistdiffs in rotation info using dynamically the highest known base block
1 parent 0e9105e commit 02c47fd

File tree

1 file changed

+21
-16
lines changed

1 file changed

+21
-16
lines changed

src/llmq/snapshot.cpp

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,6 @@ bool BuildQuorumRotationInfo(CDeterministicMNManager& dmnman, CQuorumSnapshotMan
122122
errorRet = strprintf("tip block not found");
123123
return false;
124124
}
125-
//Build MN list Diff always with highest baseblock
126-
if (!BuildSimplifiedMNListDiff(dmnman, chainman, qblockman, qman, baseBlockIndexes.back()->GetBlockHash(), tipBlockIndex->GetBlockHash(), response.mnListDiffTip, errorRet)) {
127-
return false;
128-
}
129125

130126
const CBlockIndex* blockIndex = chainman.m_blockman.LookupBlockIndex(request.blockRequestHash);
131127
if (!blockIndex) {
@@ -202,10 +198,6 @@ bool BuildQuorumRotationInfo(CDeterministicMNManager& dmnman, CQuorumSnapshotMan
202198
const CBlockIndex* pWorkBlockHMinus4CIndex = pBlockHMinus4CIndex->GetAncestor(pBlockHMinus4CIndex->nHeight - workDiff);
203199
//Checked later if extraShare is on
204200

205-
if (!BuildSimplifiedMNListDiff(dmnman, chainman, qblockman, qman, GetLastBaseBlockHash(baseBlockIndexes, pWorkBlockHMinusCIndex), pWorkBlockHMinusCIndex->GetBlockHash(), response.mnListDiffAtHMinusC, errorRet)) {
206-
return false;
207-
}
208-
209201
auto snapshotHMinusC = qsnapman.GetSnapshotForBlock(llmqType, pBlockHMinusCIndex);
210202
if (!snapshotHMinusC.has_value()) {
211203
errorRet = strprintf("Can not find quorum snapshot at H-C");
@@ -214,10 +206,6 @@ bool BuildQuorumRotationInfo(CDeterministicMNManager& dmnman, CQuorumSnapshotMan
214206
response.quorumSnapshotAtHMinusC = std::move(snapshotHMinusC.value());
215207
}
216208

217-
if (!BuildSimplifiedMNListDiff(dmnman, chainman, qblockman, qman, GetLastBaseBlockHash(baseBlockIndexes, pWorkBlockHMinus2CIndex), pWorkBlockHMinus2CIndex->GetBlockHash(), response.mnListDiffAtHMinus2C, errorRet)) {
218-
return false;
219-
}
220-
221209
auto snapshotHMinus2C = qsnapman.GetSnapshotForBlock(llmqType, pBlockHMinus2CIndex);
222210
if (!snapshotHMinus2C.has_value()) {
223211
errorRet = strprintf("Can not find quorum snapshot at H-2C");
@@ -226,10 +214,6 @@ bool BuildQuorumRotationInfo(CDeterministicMNManager& dmnman, CQuorumSnapshotMan
226214
response.quorumSnapshotAtHMinus2C = std::move(snapshotHMinus2C.value());
227215
}
228216

229-
if (!BuildSimplifiedMNListDiff(dmnman, chainman, qblockman, qman, GetLastBaseBlockHash(baseBlockIndexes, pWorkBlockHMinus3CIndex), pWorkBlockHMinus3CIndex->GetBlockHash(), response.mnListDiffAtHMinus3C, errorRet)) {
230-
return false;
231-
}
232-
233217
auto snapshotHMinus3C = qsnapman.GetSnapshotForBlock(llmqType, pBlockHMinus3CIndex);
234218
if (!snapshotHMinus3C.has_value()) {
235219
errorRet = strprintf("Can not find quorum snapshot at H-3C");
@@ -258,6 +242,7 @@ bool BuildQuorumRotationInfo(CDeterministicMNManager& dmnman, CQuorumSnapshotMan
258242
if (!BuildSimplifiedMNListDiff(dmnman, chainman, qblockman, qman, GetLastBaseBlockHash(baseBlockIndexes, pWorkBlockHMinus4CIndex), pWorkBlockHMinus4CIndex->GetBlockHash(), mn4c, errorRet)) {
259243
return false;
260244
}
245+
baseBlockIndexes.push_back(pWorkBlockHMinus4CIndex);
261246

262247
response.mnListDiffAtHMinus4C = std::move(mn4c);
263248
} else {
@@ -314,10 +299,30 @@ bool BuildQuorumRotationInfo(CDeterministicMNManager& dmnman, CQuorumSnapshotMan
314299
if (!BuildSimplifiedMNListDiff(dmnman, chainman, qblockman, qman, GetLastBaseBlockHash(baseBlockIndexes, pNeededWorkBlockIndex), pNeededWorkBlockIndex->GetBlockHash(), mnhneeded, errorRet)) {
315300
return false;
316301
}
302+
baseBlockIndexes.push_back(pNeededWorkBlockIndex);
317303

318304
response.mnListDiffList.push_back(mnhneeded);
319305
}
320306

307+
if (!BuildSimplifiedMNListDiff(dmnman, chainman, qblockman, qman, GetLastBaseBlockHash(baseBlockIndexes, pWorkBlockHMinus3CIndex), pWorkBlockHMinus3CIndex->GetBlockHash(), response.mnListDiffAtHMinus3C, errorRet)) {
308+
return false;
309+
}
310+
baseBlockIndexes.push_back(pWorkBlockHMinus3CIndex);
311+
312+
if (!BuildSimplifiedMNListDiff(dmnman, chainman, qblockman, qman, GetLastBaseBlockHash(baseBlockIndexes, pWorkBlockHMinus2CIndex), pWorkBlockHMinus2CIndex->GetBlockHash(), response.mnListDiffAtHMinus2C, errorRet)) {
313+
return false;
314+
}
315+
baseBlockIndexes.push_back(pWorkBlockHMinus2CIndex);
316+
317+
if (!BuildSimplifiedMNListDiff(dmnman, chainman, qblockman, qman, GetLastBaseBlockHash(baseBlockIndexes, pWorkBlockHMinusCIndex), pWorkBlockHMinusCIndex->GetBlockHash(), response.mnListDiffAtHMinusC, errorRet)) {
318+
return false;
319+
}
320+
baseBlockIndexes.push_back(pWorkBlockHMinusCIndex);
321+
322+
if (!BuildSimplifiedMNListDiff(dmnman, chainman, qblockman, qman, baseBlockIndexes.back()->GetBlockHash(), tipBlockIndex->GetBlockHash(), response.mnListDiffTip, errorRet)) {
323+
return false;
324+
}
325+
321326
return true;
322327
}
323328

0 commit comments

Comments
 (0)