Обновить lazy-import Solana PDA под новый формат
This commit is contained in:
parent
59e4156bb9
commit
a9510a6d36
@ -0,0 +1,15 @@
|
|||||||
|
# Lazy-import Solana PDA: актуальный формат
|
||||||
|
|
||||||
|
- Краткое описание:
|
||||||
|
Серверный Java lazy-import пользователя из `shine_users` обновлён под актуальный формат `user_pda`. Убран RPC-фильтр по размеру PDA, добавлен разбор нового `ServerProfileBlock` (`block_type = 30`) без сохранения server-only полей в `solana_users`.
|
||||||
|
- Что проверять:
|
||||||
|
1. Взять логин пользователя, который существует в Solana PDA, но отсутствует в локальной таблице `solana_users`.
|
||||||
|
2. Выполнить вход этим логином через сервер.
|
||||||
|
3. Убедиться, что lazy-import подтянул пользователя из Solana.
|
||||||
|
4. Убедиться, что запись в `solana_users` создана с полями `login`, `blockchain_name`, `solana_key`, `blockchain_key`, `device_key`.
|
||||||
|
5. Убедиться, что отсутствие/наличие server-полей в PDA не ломает импорт.
|
||||||
|
- Ожидаемый результат:
|
||||||
|
1. Пользователь успешно находится и импортируется из Solana PDA независимо от фактического размера PDA.
|
||||||
|
2. Новый `ServerProfileBlock` не ломает парсер.
|
||||||
|
3. В БД не появляются лишние server-only поля.
|
||||||
|
- Статус: `pending`
|
||||||
@ -25,7 +25,6 @@ public final class SolanaUserPdaImportService {
|
|||||||
private static final Logger log = LoggerFactory.getLogger(SolanaUserPdaImportService.class);
|
private static final Logger log = LoggerFactory.getLogger(SolanaUserPdaImportService.class);
|
||||||
private static final ObjectMapper MAPPER = new ObjectMapper();
|
private static final ObjectMapper MAPPER = new ObjectMapper();
|
||||||
private static final HttpClient HTTP = HttpClient.newHttpClient();
|
private static final HttpClient HTTP = HttpClient.newHttpClient();
|
||||||
private static final int USER_PDA_SPACE = 768;
|
|
||||||
private static final String MAGIC = "SHiNE";
|
private static final String MAGIC = "SHiNE";
|
||||||
|
|
||||||
private SolanaUserPdaImportService() {}
|
private SolanaUserPdaImportService() {}
|
||||||
@ -72,14 +71,13 @@ public final class SolanaUserPdaImportService {
|
|||||||
{
|
{
|
||||||
"encoding":"base64",
|
"encoding":"base64",
|
||||||
"filters":[
|
"filters":[
|
||||||
{"dataSize":%d},
|
|
||||||
{"memcmp":{"offset":61,"bytes":"%s"}},
|
{"memcmp":{"offset":61,"bytes":"%s"}},
|
||||||
{"memcmp":{"offset":62,"bytes":"%s"}}
|
{"memcmp":{"offset":62,"bytes":"%s"}}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
""".formatted(SolanaProgramsConfig.SHINE_USERS_PROGRAM_ID, USER_PDA_SPACE, lenB58, loginB58);
|
""".formatted(SolanaProgramsConfig.SHINE_USERS_PROGRAM_ID, lenB58, loginB58);
|
||||||
|
|
||||||
HttpRequest req = HttpRequest.newBuilder()
|
HttpRequest req = HttpRequest.newBuilder()
|
||||||
.uri(URI.create(SolanaProgramsConfig.SOLANA_RPC_URL))
|
.uri(URI.create(SolanaProgramsConfig.SOLANA_RPC_URL))
|
||||||
@ -171,8 +169,11 @@ public final class SolanaUserPdaImportService {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (blockType == 4) {
|
} else if (blockType == 30) {
|
||||||
c += 1 + 32;
|
int isServer = u8(raw, c++);
|
||||||
|
if (isServer == 1) {
|
||||||
|
c += 1; // address_format_type
|
||||||
|
c += 1; // address_format_version
|
||||||
int addrLen = u8(raw, c++);
|
int addrLen = u8(raw, c++);
|
||||||
c += addrLen;
|
c += addrLen;
|
||||||
int syncCount = u8(raw, c++);
|
int syncCount = u8(raw, c++);
|
||||||
@ -180,6 +181,9 @@ public final class SolanaUserPdaImportService {
|
|||||||
int n = u8(raw, c++);
|
int n = u8(raw, c++);
|
||||||
c += n;
|
c += n;
|
||||||
}
|
}
|
||||||
|
} else if (isServer != 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
} else if (blockType == 40) {
|
} else if (blockType == 40) {
|
||||||
int accessCount = u8(raw, c++);
|
int accessCount = u8(raw, c++);
|
||||||
for (int j = 0; j < accessCount; j++) {
|
for (int j = 0; j < accessCount; j++) {
|
||||||
@ -264,4 +268,3 @@ public final class SolanaUserPdaImportService {
|
|||||||
long paidLimitBytes
|
long paidLimitBytes
|
||||||
) {}
|
) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,2 +1,2 @@
|
|||||||
client.version=1.2.123
|
client.version=1.2.124
|
||||||
server.version=1.2.115
|
server.version=1.2.116
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user