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 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};
Metodi
Recupero degli Schemi
| Metodo | Descrizione | Parametri | Restituisce |
|---|---|---|---|
fetchSchema | Recupera un singolo schema tramite il suo indirizzo | rpc: contesto RPC, address: indirizzo dello schema, config?: configurazione di recupero | Promise<Account<Schema>> |
fetchMaybeSchema | Recupera in modo sicuro uno schema, restituisce null se non trovato | rpc: contesto RPC, address: indirizzo dello schema, config?: configurazione di recupero | Promise<MaybeAccount<Schema>> |
fetchAllSchema | Recupera più schemi tramite i loro indirizzi | rpc: contesto RPC, addresses: array di indirizzi degli schemi, config?: configurazione di recupero | Promise<Account<Schema>[]> |
fetchAllMaybeSchema | Recupera in modo sicuro più schemi, salta quelli non trovati | rpc: contesto RPC, addresses: array di indirizzi degli schemi, config?: configurazione di recupero | Promise<MaybeAccount<Schema>[]> |
Serializzazione
| Metodo | Descrizione | Parametri | Restituisce |
|---|---|---|---|
getSchemaEncoder | Ottiene l'encoder per i dati dello schema | Nessuno | Encoder<SchemaArgs> |
getSchemaDecoder | Ottiene il decoder per i dati dello schema | Nessuno | Decoder<Schema> |
getSchemaCodec | Ottiene il codec per i dati dello schema | Nessuno | Codec<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:
| Valore | Tipo di Dati | Descrizione |
|---|---|---|
| 0 | U8 | Intero senza segno a 8 bit |
| 1 | U16 | Intero senza segno a 16 bit |
| 2 | U32 | Intero senza segno a 32 bit |
| 3 | U64 | Intero senza segno a 64 bit |
| 4 | U128 | Intero senza segno a 128 bit |
| 5 | I8 | Intero con segno a 8 bit |
| 6 | I16 | Intero con segno a 16 bit |
| 7 | I32 | Intero con segno a 32 bit |
| 8 | I64 | Intero con segno a 64 bit |
| 9 | I128 | Intero con segno a 128 bit |
| 10 | Bool | Valore booleano |
| 11 | Char | Singolo carattere |
| 12 | String | Stringa a lunghezza variabile |
| 13 | VecU8 | Vettore di interi senza segno a 8 bit |
| 14 | VecU16 | Vettore di interi senza segno a 16 bit |
| 15 | VecU32 | Vettore di interi senza segno a 32 bit |
| 16 | VecU64 | Vettore di interi senza segno a 64 bit |
| 17 | VecU128 | Vettore di interi senza segno a 128 bit |
| 18 | VecI8 | Vettore di interi con segno a 8 bit |
| 19 | VecI16 | Vettore di interi con segno a 16 bit |
| 20 | VecI32 | Vettore di interi con segno a 32 bit |
| 21 | VecI64 | Vettore di interi con segno a 64 bit |
| 22 | VecI128 | Vettore di interi con segno a 128 bit |
| 23 | VecBool | Vettore di valori booleani |
| 24 | VecChar | Vettore di caratteri |
| 25 | VecString | Vettore 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
credentialcollega lo schema al suo tipo di credenziale associato isPausedpuò essere usato per disabilitare temporaneamente l'uso dello schema- Il campo
versionconsente l'evoluzione dello schema mantenendo la compatibilità con le versioni precedenti layoutefieldNamesdefiniscono 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?