Un schéma définit la structure et les règles de validation pour les identifiants dans le Système d'Attestation Solana. Les schémas servent de modèles qui spécifient quels champs un identifiant doit contenir et comment ils doivent être formatés. Chaque schéma est associé à un type d'identifiant et peut être versionné pour prendre en charge l'évolution de la structure des données.
Structure
La structure Schema représente un schéma dans le Système d'Attestation Solana. Chaque schéma définit un modèle pour les identifiants qui peuvent être créés sous celui-ci.
Définitions de Types
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éthodes
Récupération des Schémas
| Méthode | Description | Paramètres | Retourne |
|---|---|---|---|
fetchSchema | Récupère un schéma unique par son adresse | rpc : Contexte RPC, address : Adresse du schéma, config? : Configuration de récupération | Promise<Account<Schema>> |
fetchMaybeSchema | Récupère un schéma en toute sécurité, retourne null si non trouvé | rpc : Contexte RPC, address : Adresse du schéma, config? : Configuration de récupération | Promise<MaybeAccount<Schema>> |
fetchAllSchema | Récupère plusieurs schémas par leurs adresses | rpc : Contexte RPC, addresses : Tableau d'adresses de schémas, config? : Configuration de récupération | Promise<Account<Schema>[]> |
fetchAllMaybeSchema | Récupère plusieurs schémas en toute sécurité, ignore ceux non trouvés | rpc : Contexte RPC, addresses : Tableau d'adresses de schémas, config? : Configuration de récupération | Promise<MaybeAccount<Schema>[]> |
Sérialisation
| Méthode | Description | Paramètres | Retourne |
|---|---|---|---|
getSchemaEncoder | Obtient l'encodeur pour les données de schéma | Aucun | Encoder<SchemaArgs> |
getSchemaDecoder | Obtient le décodeur pour les données de schéma | Aucun | Decoder<Schema> |
getSchemaCodec | Obtient le codec pour les données de schéma | Aucun | Codec<SchemaArgs, Schema> |
Exemples d'utilisation
Récupération d'un schéma unique
const schema = await fetchSchema(rpc, schemaAddress);console.log("Schema name:", schema.name);
Récupération de plusieurs schémas
const schemas = await fetchAllSchema(rpc, [schema1Address, schema2Address]);schemas.forEach((schema) => console.log("Schema:", schema.name));
Récupération sécurisée
const schema = await fetchMaybeSchema(rpc, schemaAddress);if (schema) {console.log("Schema found:", schema.name);} else {console.log("Schema not found");}
Types de données de la disposition du schéma
Le champ layout utilise des valeurs numériques pour spécifier les types de
données de chaque champ du schéma :
| Valeur | Type de données | Description |
|---|---|---|
| 0 | U8 | Entier non signé sur 8 bits |
| 1 | U16 | Entier non signé sur 16 bits |
| 2 | U32 | Entier non signé sur 32 bits |
| 3 | U64 | Entier non signé sur 64 bits |
| 4 | U128 | Entier non signé sur 128 bits |
| 5 | I8 | Entier signé sur 8 bits |
| 6 | I16 | Entier signé sur 16 bits |
| 7 | I32 | Entier signé sur 32 bits |
| 8 | I64 | Entier signé sur 64 bits |
| 9 | I128 | Entier signé sur 128 bits |
| 10 | Bool | Valeur booléenne |
| 11 | Char | Caractère unique |
| 12 | String | Chaîne de caractères de longueur variable |
| 13 | VecU8 | Vecteur d'entiers non signés sur 8 bits |
| 14 | VecU16 | Vecteur d'entiers non signés sur 16 bits |
| 15 | VecU32 | Vecteur d'entiers non signés sur 32 bits |
| 16 | VecU64 | Vecteur d'entiers non signés sur 64 bits |
| 17 | VecU128 | Vecteur d'entiers non signés sur 128 bits |
| 18 | VecI8 | Vecteur d'entiers signés sur 8 bits |
| 19 | VecI16 | Vecteur d'entiers signés sur 16 bits |
| 20 | VecI32 | Vecteur d'entiers signés sur 32 bits |
| 21 | VecI64 | Vecteur d'entiers signés sur 64 bits |
| 22 | VecI128 | Vecteur d'entiers signés sur 128 bits |
| 23 | VecBool | Vecteur de valeurs booléennes |
| 24 | VecChar | Vecteur de caractères |
| 25 | VecString | Vecteur de chaînes de caractères |
Exemple d'utilisation
Par exemple, une disposition de [12, 0, 12] définirait trois champs : une
String, suivie d'un entier U8, suivi d'une autre String. Le tableau fieldNames
fournit des noms lisibles par l'humain qui correspondent positionnellement à
chaque valeur de disposition, donc avec les noms de champs
["name", "age", "country"], le premier champ String serait nommé "name", le
champ U8 serait "age", et le second champ String serait "country".
Voici un exemple de la façon dont ceux-ci seraient utilisés lors de la création d'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])});
Remarques importantes
- Le champ
discriminatorest utilisé en interne et ne doit pas être modifié - Le champ
credentialrelie le schéma à son type de credential associé isPausedpeut être utilisé pour désactiver temporairement l'utilisation du schéma- Le champ
versionpermet l'évolution du schéma tout en maintenant la compatibilité ascendante layoutetfieldNamesdéfinissent la structure des credentials utilisant ce schéma- Tous les champs de tableau d'octets (
name,description,layout,fieldNames) doivent être correctement encodés/décodés selon les besoins de votre application
Is this page helpful?