Дорабатываю добавление блоков.
This commit is contained in:
AidarKC
2025-12-24 17:29:50 +03:00
parent 4e14f300f9
commit bead78b372
6 changed files with 156 additions and 145 deletions
@@ -1,5 +1,6 @@
package server.logic.ws_protocol.JSON.handlers.blockchain;
import blockchain.BchBlockEntry;
import shine.db.SqliteDbController;
import shine.db.dao.BlockchainStateDAO;
import shine.db.dao.BlocksDAO;
@@ -31,9 +32,8 @@ public final class BlockchainWriter {
public void appendBlockAndState(
String login,
String blockchainName,
int globalNumber,
String prevGlobalHashHex,
byte[] blockBytes,
BchBlockEntry block,
BlockchainStateEntry stOrNull,
String newHashHex
) throws SQLException {
@@ -45,10 +45,10 @@ public final class BlockchainWriter {
try {
// 1) блок
insertBlockRow(c, login, blockchainName, globalNumber, prevGlobalHashHex, blockBytes);
insertBlockRow(c, login, blockchainName, prevGlobalHashHex, block);
// 2) state
appendState(c, blockchainName, globalNumber, stOrNull, newHashHex);
appendState(c, blockchainName, block.recordNumber, stOrNull, newHashHex);
// 3) commit
c.commit();
@@ -105,9 +105,8 @@ public final class BlockchainWriter {
Connection c,
String login,
String blockchainName,
int globalNumber,
String prevGlobalHashHex,
byte[] blockBytes
BchBlockEntry block
) throws SQLException {
BlockEntry e = new BlockEntry();
@@ -117,19 +116,20 @@ public final class BlockchainWriter {
e.setBchName(blockchainName);
// Глобальная нумерация
e.setBlockGlobalNumber(globalNumber);
e.setBlockGlobalNumber(block.recordNumber);
e.setBlockGlobalPreHashe(prevGlobalHashHex);
// Линии пока не используются: lineIndex=0, lineNumber=globalNumber
e.setBlockLineIndex(0);
e.setBlockLineNumber(globalNumber);
e.setBlockLineNumber(block.recordNumber);
e.setBlockLinePreHashe(prevGlobalHashHex);
// msgType у тебя пока 0 (при желании позже можно ставить по Body/type)
e.setMsgType(0);
// ✅ Теперь сохраняем тип блока
e.setMsgType(block.body.type());
// Сырые байты полного блока
e.setBlockByte(blockBytes);
e.setBlockByte(block.toBytes());
// Поля "кому" (для сообщений/трансферов) пока пустые
e.setToLogin(null);
@@ -140,4 +140,4 @@ public final class BlockchainWriter {
// UPSERT блока
blocksDAO.upsert(c, e);
}
}
}
@@ -2,7 +2,6 @@ package server.logic.ws_protocol.JSON.handlers.blockchain;
import blockchain.BchBlockEntry;
import blockchain.BchCryptoVerifier;
import blockchain.body.BodyRecordParser;
import server.logic.ws_protocol.JSON.ConnectionContext;
import server.logic.ws_protocol.JSON.entyties.Net_Request;
import server.logic.ws_protocol.JSON.entyties.Net_Response;
@@ -124,9 +123,9 @@ public final class Net_AddBlock_Handler implements JsonMessageHandler {
return new AddBlockResult(WireCodes.Status.BAD_REQUEST, "bad_block_format", 0, "");
}
// 5) Парсим и валидируем body (type/version + содержимое)
// 5) Валидируем body (type/version + содержимое) — теперь body уже распарсен внутри BchBlockEntry
try {
BodyRecordParser.parse(block.bodyBytes).check();
block.body.check();
} catch (Exception e) {
return new AddBlockResult(WireCodes.Status.BAD_REQUEST, "bad_block_body", 0, "");
}
@@ -221,9 +220,8 @@ public final class Net_AddBlock_Handler implements JsonMessageHandler {
dbWriter.appendBlockAndState(
login,
blockchainName,
globalNumber,
nn(prevGlobalHashHex),
blockBytes,
block, // ✅ передаём целиком объект блока
st,
newHashHex
);
@@ -303,4 +301,4 @@ public final class Net_AddBlock_Handler implements JsonMessageHandler {
}
return new String(out);
}
}
}