Доработать клиентский UI Solana-регистрации

This commit is contained in:
AidarKC
2026-06-07 11:19:58 +04:00
parent 6bf5d1d5ed
commit 689f35fea2
5 changed files with 64 additions and 16 deletions
@@ -6,6 +6,7 @@ import {
const CLASSIFY_LOGIN_INSTRUCTION_TAG = 1;
const PRECHECK_SIM_PAYER = 'FUc28vNixp7F3nnkpGVt6nuJbgvJ4429v4B5wS52Df6P';
const SHINE_USERS_USER_PDA_SEED_PREFIX = 'user_login=';
let solanaLibPromise = null;
function loadSolanaLib() {
@@ -71,6 +72,15 @@ export function formatSolanaErrorDetails(error) {
return parts.join(' :: ');
}
export function isUserAlreadyExistsSolanaError(error) {
const details = formatSolanaErrorDetails(error);
return details.includes('UserAlreadyExists')
|| details.includes('custom program error: 0x4')
|| details.includes('"Custom":4')
|| details.includes('"InstructionError":[2,{"Custom":4}]')
|| details.includes('Instruction 2: custom program error: 0x4');
}
export async function precheckLoginClassOnSolana({ login, solanaEndpoint }) {
const solana = await loadSolanaLib();
const connection = new solana.Connection(String(solanaEndpoint || ''), 'confirmed');
@@ -121,7 +131,7 @@ export async function checkLoginExistsOnSolana({ login, solanaEndpoint }) {
throw new Error('EMPTY_LOGIN');
}
const [userPda] = solana.PublicKey.findProgramAddressSync(
[enc.encode('login='), enc.encode(loginNorm)],
[enc.encode(SHINE_USERS_USER_PDA_SEED_PREFIX), enc.encode(loginNorm)],
usersProgram,
);
const ai = await connection.getAccountInfo(userPda, 'confirmed');