SHA256
fix: считать шаг линии через lineStep перед AddBlock
This commit is contained in:
@@ -639,6 +639,14 @@ function normalizeMessageRefTarget(target, actionName = 'action') {
|
||||
};
|
||||
}
|
||||
|
||||
function resolveLatestLineStep(message) {
|
||||
const lineStep = Number(message?.lineStep);
|
||||
if (Number.isFinite(lineStep) && lineStep >= 0) return lineStep;
|
||||
const fallbackByVersions = Number(message?.versionsTotal);
|
||||
if (Number.isFinite(fallbackByVersions) && fallbackByVersions > 0) return Math.max(0, fallbackByVersions - 1);
|
||||
return null;
|
||||
}
|
||||
|
||||
function buildBlockPreimage({ prevBlockHashHex, blockNumber, msgType, msgSubType, msgVersion = 1, bodyBytes }) {
|
||||
const prevHashBytes = hexToBytes(normalizeHex32(prevBlockHashHex));
|
||||
const body = bodyBytes || new Uint8Array(0);
|
||||
@@ -1092,12 +1100,12 @@ export class AuthService {
|
||||
const latestMessage = Array.isArray(latestPayload?.messages) ? latestPayload.messages[0] : null;
|
||||
const latestBlockNumber = Number(latestMessage?.messageRef?.blockNumber);
|
||||
const latestBlockHash = normalizeHex32(latestMessage?.messageRef?.blockHash, '');
|
||||
const latestVersionsTotal = Number(latestMessage?.versionsTotal);
|
||||
const latestLineStep = resolveLatestLineStep(latestMessage);
|
||||
if (Number.isFinite(latestBlockNumber) && latestBlockNumber >= 0 && latestBlockHash) {
|
||||
prevLineNumber = latestBlockNumber;
|
||||
prevLineHashHex = latestBlockHash;
|
||||
thisLineNumber = Number.isFinite(latestVersionsTotal) && latestVersionsTotal > 0
|
||||
? Math.max(0, latestVersionsTotal)
|
||||
thisLineNumber = Number.isFinite(latestLineStep)
|
||||
? Math.max(0, latestLineStep + 1)
|
||||
: 1;
|
||||
}
|
||||
} catch {
|
||||
@@ -1169,12 +1177,12 @@ export class AuthService {
|
||||
const latestVersion = latestVersions[latestVersions.length - 1] || null;
|
||||
const latestBlockNumber = Number(latestVersion?.blockNumber ?? latestMessage?.messageRef?.blockNumber);
|
||||
const latestBlockHash = normalizeHex32(latestVersion?.blockHash ?? latestMessage?.messageRef?.blockHash, '');
|
||||
const latestVersionsTotal = Number(latestMessage?.versionsTotal);
|
||||
const latestLineStep = resolveLatestLineStep(latestMessage);
|
||||
if (Number.isFinite(latestBlockNumber) && latestBlockNumber >= 0 && latestBlockHash) {
|
||||
prevLineNumber = latestBlockNumber;
|
||||
prevLineHashHex = latestBlockHash;
|
||||
thisLineNumber = Number.isFinite(latestVersionsTotal) && latestVersionsTotal > 0
|
||||
? Math.max(1, latestVersionsTotal)
|
||||
thisLineNumber = Number.isFinite(latestLineStep)
|
||||
? Math.max(0, latestLineStep)
|
||||
: 1;
|
||||
}
|
||||
} catch {
|
||||
@@ -1497,14 +1505,13 @@ export class AuthService {
|
||||
const latestMessage = Array.isArray(latestPayload?.messages) ? latestPayload.messages[0] : null;
|
||||
const latestBlockNumber = Number(latestMessage?.messageRef?.blockNumber);
|
||||
const latestBlockHash = normalizeHex32(latestMessage?.messageRef?.blockHash, '');
|
||||
const latestVersionsTotal = Number(latestMessage?.versionsTotal);
|
||||
const latestLineStep = resolveLatestLineStep(latestMessage);
|
||||
if (Number.isFinite(latestBlockNumber) && latestBlockNumber >= 0 && latestBlockHash) {
|
||||
prevLineNumber = latestBlockNumber;
|
||||
prevLineHashHex = latestBlockHash;
|
||||
// В line-цепочке thisLineNumber — это номер шага линии, а не глобальный blockNumber.
|
||||
// Для следующего POST берем шаг после последней известной версии сообщения.
|
||||
thisLineNumber = Number.isFinite(latestVersionsTotal) && latestVersionsTotal > 0
|
||||
? Math.max(0, latestVersionsTotal)
|
||||
// Для нового POST берём следующий шаг после последнего сообщения линии.
|
||||
thisLineNumber = Number.isFinite(latestLineStep)
|
||||
? Math.max(0, latestLineStep + 1)
|
||||
: 1;
|
||||
}
|
||||
} catch {
|
||||
|
||||
Reference in New Issue
Block a user