Guía versionada
Resolver on-chain
Sección enlazable con contratos de datos y ejemplos reproducibles.
- Los ejemplos identifican cluster e IDs esperados.
El Program ID y la evidencia coinciden con el manifiesto Lite; la autoridad fue revocada.
Contrato de esta guía
Derivación ["n", nombre] y validación directa del registro raw de 96 bytes.
Usa el manifiesto Lite como fuente de Program ID, slot, hash, autoridad y parámetros de cuenta. El programa está finalizado: el manifiesto publica la revocación de autoridad y el programa es inmutable.
Derivar y después verificar
Primero normaliza la entrada ASCII y deriva la cuenta localmente. Nunca aceptes una dirección de registro proporcionada por un usuario o directorio.
import { deriveLiteNameRecord, mainnetLiteDeployment } from "@tocnp/sdk";
const deployment = mainnetLiteDeployment();
const record = deriveLiteNameRecord("GM", deployment.registryProgramId);
console.log(record.normalizedName); // gm
console.log(record.address.toBase58(), record.bump);PDA = findProgramAddress([UTF8("n"), UTF8(normalizedName)], PROGRAM_ID)
Contrato de lectura finalizada
- Exige el genesis hash de Solana Mainnet.
- Obtén Program, ProgramData y la PDA del nombre con compromiso finalizado y un contexto coherente.
- Verifica loader v3, ProgramData, autoridad revocada, slot de despliegue, tamaño del ELF y SHA-256.
- Para un registro, exige el owner del programa Lite, cuenta no ejecutable, dirección exacta, layout exacto de 96 bytes, nombre normalizado, bump y versión compatible.
- Conserva el mayor slot confiable como minContextSlot y rechaza respuestas anteriores durante el failover.
Layout raw de la cuenta
| Offset | Bytes | Campo | Regla |
|---|---|---|---|
| 0 | 2 | magic | 54 4c |
| 2 | 1 | version | 1 |
| 3 | 1 | bump | debe reproducir la PDA |
| 4 | 1 | name length | 1–15 |
| 5 | 15 | name | [a-z0-9] + relleno cero |
| 20 | 32 | owner | clave pública no nula |
| 52 | 32 | resolver | definido por el propietario |
| 84 | 8 | price | lamports little-endian; cero significa no listado |
| 92 | 4 | reserved | todo cero |
import { decodeLiteNameRecordV1 } from "@tocnp/sdk";
const decoded = decodeLiteNameRecordV1(accountData);
// Also verify RPC cluster, account owner, PDA, bump, and embedded name.La disponibilidad es una prueba puntual
Declara un nombre disponible sólo cuando la PDA canónica finalizada no existe o es una cuenta no ejecutable del System Program sin datos. Una cuenta malformada, ejecutable, con datos o con otro owner es un error. La disponibilidad no es una reserva.