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 discriminatorcredential: Address; // Associated credential addressname: ReadonlyUint8Array; // Schema namedescription: ReadonlyUint8Array; // Schema descriptionlayout: ReadonlyUint8Array; // Schema layout definitionfieldNames: ReadonlyUint8Array; // Names of fields in the schemaisPaused: boolean; // Pause statusversion: number; // Schema version};
Métodos
Obtención de Esquemas
| Método | Descripción | Parámetros | Devuelve |
|---|---|---|---|
fetchSchema | Obtiene un único esquema por su dirección | rpc: Contexto RPC, address: Dirección del esquema, config?: Configuración de obtención | Promise<Account<Schema>> |
fetchMaybeSchema | Obtiene un esquema de forma segura, devuelve null si no se encuentra | rpc: Contexto RPC, address: Dirección del esquema, config?: Configuración de obtención | Promise<MaybeAccount<Schema>> |
fetchAllSchema | Obtiene múltiples esquemas por sus direcciones | rpc: Contexto RPC, addresses: Array de direcciones de esquemas, config?: Configuración de obtención | Promise<Account<Schema>[]> |
fetchAllMaybeSchema | Obtiene múltiples esquemas de forma segura, omite los no encontrados | rpc: Contexto RPC, addresses: Array de direcciones de esquemas, config?: Configuración de obtención | Promise<MaybeAccount<Schema>[]> |
Serialización
| Método | Descripción | Parámetros | Devuelve |
|---|---|---|---|
getSchemaEncoder | Obtiene el codificador para datos de esquema | Ninguno | Encoder<SchemaArgs> |
getSchemaDecoder | Obtiene el decodificador para datos de esquema | Ninguno | Decoder<Schema> |
getSchemaCodec | Obtiene el códec para datos de esquema | Ninguno | Codec<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:
| Valor | Tipo de Dato | Descripción |
|---|---|---|
| 0 | U8 | Entero sin signo de 8 bits |
| 1 | U16 | Entero sin signo de 16 bits |
| 2 | U32 | Entero sin signo de 32 bits |
| 3 | U64 | Entero sin signo de 64 bits |
| 4 | U128 | Entero sin signo de 128 bits |
| 5 | I8 | Entero con signo de 8 bits |
| 6 | I16 | Entero con signo de 16 bits |
| 7 | I32 | Entero con signo de 32 bits |
| 8 | I64 | Entero con signo de 64 bits |
| 9 | I128 | Entero con signo de 128 bits |
| 10 | Bool | Valor booleano |
| 11 | Char | Carácter individual |
| 12 | String | Cadena de longitud variable |
| 13 | VecU8 | Vector de enteros sin signo de 8 bits |
| 14 | VecU16 | Vector de enteros sin signo de 16 bits |
| 15 | VecU32 | Vector de enteros sin signo de 32 bits |
| 16 | VecU64 | Vector de enteros sin signo de 64 bits |
| 17 | VecU128 | Vector de enteros sin signo de 128 bits |
| 18 | VecI8 | Vector de enteros con signo de 8 bits |
| 19 | VecI16 | Vector de enteros con signo de 16 bits |
| 20 | VecI32 | Vector de enteros con signo de 32 bits |
| 21 | VecI64 | Vector de enteros con signo de 64 bits |
| 22 | VecI128 | Vector de enteros con signo de 128 bits |
| 23 | VecBool | Vector de valores booleanos |
| 24 | VecChar | Vector de caracteres |
| 25 | VecString | Vector 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
discriminatorse utiliza internamente y no debe modificarse - El campo
credentialvincula el esquema con su tipo de credencial asociado isPausedpuede utilizarse para deshabilitar temporalmente el uso del esquema- El campo
versionpermite la evolución del esquema mientras mantiene la compatibilidad con versiones anteriores layoutyfieldNamesdefinen 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?