Ну типо переделал Всё под короткую таблицу солана юзерс, но теперь не надо поправить баги
This commit is contained in:
AidarKC
2025-12-30 12:39:55 +03:00
parent b6b50557a7
commit 34e8640e78
11 changed files with 439 additions and 182 deletions
@@ -1,6 +1,7 @@
package shine.db.entities;
import java.util.Arrays;
import java.util.Base64;
/**
* Агрегатная сущность текущего состояния блокчейна.
@@ -11,7 +12,9 @@ public final class BlockchainStateEntry {
private String blockchainName;
private String login;
private String publicKeyBase64;
/** Ключ блокчейна (pubkey), которым подписываются блоки. Base64(32 bytes). */
private String blockchainKey;
/** Лимит (теперь long). */
private long sizeLimit;
@@ -36,7 +39,7 @@ public final class BlockchainStateEntry {
public BlockchainStateEntry(String blockchainName,
String login,
String publicKeyBase64,
String blockchainKey,
long sizeLimit,
long fileSizeBytes,
int lastGlobalNumber,
@@ -46,7 +49,7 @@ public final class BlockchainStateEntry {
long updatedAtMs) {
this.blockchainName = blockchainName;
this.login = login;
this.publicKeyBase64 = publicKeyBase64;
this.blockchainKey = blockchainKey;
this.sizeLimit = sizeLimit;
this.fileSizeBytes = fileSizeBytes;
this.lastGlobalNumber = lastGlobalNumber;
@@ -72,8 +75,21 @@ public final class BlockchainStateEntry {
public String getLogin() { return login; }
public void setLogin(String login) { this.login = login; }
public String getPublicKeyBase64() { return publicKeyBase64; }
public void setPublicKeyBase64(String publicKeyBase64) { this.publicKeyBase64 = publicKeyBase64; }
public String getBlockchainKey() { return blockchainKey; }
public void setBlockchainKey(String blockchainKey) { this.blockchainKey = blockchainKey; }
/** blockchainKey в байтах (32) или null, если битый. */
public byte[] getBlockchainKeyBytes() {
if (blockchainKey == null) return null;
String s = blockchainKey.trim();
if (s.isEmpty()) return null;
try {
byte[] b = Base64.getDecoder().decode(s);
return (b != null && b.length == 32) ? b : null;
} catch (IllegalArgumentException e) {
return null;
}
}
public long getSizeLimit() { return sizeLimit; }
public void setSizeLimit(long sizeLimit) { this.sizeLimit = sizeLimit; }
@@ -15,52 +15,32 @@ import java.util.Base64;
public class SolanaUserEntry {
private String login; // TEXT PK
private String bchName; // TEXT NOT NULL
private String loginKey; // TEXT
private String deviceKey; // TEXT
private Integer bchLimit; // INTEGER nullable
private String deviceKey; // TEXT NOT NULL (Base64(32 bytes))
public SolanaUserEntry() {}
public SolanaUserEntry(String login,
String bchName,
String loginKey,
String deviceKey,
Integer bchLimit) {
public SolanaUserEntry(String login, String deviceKey) {
this.login = login;
this.bchName = bchName;
this.loginKey = loginKey;
this.deviceKey = deviceKey;
this.bchLimit = bchLimit;
}
public String getLogin() { return login; }
public void setLogin(String login) { this.login = login; }
public String getBchName() { return bchName; }
public void setBchName(String bchName) { this.bchName = bchName; }
/** Публичный ключ логина (основной ключ пользователя). */
public String getLoginKey() { return loginKey; }
public void setLoginKey(String loginKey) { this.loginKey = loginKey; }
/** Публичный ключ устройства (device key). */
public String getDeviceKey() { return deviceKey; }
public void setDeviceKey(String deviceKey) { this.deviceKey = deviceKey; }
public Integer getBchLimit() { return bchLimit; }
public void setBchLimit(Integer bchLimit) { this.bchLimit = bchLimit; }
/**
* Публичный ключ логина в байтах (32 байта) или null, если ключ битый/пустой.
* Device key в байтах (32 байта) или null, если ключ битый/пустой.
*
* Поддержка форматов:
* - Base64 (предпочтительно)
* - HEX (ровно 64 hex-символа, без пробелов)
*/
public byte[] getLoginKeyByte() {
if (loginKey == null) return null;
String s = loginKey.trim();
public byte[] getDeviceKeyByte() {
if (deviceKey == null) return null;
String s = deviceKey.trim();
if (s.isEmpty()) return null;
// 1) пробуем Base64