Guía versionada

Resolver on-chain

Sección enlazable con contratos de datos y ejemplos reproducibles.

  • Los ejemplos identifican cluster e IDs esperados.
Mainnet · Finalizado

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

  1. Exige el genesis hash de Solana Mainnet.
  2. Obtén Program, ProgramData y la PDA del nombre con compromiso finalizado y un contexto coherente.
  3. Verifica loader v3, ProgramData, autoridad revocada, slot de despliegue, tamaño del ELF y SHA-256.
  4. 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.
  5. Conserva el mayor slot confiable como minContextSlot y rechaza respuestas anteriores durante el failover.

Layout raw de la cuenta

OffsetBytesCampoRegla
02magic54 4c
21version1
31bumpdebe reproducir la PDA
41name length1–15
515name[a-z0-9] + relleno cero
2032ownerclave pública no nula
5232resolverdefinido por el propietario
848pricelamports little-endian; cero significa no listado
924reservedtodo 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.