Сделал более понятный названия у интерфейса  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.
*
* Новый префикс для line-сообщений (BigEndian) в НАЧАЛЕ bodyBytes:
* [4] lineCode код линии:
* - 0 для нулевой линии
* - для каналов: blockNumber "заглавия линии" (CREATE_CHANNEL или HEADER/0)
* [4] prevLineNumber
* [32] prevLineHash32
* [4] thisLineNumber
* Line-prefix (BigEndian) в НАЧАЛЕ bodyBytes:
* [4] lineCode код линии (root-идентификатор):
* - 0 для дефолтной линии/канала "0" (root = HEADER, blockNumber=0)
* - для канала "X": blockNumber root-блока канала (CREATE_CHANNEL)
*
* [4] prevLineBlockGlobalNumber глобальный номер предыдущего блока в этой линии
* [32] prevLineBlockHash32 hash32 предыдущего блока в этой линии
*
* [4] lineSeq порядковый номер сообщения внутри линии (1..N)
*
* Важно:
* - Правильность prevLineNumber/hash и согласование thisLineNumber
* проверяется на сервере/в БД при вставке (а не в body.check()).
* - Проверка связности линии (prevLineBlockGlobalNumber prevLineBlockHash32) и корректности lineSeq
* выполняется на сервере/в БД при вставке (а не в body.check()).
*/
public interface BodyHasLine {
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 ====================== */
@Override public int lineCode() { return lineCode; }
@Override public int prevLineNumber() { return prevLineNumber; }
@Override public byte[] prevLineHash32() { return prevLineHash32 == null ? null : Arrays.copyOf(prevLineHash32, 32); }
@Override public int thisLineNumber() { return thisLineNumber; }
@Override public int prevLineBlockGlobalNumber() { return prevLineNumber; }
@Override public byte[] prevLineBlockHash32() { return prevLineHash32 == null ? null : Arrays.copyOf(prevLineHash32, 32); }
@Override public int lineSeq() { return thisLineNumber; }
/* ====================== BodyHasTarget ===================== */
@Override public String toBchName() { return toBlockchainName; }

View File

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

View File

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

View File

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

View File

@ -195,7 +195,7 @@ public final class UserParamBody implements BodyRecord, BodyHasLine {
/* ====================== BodyHasLine ====================== */
@Override public int lineCode() { return lineCode; }
@Override public int prevLineNumber() { return prevLineNumber; }
@Override public byte[] prevLineHash32() { return prevLineHash32 == null ? null : Arrays.copyOf(prevLineHash32, 32); }
@Override public int thisLineNumber() { return thisLineNumber; }
@Override public int prevLineBlockGlobalNumber() { return prevLineNumber; }
@Override public byte[] prevLineBlockHash32() { return prevLineHash32 == null ? null : Arrays.copyOf(prevLineHash32, 32); }
@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) {
lineCode = bl.lineCode();
prevLineNumber = bl.prevLineNumber();
prevLineHash32 = bl.prevLineHash32();
thisLineNumber = bl.thisLineNumber();
prevLineNumber = bl.prevLineBlockGlobalNumber();
prevLineHash32 = bl.prevLineBlockHash32();
thisLineNumber = bl.lineSeq();
// Нормализация: -1 не пишем в БД (для совместимости со старым TextBody)
if (prevLineNumber != null && prevLineNumber == -1) {

View File

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