From 9f1ca3797743262f509ef4a22080afe06a4449dfc647261ab99482a2668d2a4a Mon Sep 17 00:00:00 2001 From: AidarKC Date: Fri, 23 Jan 2026 13:05:29 +0300 Subject: [PATCH] 23 01 25 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Сделал более понятный названия у интерфейса BodyHasLine (всё работает) --- .../java/blockchain/body/BodyHasLine.java | 26 ++++++++++--------- .../java/blockchain/body/ConnectionBody.java | 6 ++--- .../blockchain/body/CreateChannelBody.java | 6 ++--- .../main/java/blockchain/body/TextBody.java | 6 ++--- .../java/blockchain/body/TextLineBody.java | 6 ++--- .../java/blockchain/body/UserParamBody.java | 6 ++--- .../blockchain/Net_AddBlock_Handler.java | 6 ++--- .../java/test/it/blockchain/ChainState.java | 4 +-- 8 files changed, 34 insertions(+), 32 deletions(-) diff --git a/shine-server-blockchain/src/main/java/blockchain/body/BodyHasLine.java b/shine-server-blockchain/src/main/java/blockchain/body/BodyHasLine.java index 7f130c1..35bac54 100644 --- a/shine-server-blockchain/src/main/java/blockchain/body/BodyHasLine.java +++ b/shine-server-blockchain/src/main/java/blockchain/body/BodyHasLine.java @@ -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(); } \ No newline at end of file diff --git a/shine-server-blockchain/src/main/java/blockchain/body/ConnectionBody.java b/shine-server-blockchain/src/main/java/blockchain/body/ConnectionBody.java index 054af7f..bca7cb9 100644 --- a/shine-server-blockchain/src/main/java/blockchain/body/ConnectionBody.java +++ b/shine-server-blockchain/src/main/java/blockchain/body/ConnectionBody.java @@ -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; } diff --git a/shine-server-blockchain/src/main/java/blockchain/body/CreateChannelBody.java b/shine-server-blockchain/src/main/java/blockchain/body/CreateChannelBody.java index 7578be5..d6df123 100644 --- a/shine-server-blockchain/src/main/java/blockchain/body/CreateChannelBody.java +++ b/shine-server-blockchain/src/main/java/blockchain/body/CreateChannelBody.java @@ -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; } } \ No newline at end of file diff --git a/shine-server-blockchain/src/main/java/blockchain/body/TextBody.java b/shine-server-blockchain/src/main/java/blockchain/body/TextBody.java index b51a46c..138102e 100644 --- a/shine-server-blockchain/src/main/java/blockchain/body/TextBody.java +++ b/shine-server-blockchain/src/main/java/blockchain/body/TextBody.java @@ -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; } diff --git a/shine-server-blockchain/src/main/java/blockchain/body/TextLineBody.java b/shine-server-blockchain/src/main/java/blockchain/body/TextLineBody.java index 4a8f224..9a24d00 100644 --- a/shine-server-blockchain/src/main/java/blockchain/body/TextLineBody.java +++ b/shine-server-blockchain/src/main/java/blockchain/body/TextLineBody.java @@ -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; } // по ТЗ: не хранить diff --git a/shine-server-blockchain/src/main/java/blockchain/body/UserParamBody.java b/shine-server-blockchain/src/main/java/blockchain/body/UserParamBody.java index 95beda6..0ff58aa 100644 --- a/shine-server-blockchain/src/main/java/blockchain/body/UserParamBody.java +++ b/shine-server-blockchain/src/main/java/blockchain/body/UserParamBody.java @@ -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; } } \ No newline at end of file diff --git a/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/Net_AddBlock_Handler.java b/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/Net_AddBlock_Handler.java index 596a982..519a08f 100644 --- a/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/Net_AddBlock_Handler.java +++ b/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/Net_AddBlock_Handler.java @@ -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) { diff --git a/src/test/java/test/it/blockchain/ChainState.java b/src/test/java/test/it/blockchain/ChainState.java index 2919c87..ee9f596 100644 --- a/src/test/java/test/it/blockchain/ChainState.java +++ b/src/test/java/test/it/blockchain/ChainState.java @@ -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; }