fix: считать шаг линии через lineStep перед AddBlock
This commit is contained in:
parent
fd99250882
commit
aa2644d812
@ -1,2 +1,2 @@
|
|||||||
client.version=1.2.82
|
client.version=1.2.83
|
||||||
server.version=1.2.76
|
server.version=1.2.77
|
||||||
|
|||||||
@ -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 }) {
|
function buildBlockPreimage({ prevBlockHashHex, blockNumber, msgType, msgSubType, msgVersion = 1, bodyBytes }) {
|
||||||
const prevHashBytes = hexToBytes(normalizeHex32(prevBlockHashHex));
|
const prevHashBytes = hexToBytes(normalizeHex32(prevBlockHashHex));
|
||||||
const body = bodyBytes || new Uint8Array(0);
|
const body = bodyBytes || new Uint8Array(0);
|
||||||
@ -1092,12 +1100,12 @@ export class AuthService {
|
|||||||
const latestMessage = Array.isArray(latestPayload?.messages) ? latestPayload.messages[0] : null;
|
const latestMessage = Array.isArray(latestPayload?.messages) ? latestPayload.messages[0] : null;
|
||||||
const latestBlockNumber = Number(latestMessage?.messageRef?.blockNumber);
|
const latestBlockNumber = Number(latestMessage?.messageRef?.blockNumber);
|
||||||
const latestBlockHash = normalizeHex32(latestMessage?.messageRef?.blockHash, '');
|
const latestBlockHash = normalizeHex32(latestMessage?.messageRef?.blockHash, '');
|
||||||
const latestVersionsTotal = Number(latestMessage?.versionsTotal);
|
const latestLineStep = resolveLatestLineStep(latestMessage);
|
||||||
if (Number.isFinite(latestBlockNumber) && latestBlockNumber >= 0 && latestBlockHash) {
|
if (Number.isFinite(latestBlockNumber) && latestBlockNumber >= 0 && latestBlockHash) {
|
||||||
prevLineNumber = latestBlockNumber;
|
prevLineNumber = latestBlockNumber;
|
||||||
prevLineHashHex = latestBlockHash;
|
prevLineHashHex = latestBlockHash;
|
||||||
thisLineNumber = Number.isFinite(latestVersionsTotal) && latestVersionsTotal > 0
|
thisLineNumber = Number.isFinite(latestLineStep)
|
||||||
? Math.max(0, latestVersionsTotal)
|
? Math.max(0, latestLineStep + 1)
|
||||||
: 1;
|
: 1;
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
@ -1169,12 +1177,12 @@ export class AuthService {
|
|||||||
const latestVersion = latestVersions[latestVersions.length - 1] || null;
|
const latestVersion = latestVersions[latestVersions.length - 1] || null;
|
||||||
const latestBlockNumber = Number(latestVersion?.blockNumber ?? latestMessage?.messageRef?.blockNumber);
|
const latestBlockNumber = Number(latestVersion?.blockNumber ?? latestMessage?.messageRef?.blockNumber);
|
||||||
const latestBlockHash = normalizeHex32(latestVersion?.blockHash ?? latestMessage?.messageRef?.blockHash, '');
|
const latestBlockHash = normalizeHex32(latestVersion?.blockHash ?? latestMessage?.messageRef?.blockHash, '');
|
||||||
const latestVersionsTotal = Number(latestMessage?.versionsTotal);
|
const latestLineStep = resolveLatestLineStep(latestMessage);
|
||||||
if (Number.isFinite(latestBlockNumber) && latestBlockNumber >= 0 && latestBlockHash) {
|
if (Number.isFinite(latestBlockNumber) && latestBlockNumber >= 0 && latestBlockHash) {
|
||||||
prevLineNumber = latestBlockNumber;
|
prevLineNumber = latestBlockNumber;
|
||||||
prevLineHashHex = latestBlockHash;
|
prevLineHashHex = latestBlockHash;
|
||||||
thisLineNumber = Number.isFinite(latestVersionsTotal) && latestVersionsTotal > 0
|
thisLineNumber = Number.isFinite(latestLineStep)
|
||||||
? Math.max(1, latestVersionsTotal)
|
? Math.max(0, latestLineStep)
|
||||||
: 1;
|
: 1;
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
@ -1497,14 +1505,13 @@ export class AuthService {
|
|||||||
const latestMessage = Array.isArray(latestPayload?.messages) ? latestPayload.messages[0] : null;
|
const latestMessage = Array.isArray(latestPayload?.messages) ? latestPayload.messages[0] : null;
|
||||||
const latestBlockNumber = Number(latestMessage?.messageRef?.blockNumber);
|
const latestBlockNumber = Number(latestMessage?.messageRef?.blockNumber);
|
||||||
const latestBlockHash = normalizeHex32(latestMessage?.messageRef?.blockHash, '');
|
const latestBlockHash = normalizeHex32(latestMessage?.messageRef?.blockHash, '');
|
||||||
const latestVersionsTotal = Number(latestMessage?.versionsTotal);
|
const latestLineStep = resolveLatestLineStep(latestMessage);
|
||||||
if (Number.isFinite(latestBlockNumber) && latestBlockNumber >= 0 && latestBlockHash) {
|
if (Number.isFinite(latestBlockNumber) && latestBlockNumber >= 0 && latestBlockHash) {
|
||||||
prevLineNumber = latestBlockNumber;
|
prevLineNumber = latestBlockNumber;
|
||||||
prevLineHashHex = latestBlockHash;
|
prevLineHashHex = latestBlockHash;
|
||||||
// В line-цепочке thisLineNumber — это номер шага линии, а не глобальный blockNumber.
|
// Для нового POST берём следующий шаг после последнего сообщения линии.
|
||||||
// Для следующего POST берем шаг после последней известной версии сообщения.
|
thisLineNumber = Number.isFinite(latestLineStep)
|
||||||
thisLineNumber = Number.isFinite(latestVersionsTotal) && latestVersionsTotal > 0
|
? Math.max(0, latestLineStep + 1)
|
||||||
? Math.max(0, latestVersionsTotal)
|
|
||||||
: 1;
|
: 1;
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
|
|||||||
@ -179,7 +179,7 @@ final class ChannelsReadSupport {
|
|||||||
static List<PostBlock> channelPosts(Connection c, String ownerBch, int lineCode, int limit, boolean asc) throws SQLException {
|
static List<PostBlock> channelPosts(Connection c, String ownerBch, int lineCode, int limit, boolean asc) throws SQLException {
|
||||||
String order = asc ? "ASC" : "DESC";
|
String order = asc ? "ASC" : "DESC";
|
||||||
String sql = """
|
String sql = """
|
||||||
SELECT login,bch_name,block_number,block_hash,block_bytes,to_bch_name,to_block_number,to_block_hash,msg_sub_type
|
SELECT login,bch_name,block_number,block_hash,block_bytes,to_bch_name,to_block_number,to_block_hash,msg_sub_type,this_line_number
|
||||||
FROM blocks
|
FROM blocks
|
||||||
WHERE bch_name=? AND msg_type=? AND msg_sub_type IN (?, ?) AND line_code=?
|
WHERE bch_name=? AND msg_type=? AND msg_sub_type IN (?, ?) AND line_code=?
|
||||||
ORDER BY block_number
|
ORDER BY block_number
|
||||||
@ -204,6 +204,7 @@ final class ChannelsReadSupport {
|
|||||||
pb.toBlockNumber = (Integer) rs.getObject("to_block_number");
|
pb.toBlockNumber = (Integer) rs.getObject("to_block_number");
|
||||||
pb.toBlockHash = rs.getBytes("to_block_hash");
|
pb.toBlockHash = rs.getBytes("to_block_hash");
|
||||||
pb.msgSubType = rs.getInt("msg_sub_type");
|
pb.msgSubType = rs.getInt("msg_sub_type");
|
||||||
|
pb.thisLineNumber = (Integer) rs.getObject("this_line_number");
|
||||||
out.add(pb);
|
out.add(pb);
|
||||||
}
|
}
|
||||||
return out;
|
return out;
|
||||||
@ -513,6 +514,7 @@ final class ChannelsReadSupport {
|
|||||||
Integer toBlockNumber;
|
Integer toBlockNumber;
|
||||||
byte[] toBlockHash;
|
byte[] toBlockHash;
|
||||||
int msgSubType;
|
int msgSubType;
|
||||||
|
Integer thisLineNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
static final class TextInfo {
|
static final class TextInfo {
|
||||||
|
|||||||
@ -100,6 +100,7 @@ public class Net_GetChannelMessages_Handler implements JsonMessageHandler {
|
|||||||
item.setMsgSubType(post.msgSubType);
|
item.setMsgSubType(post.msgSubType);
|
||||||
item.setAuthorLogin(post.login);
|
item.setAuthorLogin(post.login);
|
||||||
item.setAuthorBlockchainName(post.bchName);
|
item.setAuthorBlockchainName(post.bchName);
|
||||||
|
item.setLineStep(post.thisLineNumber);
|
||||||
item.setTargetBlockchainName(post.toBchName);
|
item.setTargetBlockchainName(post.toBchName);
|
||||||
item.setTargetBlockNumber(post.toBlockNumber);
|
item.setTargetBlockNumber(post.toBlockNumber);
|
||||||
item.setTargetBlockHash(ChannelsReadSupport.toHex(post.toBlockHash));
|
item.setTargetBlockHash(ChannelsReadSupport.toHex(post.toBlockHash));
|
||||||
|
|||||||
@ -85,7 +85,7 @@ public class Net_GetMessageThread_Handler implements JsonMessageHandler {
|
|||||||
|
|
||||||
private List<PostRow> findReplies(Connection c, String toBchName, int toBlockNumber, byte[] toBlockHash, int limit) throws Exception {
|
private List<PostRow> findReplies(Connection c, String toBchName, int toBlockNumber, byte[] toBlockHash, int limit) throws Exception {
|
||||||
String sql = """
|
String sql = """
|
||||||
SELECT login,bch_name,block_number,block_hash,block_bytes,to_bch_name,to_block_number,to_block_hash,line_code,msg_sub_type
|
SELECT login,bch_name,block_number,block_hash,block_bytes,to_bch_name,to_block_number,to_block_hash,line_code,msg_sub_type,this_line_number
|
||||||
FROM blocks
|
FROM blocks
|
||||||
WHERE msg_type=1 AND msg_sub_type=?
|
WHERE msg_type=1 AND msg_sub_type=?
|
||||||
AND to_bch_name=? AND to_block_number=? AND to_block_hash=?
|
AND to_bch_name=? AND to_block_number=? AND to_block_hash=?
|
||||||
@ -108,7 +108,7 @@ public class Net_GetMessageThread_Handler implements JsonMessageHandler {
|
|||||||
|
|
||||||
private PostRow findByNumber(Connection c, String bchName, int blockNumber) throws Exception {
|
private PostRow findByNumber(Connection c, String bchName, int blockNumber) throws Exception {
|
||||||
String sql = """
|
String sql = """
|
||||||
SELECT login,bch_name,block_number,block_hash,block_bytes,to_bch_name,to_block_number,to_block_hash,line_code,msg_sub_type
|
SELECT login,bch_name,block_number,block_hash,block_bytes,to_bch_name,to_block_number,to_block_hash,line_code,msg_sub_type,this_line_number
|
||||||
FROM blocks
|
FROM blocks
|
||||||
WHERE bch_name=? AND block_number=?
|
WHERE bch_name=? AND block_number=?
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
@ -134,6 +134,7 @@ public class Net_GetMessageThread_Handler implements JsonMessageHandler {
|
|||||||
row.toBlockHash = rs.getBytes("to_block_hash");
|
row.toBlockHash = rs.getBytes("to_block_hash");
|
||||||
row.lineCode = (Integer) rs.getObject("line_code");
|
row.lineCode = (Integer) rs.getObject("line_code");
|
||||||
row.msgSubType = rs.getInt("msg_sub_type");
|
row.msgSubType = rs.getInt("msg_sub_type");
|
||||||
|
row.thisLineNumber = (Integer) rs.getObject("this_line_number");
|
||||||
return row;
|
return row;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -146,6 +147,7 @@ public class Net_GetMessageThread_Handler implements JsonMessageHandler {
|
|||||||
node.setMsgSubType(row.msgSubType);
|
node.setMsgSubType(row.msgSubType);
|
||||||
node.setAuthorLogin(row.login);
|
node.setAuthorLogin(row.login);
|
||||||
node.setAuthorBlockchainName(row.bchName);
|
node.setAuthorBlockchainName(row.bchName);
|
||||||
|
node.setLineStep(row.thisLineNumber);
|
||||||
node.setTargetBlockchainName(row.toBchName);
|
node.setTargetBlockchainName(row.toBchName);
|
||||||
node.setTargetBlockNumber(row.toBlockNumber);
|
node.setTargetBlockNumber(row.toBlockNumber);
|
||||||
node.setTargetBlockHash(ChannelsReadSupport.toHex(row.toBlockHash));
|
node.setTargetBlockHash(ChannelsReadSupport.toHex(row.toBlockHash));
|
||||||
@ -199,7 +201,7 @@ public class Net_GetMessageThread_Handler implements JsonMessageHandler {
|
|||||||
|
|
||||||
private List<PostRow> findEdits(Connection c, String bch, int targetBlock, byte[] targetHash, int subType) throws Exception {
|
private List<PostRow> findEdits(Connection c, String bch, int targetBlock, byte[] targetHash, int subType) throws Exception {
|
||||||
String sql = """
|
String sql = """
|
||||||
SELECT login,bch_name,block_number,block_hash,block_bytes,to_bch_name,to_block_number,to_block_hash,line_code,msg_sub_type
|
SELECT login,bch_name,block_number,block_hash,block_bytes,to_bch_name,to_block_number,to_block_hash,line_code,msg_sub_type,this_line_number
|
||||||
FROM blocks
|
FROM blocks
|
||||||
WHERE bch_name=? AND msg_type=1 AND msg_sub_type=?
|
WHERE bch_name=? AND msg_type=1 AND msg_sub_type=?
|
||||||
AND to_block_number=? AND to_block_hash=?
|
AND to_block_number=? AND to_block_hash=?
|
||||||
@ -231,5 +233,6 @@ public class Net_GetMessageThread_Handler implements JsonMessageHandler {
|
|||||||
byte[] toBlockHash;
|
byte[] toBlockHash;
|
||||||
Integer lineCode;
|
Integer lineCode;
|
||||||
int msgSubType;
|
int msgSubType;
|
||||||
|
Integer thisLineNumber;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -52,6 +52,7 @@ public class Net_GetChannelMessages_Response extends Net_Response {
|
|||||||
private Integer msgSubType;
|
private Integer msgSubType;
|
||||||
private String authorLogin;
|
private String authorLogin;
|
||||||
private String authorBlockchainName;
|
private String authorBlockchainName;
|
||||||
|
private Integer lineStep;
|
||||||
private String targetBlockchainName;
|
private String targetBlockchainName;
|
||||||
private Integer targetBlockNumber;
|
private Integer targetBlockNumber;
|
||||||
private String targetBlockHash;
|
private String targetBlockHash;
|
||||||
@ -74,6 +75,9 @@ public class Net_GetChannelMessages_Response extends Net_Response {
|
|||||||
public String getAuthorBlockchainName() { return authorBlockchainName; }
|
public String getAuthorBlockchainName() { return authorBlockchainName; }
|
||||||
public void setAuthorBlockchainName(String authorBlockchainName) { this.authorBlockchainName = authorBlockchainName; }
|
public void setAuthorBlockchainName(String authorBlockchainName) { this.authorBlockchainName = authorBlockchainName; }
|
||||||
|
|
||||||
|
public Integer getLineStep() { return lineStep; }
|
||||||
|
public void setLineStep(Integer lineStep) { this.lineStep = lineStep; }
|
||||||
|
|
||||||
public String getTargetBlockchainName() { return targetBlockchainName; }
|
public String getTargetBlockchainName() { return targetBlockchainName; }
|
||||||
public void setTargetBlockchainName(String targetBlockchainName) { this.targetBlockchainName = targetBlockchainName; }
|
public void setTargetBlockchainName(String targetBlockchainName) { this.targetBlockchainName = targetBlockchainName; }
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user