Сделал более понятный названия у интерфейса  BodyHasLine

(всё работает)
This commit is contained in:
AidarKC 2026-01-23 13:05:29 +03:00
parent c1964adb58
commit 9f1ca37977
8 changed files with 34 additions and 32 deletions

View File

@ -3,25 +3,27 @@ package blockchain.body;
/** /**
* BodyHasLine для типов, которые имеют линейные поля в body. * BodyHasLine для типов, которые имеют линейные поля в body.
* *
* Новый префикс для line-сообщений (BigEndian) в НАЧАЛЕ bodyBytes: * Line-prefix (BigEndian) в НАЧАЛЕ bodyBytes:
* [4] lineCode код линии: * [4] lineCode код линии (root-идентификатор):
* - 0 для нулевой линии * - 0 для дефолтной линии/канала "0" (root = HEADER, blockNumber=0)
* - для каналов: blockNumber "заглавия линии" (CREATE_CHANNEL или HEADER/0) * - для канала "X": blockNumber root-блока канала (CREATE_CHANNEL)
* [4] prevLineNumber *
* [32] prevLineHash32 * [4] prevLineBlockGlobalNumber глобальный номер предыдущего блока в этой линии
* [4] thisLineNumber * [32] prevLineBlockHash32 hash32 предыдущего блока в этой линии
*
* [4] lineSeq порядковый номер сообщения внутри линии (1..N)
* *
* Важно: * Важно:
* - Правильность prevLineNumber/hash и согласование thisLineNumber * - Проверка связности линии (prevLineBlockGlobalNumber prevLineBlockHash32) и корректности lineSeq
* проверяется на сервере/в БД при вставке (а не в body.check()). * выполняется на сервере/в БД при вставке (а не в body.check()).
*/ */
public interface BodyHasLine { public interface BodyHasLine {
int lineCode(); int lineCode();
int prevLineNumber(); int prevLineBlockGlobalNumber();
byte[] prevLineHash32(); byte[] prevLineBlockHash32();
int thisLineNumber(); int lineSeq();
} }

View File

@ -248,9 +248,9 @@ public final class ConnectionBody implements BodyRecord, BodyHasTarget, BodyHasL
/* ====================== BodyHasLine ====================== */ /* ====================== BodyHasLine ====================== */
@Override public int lineCode() { return lineCode; } @Override public int lineCode() { return lineCode; }
@Override public int prevLineNumber() { return prevLineNumber; } @Override public int prevLineBlockGlobalNumber() { return prevLineNumber; }
@Override public byte[] prevLineHash32() { return prevLineHash32 == null ? null : Arrays.copyOf(prevLineHash32, 32); } @Override public byte[] prevLineBlockHash32() { return prevLineHash32 == null ? null : Arrays.copyOf(prevLineHash32, 32); }
@Override public int thisLineNumber() { return thisLineNumber; } @Override public int lineSeq() { return thisLineNumber; }
/* ====================== BodyHasTarget ===================== */ /* ====================== BodyHasTarget ===================== */
@Override public String toBchName() { return toBlockchainName; } @Override public String toBchName() { return toBlockchainName; }

View File

@ -164,7 +164,7 @@ public final class CreateChannelBody implements BodyRecord, BodyHasLine {
/* ====================== BodyHasLine ====================== */ /* ====================== BodyHasLine ====================== */
@Override public int lineCode() { return lineCode; } @Override public int lineCode() { return lineCode; }
@Override public int prevLineNumber() { return prevLineNumber; } @Override public int prevLineBlockGlobalNumber() { return prevLineNumber; }
@Override public byte[] prevLineHash32() { return prevLineHash32 == null ? null : Arrays.copyOf(prevLineHash32, 32); } @Override public byte[] prevLineBlockHash32() { return prevLineHash32 == null ? null : Arrays.copyOf(prevLineHash32, 32); }
@Override public int thisLineNumber() { return thisLineNumber; } @Override public int lineSeq() { return thisLineNumber; }
} }

View File

@ -505,12 +505,12 @@ public final class TextBody implements BodyRecord, BodyHasTarget, BodyHasLine {
/* ====================== BodyHasLine ====================== */ /* ====================== BodyHasLine ====================== */
@Override public int lineCode() { return lineCode; } @Override public int lineCode() { return lineCode; }
@Override public int prevLineNumber() { return prevLineNumber; } @Override public int prevLineBlockGlobalNumber() { return prevLineNumber; }
@Override public byte[] prevLineHash32() { @Override public byte[] prevLineBlockHash32() {
if (prevLineHash32 == null) return null; if (prevLineHash32 == null) return null;
return Arrays.copyOf(prevLineHash32, 32); return Arrays.copyOf(prevLineHash32, 32);
} }
@Override public int thisLineNumber() { return thisLineNumber; } @Override public int lineSeq() { return thisLineNumber; }
/* ====================== BodyHasTarget ===================== */ /* ====================== BodyHasTarget ===================== */
@Override public String toBchName() { return toBlockchainName; } @Override public String toBchName() { return toBlockchainName; }

View File

@ -219,9 +219,9 @@ public final class TextLineBody implements BodyRecord, BodyHasLine, BodyHasTarge
/* ====================== BodyHasLine ====================== */ /* ====================== BodyHasLine ====================== */
@Override public int lineCode() { return lineCode; } @Override public int lineCode() { return lineCode; }
@Override public int prevLineNumber() { return prevLineNumber; } @Override public int prevLineBlockGlobalNumber() { return prevLineNumber; }
@Override public byte[] prevLineHash32() { return Arrays.copyOf(prevLineHash32, 32); } @Override public byte[] prevLineBlockHash32() { return Arrays.copyOf(prevLineHash32, 32); }
@Override public int thisLineNumber() { return thisLineNumber; } @Override public int lineSeq() { return thisLineNumber; }
/* ====================== BodyHasTarget ===================== */ /* ====================== BodyHasTarget ===================== */
@Override public String toBchName() { return null; } // по ТЗ: не хранить @Override public String toBchName() { return null; } // по ТЗ: не хранить

View File

@ -195,7 +195,7 @@ public final class UserParamBody implements BodyRecord, BodyHasLine {
/* ====================== BodyHasLine ====================== */ /* ====================== BodyHasLine ====================== */
@Override public int lineCode() { return lineCode; } @Override public int lineCode() { return lineCode; }
@Override public int prevLineNumber() { return prevLineNumber; } @Override public int prevLineBlockGlobalNumber() { return prevLineNumber; }
@Override public byte[] prevLineHash32() { return prevLineHash32 == null ? null : Arrays.copyOf(prevLineHash32, 32); } @Override public byte[] prevLineBlockHash32() { return prevLineHash32 == null ? null : Arrays.copyOf(prevLineHash32, 32); }
@Override public int thisLineNumber() { return thisLineNumber; } @Override public int lineSeq() { return thisLineNumber; }
} }

View File

@ -232,9 +232,9 @@ public final class Net_AddBlock_Handler implements JsonMessageHandler {
if (block.body instanceof BodyHasLine bl) { if (block.body instanceof BodyHasLine bl) {
lineCode = bl.lineCode(); lineCode = bl.lineCode();
prevLineNumber = bl.prevLineNumber(); prevLineNumber = bl.prevLineBlockGlobalNumber();
prevLineHash32 = bl.prevLineHash32(); prevLineHash32 = bl.prevLineBlockHash32();
thisLineNumber = bl.thisLineNumber(); thisLineNumber = bl.lineSeq();
// Нормализация: -1 не пишем в БД (для совместимости со старым TextBody) // Нормализация: -1 не пишем в БД (для совместимости со старым TextBody)
if (prevLineNumber != null && prevLineNumber == -1) { if (prevLineNumber != null && prevLineNumber == -1) {

View File

@ -294,13 +294,13 @@ public final class ChainState {
if (t == TYPE_CONNECTION && body instanceof BodyHasLine hlc) { if (t == TYPE_CONNECTION && body instanceof BodyHasLine hlc) {
connectionLine.lastGlobalNumber = blockNumber; connectionLine.lastGlobalNumber = blockNumber;
connectionLine.lastHashHex = hex64; connectionLine.lastHashHex = hex64;
connectionLine.lastThisLineNumber = hlc.thisLineNumber(); connectionLine.lastThisLineNumber = hlc.lineSeq();
return; return;
} }
if (t == TYPE_USER_PARAM && body instanceof BodyHasLine hlu) { if (t == TYPE_USER_PARAM && body instanceof BodyHasLine hlu) {
userParamLine.lastGlobalNumber = blockNumber; userParamLine.lastGlobalNumber = blockNumber;
userParamLine.lastHashHex = hex64; userParamLine.lastHashHex = hex64;
userParamLine.lastThisLineNumber = hlu.thisLineNumber(); userParamLine.lastThisLineNumber = hlu.lineSeq();
return; return;
} }