Schemi

Uno schema definisce la struttura e le regole di validazione per le credenziali nel Solana Attestation System. Gli schemi fungono da modelli che specificano quali campi deve contenere una credenziale e come devono essere formattati. Ogni schema è associato a un tipo di credenziale e può essere versionato per supportare l'evoluzione della struttura dati.

Struttura

La struct Schema rappresenta uno schema nel Solana Attestation System. Ogni schema definisce un modello per le credenziali che possono essere create sotto di esso.

Definizioni dei Tipi

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
};

Metodi

Recupero degli Schemi

MetodoDescrizioneParametriRestituisce
fetchSchemaRecupera un singolo schema tramite il suo indirizzorpc: contesto RPC, address: indirizzo dello schema, config?: configurazione di recuperoPromise<Account<Schema>>
fetchMaybeSchemaRecupera in modo sicuro uno schema, restituisce null se non trovatorpc: contesto RPC, address: indirizzo dello schema, config?: configurazione di recuperoPromise<MaybeAccount<Schema>>
fetchAllSchemaRecupera più schemi tramite i loro indirizzirpc: contesto RPC, addresses: array di indirizzi degli schemi, config?: configurazione di recuperoPromise<Account<Schema>[]>
fetchAllMaybeSchemaRecupera in modo sicuro più schemi, salta quelli non trovatirpc: contesto RPC, addresses: array di indirizzi degli schemi, config?: configurazione di recuperoPromise<MaybeAccount<Schema>[]>

Serializzazione

MetodoDescrizioneParametriRestituisce
getSchemaEncoderOttiene l'encoder per i dati dello schemaNessunoEncoder<SchemaArgs>
getSchemaDecoderOttiene il decoder per i dati dello schemaNessunoDecoder<Schema>
getSchemaCodecOttiene il codec per i dati dello schemaNessunoCodec<SchemaArgs, Schema>

Esempi di Utilizzo

Recupero di un Singolo Schema

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

Recupero di Schemi Multipli

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

Recupero Sicuro

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

Tipi di Dati del Layout dello Schema

Il campo layout utilizza valori numerici per specificare i tipi di dati per ciascun campo nello schema:

ValoreTipo di DatiDescrizione
0U8Intero senza segno a 8 bit
1U16Intero senza segno a 16 bit
2U32Intero senza segno a 32 bit
3U64Intero senza segno a 64 bit
4U128Intero senza segno a 128 bit
5I8Intero con segno a 8 bit
6I16Intero con segno a 16 bit
7I32Intero con segno a 32 bit
8I64Intero con segno a 64 bit
9I128Intero con segno a 128 bit
10BoolValore booleano
11CharSingolo carattere
12StringStringa a lunghezza variabile
13VecU8Vettore di interi senza segno a 8 bit
14VecU16Vettore di interi senza segno a 16 bit
15VecU32Vettore di interi senza segno a 32 bit
16VecU64Vettore di interi senza segno a 64 bit
17VecU128Vettore di interi senza segno a 128 bit
18VecI8Vettore di interi con segno a 8 bit
19VecI16Vettore di interi con segno a 16 bit
20VecI32Vettore di interi con segno a 32 bit
21VecI64Vettore di interi con segno a 64 bit
22VecI128Vettore di interi con segno a 128 bit
23VecBoolVettore di valori booleani
24VecCharVettore di caratteri
25VecStringVettore di stringhe

Esempio di Utilizzo

Ad esempio, un layout di [12, 0, 12] definirebbe tre campi: una String, seguita da un intero U8, seguito da un'altra String. L'array fieldNames fornisce nomi leggibili dall'uomo che corrispondono posizionalmente a ciascun valore del layout, quindi con i nomi dei campi ["name", "age", "country"], il primo campo String sarebbe denominato "name", il campo U8 sarebbe "age" e il secondo campo String sarebbe "country".

Ecco un esempio di come questi vengono utilizzati durante la creazione di uno 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])
});

Note Importanti

  • Il campo discriminator è utilizzato internamente e non deve essere modificato
  • Il campo credential collega lo schema al suo tipo di credenziale associato
  • isPaused può essere usato per disabilitare temporaneamente l'uso dello schema
  • Il campo version consente l'evoluzione dello schema mantenendo la compatibilità con le versioni precedenti
  • layout e fieldNames definiscono la struttura delle credenziali che utilizzano questo schema
  • Tutti i campi di array di byte (name, description, layout, fieldNames) devono essere codificati/decodificati correttamente secondo le esigenze della tua applicazione

Is this page helpful?

Indice dei contenuti

Modifica pagina

Gestito da

© 2026 Solana Foundation.
Tutti i diritti riservati.
Resta connesso