15 01 25
Исправил что бы в интерфейсе BodyHasTarget не требывалось хранить в блоках BodyHasTarget и в блоках коннекстин не зранилась поле тоЛогин в байты блока. (Все тесты тесты проходят)
This commit is contained in:
parent
d9fe1f02b8
commit
bbca821dcd
@ -3,18 +3,17 @@ package blockchain.body;
|
|||||||
import utils.blockchain.BlockchainNameUtil;
|
import utils.blockchain.BlockchainNameUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BodyHasTarget — контракт для body, которые "ссылаются" на цель (to-поля).
|
* BodyHasTarget — дополнительный интерфейс для body, которые "ссылаются" на цель (to-поля).
|
||||||
*
|
*
|
||||||
* ВАЖНО (новое правило):
|
* Новое правило:
|
||||||
* - toLogin НЕ храним в байтах блока.
|
* - toLogin НЕ храним в байтах блока.
|
||||||
* - toLogin всегда вычисляем из toBchName по стандарту:
|
* - toLogin всегда вычисляется из toBchName по стандарту login+"-NNN".
|
||||||
* toBchName = login + "-NNN" => toLogin = login
|
|
||||||
*
|
*
|
||||||
* Все методы могут возвращать null (если target отсутствует).
|
* Все методы могут возвращать null.
|
||||||
*/
|
*/
|
||||||
public interface BodyHasTarget {
|
public interface BodyHasTarget {
|
||||||
|
|
||||||
/** login цели (nullable). */
|
/** login цели (nullable). Вычисляется из toBchName(). */
|
||||||
default String toLogin() {
|
default String toLogin() {
|
||||||
String bch = toBchName();
|
String bch = toBchName();
|
||||||
if (bch == null) return null;
|
if (bch == null) return null;
|
||||||
@ -28,5 +27,5 @@ public interface BodyHasTarget {
|
|||||||
Integer toBlockGlobalNumber();
|
Integer toBlockGlobalNumber();
|
||||||
|
|
||||||
/** hash целевого блока (обычно 32 байта). Может быть null, если ссылки нет. */
|
/** hash целевого блока (обычно 32 байта). Может быть null, если ссылки нет. */
|
||||||
byte[] toBlockHasheBytes();
|
byte[] toBlockHashBytes();
|
||||||
}
|
}
|
||||||
@ -204,8 +204,7 @@ public final class ConnectionBody implements BodyRecord, BodyHasTarget, BodyHasL
|
|||||||
|
|
||||||
/* ====================== BodyHasTarget ===================== */
|
/* ====================== BodyHasTarget ===================== */
|
||||||
// toLogin() теперь default в интерфейсе и вычисляется из toBchName()
|
// toLogin() теперь default в интерфейсе и вычисляется из toBchName()
|
||||||
|
|
||||||
@Override public String toBchName() { return toBlockchainName; }
|
@Override public String toBchName() { return toBlockchainName; }
|
||||||
@Override public Integer toBlockGlobalNumber() { return toBlockGlobalNumber; }
|
@Override public Integer toBlockGlobalNumber() { return toBlockGlobalNumber; }
|
||||||
@Override public byte[] toBlockHasheBytes() { return toBlockHash32; }
|
@Override public byte[] toBlockHashBytes() { return toBlockHash32; }
|
||||||
}
|
}
|
||||||
@ -120,11 +120,7 @@ public final class ReactionBody implements BodyRecord, BodyHasTarget {
|
|||||||
|
|
||||||
/* ====================== BodyHasTarget ====================== */
|
/* ====================== BodyHasTarget ====================== */
|
||||||
|
|
||||||
@Override public String toLogin() { return null; }
|
|
||||||
|
|
||||||
@Override public String toBchName() { return toBlockchainName; }
|
@Override public String toBchName() { return toBlockchainName; }
|
||||||
|
|
||||||
@Override public Integer toBlockGlobalNumber() { return toBlockGlobalNumber; }
|
@Override public Integer toBlockGlobalNumber() { return toBlockGlobalNumber; }
|
||||||
|
@Override public byte[] toBlockHashBytes() { return toBlockHash32; }
|
||||||
@Override public byte[] toBlockHasheBytes() { return toBlockHash32; }
|
|
||||||
}
|
}
|
||||||
@ -198,7 +198,6 @@ public final class TextBody implements BodyRecord, BodyHasTarget, BodyHasLine {
|
|||||||
if (thisLineNumber != -1) throw new IllegalArgumentException("thisLineNumber must be -1 when prevLineNumber=-1");
|
if (thisLineNumber != -1) throw new IllegalArgumentException("thisLineNumber must be -1 when prevLineNumber=-1");
|
||||||
} else {
|
} else {
|
||||||
if (prevLineHash32 == null || prevLineHash32.length != 32) throw new IllegalArgumentException("prevLineHash32 invalid");
|
if (prevLineHash32 == null || prevLineHash32.length != 32) throw new IllegalArgumentException("prevLineHash32 invalid");
|
||||||
// thisLineNumber сервер пока не проверяет (принимаем как есть)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isHasTargetSubType(subType)) {
|
if (isHasTargetSubType(subType)) {
|
||||||
@ -218,8 +217,8 @@ public final class TextBody implements BodyRecord, BodyHasTarget, BodyHasLine {
|
|||||||
if (msgUtf8.length == 0) throw new IllegalArgumentException("Text payload is empty");
|
if (msgUtf8.length == 0) throw new IllegalArgumentException("Text payload is empty");
|
||||||
if (msgUtf8.length > 65535) throw new IllegalArgumentException("Text too long (>65535 bytes)");
|
if (msgUtf8.length > 65535) throw new IllegalArgumentException("Text too long (>65535 bytes)");
|
||||||
|
|
||||||
int cap = 4 + 32 + 4 // line fields
|
int cap = 4 + 32 + 4
|
||||||
+ 2 + msgUtf8.length; // text
|
+ 2 + msgUtf8.length;
|
||||||
|
|
||||||
byte[] nameBytes = null;
|
byte[] nameBytes = null;
|
||||||
|
|
||||||
@ -264,20 +263,7 @@ public final class TextBody implements BodyRecord, BodyHasTarget, BodyHasLine {
|
|||||||
@Override public int thisLineNumber() { return thisLineNumber; }
|
@Override public int thisLineNumber() { return thisLineNumber; }
|
||||||
|
|
||||||
/* ====================== BodyHasTarget ===================== */
|
/* ====================== BodyHasTarget ===================== */
|
||||||
@Override public String toLogin() { return null; }
|
@Override public String toBchName() { return isHasTargetSubType(subType) ? toBlockchainName : null; }
|
||||||
|
@Override public Integer toBlockGlobalNumber() { return isHasTargetSubType(subType) ? toBlockGlobalNumber : null; }
|
||||||
@Override
|
@Override public byte[] toBlockHashBytes() { return isHasTargetSubType(subType) ? toBlockHash32 : null; }
|
||||||
public String toBchName() {
|
|
||||||
return isHasTargetSubType(subType) ? toBlockchainName : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Integer toBlockGlobalNumber() {
|
|
||||||
return isHasTargetSubType(subType) ? toBlockGlobalNumber : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public byte[] toBlockHasheBytes() {
|
|
||||||
return isHasTargetSubType(subType) ? toBlockHash32 : null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@ -279,7 +279,7 @@ public final class Net_AddBlock_Handler implements JsonMessageHandler {
|
|||||||
be.setToLogin(t.toLogin());
|
be.setToLogin(t.toLogin());
|
||||||
be.setToBchName(t.toBchName());
|
be.setToBchName(t.toBchName());
|
||||||
be.setToBlockNumber(t.toBlockGlobalNumber());
|
be.setToBlockNumber(t.toBlockGlobalNumber());
|
||||||
be.setToBlockHash(t.toBlockHasheBytes());
|
be.setToBlockHash(t.toBlockHashBytes());
|
||||||
}
|
}
|
||||||
|
|
||||||
// edit helper (optional): если TEXT_EDIT — это "редактирование блока цели"
|
// edit helper (optional): если TEXT_EDIT — это "редактирование блока цели"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user