Esquemas

Un esquema define la estructura y las reglas de validación para las credenciales en el Sistema de Atestación de Solana. Los esquemas sirven como plantillas que especifican qué campos debe contener una credencial y cómo deben estar formateados. Cada esquema está asociado con un tipo de credencial y puede tener versiones para soportar la evolución de la estructura de datos.

Estructura

La estructura Schema representa un esquema en el Sistema de Atestación de Solana. Cada esquema define una plantilla para las credenciales que se pueden crear bajo él.

Definiciones de Tipos

Schema

export type Schema = {
discriminator: number; // Internal discriminator
credential: Address; // Associated credential address
name: ReadonlyUint8Array; // Schema name
description: ReadonlyUint8Array; // Schema description
layout: ReadonlyUint8Array; // Schema layout definition
fieldNames: ReadonlyUint8Array; // Names of fields in the schema
isPaused: boolean; // Pause status
version: number; // Schema version
};

Métodos

Obtención de Esquemas

MétodoDescripciónParámetrosDevuelve
fetchSchemaObtiene un único esquema por su direcciónrpc: Contexto RPC, address: Dirección del esquema, config?: Configuración de obtenciónPromise<Account<Schema>>
fetchMaybeSchemaObtiene un esquema de forma segura, devuelve null si no se encuentrarpc: Contexto RPC, address: Dirección del esquema, config?: Configuración de obtenciónPromise<MaybeAccount<Schema>>
fetchAllSchemaObtiene múltiples esquemas por sus direccionesrpc: Contexto RPC, addresses: Array de direcciones de esquemas, config?: Configuración de obtenciónPromise<Account<Schema>[]>
fetchAllMaybeSchemaObtiene múltiples esquemas de forma segura, omite los no encontradosrpc: Contexto RPC, addresses: Array de direcciones de esquemas, config?: Configuración de obtenciónPromise<MaybeAccount<Schema>[]>

Serialización

MétodoDescripciónParámetrosDevuelve
getSchemaEncoderObtiene el codificador para datos de esquemaNingunoEncoder<SchemaArgs>
getSchemaDecoderObtiene el decodificador para datos de esquemaNingunoDecoder<Schema>
getSchemaCodecObtiene el códec para datos de esquemaNingunoCodec<SchemaArgs, Schema>

Ejemplos de Uso

Obtener un Único Schema

const schema = await fetchSchema(rpc, schemaAddress);
console.log("Schema name:", schema.name);

Obtener Múltiples Schemas

const schemas = await fetchAllSchema(rpc, [schema1Address, schema2Address]);
schemas.forEach((schema) => console.log("Schema:", schema.name));

Obtención Segura

const schema = await fetchMaybeSchema(rpc, schemaAddress);
if (schema) {
console.log("Schema found:", schema.name);
} else {
console.log("Schema not found");
}

Tipos de Datos del Layout del Schema

El campo layout utiliza valores numéricos para especificar los tipos de datos de cada campo en el schema:

ValorTipo de DatoDescripción
0U8Entero sin signo de 8 bits
1U16Entero sin signo de 16 bits
2U32Entero sin signo de 32 bits
3U64Entero sin signo de 64 bits
4U128Entero sin signo de 128 bits
5I8Entero con signo de 8 bits
6I16Entero con signo de 16 bits
7I32Entero con signo de 32 bits
8I64Entero con signo de 64 bits
9I128Entero con signo de 128 bits
10BoolValor booleano
11CharCarácter individual
12StringCadena de longitud variable
13VecU8Vector de enteros sin signo de 8 bits
14VecU16Vector de enteros sin signo de 16 bits
15VecU32Vector de enteros sin signo de 32 bits
16VecU64Vector de enteros sin signo de 64 bits
17VecU128Vector de enteros sin signo de 128 bits
18VecI8Vector de enteros con signo de 8 bits
19VecI16Vector de enteros con signo de 16 bits
20VecI32Vector de enteros con signo de 32 bits
21VecI64Vector de enteros con signo de 64 bits
22VecI128Vector de enteros con signo de 128 bits
23VecBoolVector de valores booleanos
24VecCharVector de caracteres
25VecStringVector de cadenas

Ejemplo de Uso

Por ejemplo, un diseño de [12, 0, 12] definiría tres campos: un String, seguido de un entero U8, seguido de otro String. El array fieldNames proporciona nombres legibles que corresponden posicionalmente a cada valor del diseño, por lo que con los nombres de campo ["name", "age", "country"], el primer campo String se llamaría "name", el campo U8 sería "age", y el segundo campo String sería "country".

Aquí hay un ejemplo de cómo se utilizarían al crear un Schema:

const createSchemaInstruction = getCreateSchemaInstruction({
authority,
payer,
credential: credentialPda,
schema: schemaPda,
name: "Test Schema",
description: "Just an example",
fieldNames: ["name", "age", "country"],
layout: Buffer.from([12, 0, 12])
});

Notas Importantes

  • El campo discriminator se utiliza internamente y no debe modificarse
  • El campo credential vincula el esquema con su tipo de credencial asociado
  • isPaused puede utilizarse para deshabilitar temporalmente el uso del esquema
  • El campo version permite la evolución del esquema mientras mantiene la compatibilidad con versiones anteriores
  • layout y fieldNames definen la estructura de las credenciales que utilizan este esquema
  • Todos los campos de array de bytes (name, description, layout, fieldNames) deben codificarse/decodificarse adecuadamente según las necesidades de su aplicación

Is this page helpful?

Tabla de Contenidos

Editar Página

Gestionado por

© 2026 Fundación Solana.
Todos los derechos reservados.
Conéctate