Een schema definieert de structuur en validatieregels voor credentials in het Solana Attestation System. Schema's dienen als sjablonen die specificeren welke velden een credential moet bevatten en hoe deze geformatteerd moeten worden. Elk schema is gekoppeld aan een credentialtype en kan worden geversioneerd om evolutie van de datastructuur te ondersteunen.
Structuur
De Schema struct vertegenwoordigt een schema in het Solana Attestation System. Elk schema definieert een sjabloon voor credentials die eronder kunnen worden aangemaakt.
Type Definities
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};
Methoden
Schema's Ophalen
| Methode | Beschrijving | Parameters | Retourneert |
|---|---|---|---|
fetchSchema | Haalt een enkel schema op via zijn adres | rpc: RPC context, address: Adres van schema, config?: Fetch configuratie | Promise<Account<Schema>> |
fetchMaybeSchema | Haalt veilig een schema op, retourneert null indien niet gevonden | rpc: RPC context, address: Adres van schema, config?: Fetch configuratie | Promise<MaybeAccount<Schema>> |
fetchAllSchema | Haalt meerdere schema's op via hun adressen | rpc: RPC context, addresses: Array van schema-adressen, config?: Fetch configuratie | Promise<Account<Schema>[]> |
fetchAllMaybeSchema | Haalt veilig meerdere schema's op, slaat niet-gevonden over | rpc: RPC context, addresses: Array van schema-adressen, config?: Fetch configuratie | Promise<MaybeAccount<Schema>[]> |
Serialisatie
| Methode | Beschrijving | Parameters | Retourneert |
|---|---|---|---|
getSchemaEncoder | Haalt de encoder op voor schemadata | Geen | Encoder<SchemaArgs> |
getSchemaDecoder | Haalt de decoder op voor schemadata | Geen | Decoder<Schema> |
getSchemaCodec | Haalt de codec op voor schemadata | Geen | Codec<SchemaArgs, Schema> |
Gebruiksvoorbeelden
Een Enkel Schema Ophalen
const schema = await fetchSchema(rpc, schemaAddress);console.log("Schema name:", schema.name);
Meerdere Schema's Ophalen
const schemas = await fetchAllSchema(rpc, [schema1Address, schema2Address]);schemas.forEach((schema) => console.log("Schema:", schema.name));
Veilig Ophalen
const schema = await fetchMaybeSchema(rpc, schemaAddress);if (schema) {console.log("Schema found:", schema.name);} else {console.log("Schema not found");}
Schema Layout Gegevenstypen
Het layout veld gebruikt numerieke waarden om gegevenstypen voor elk veld in
het schema te specificeren:
| Waarde | Gegevenstype | Beschrijving |
|---|---|---|
| 0 | U8 | Unsigned 8-bit integer |
| 1 | U16 | Unsigned 16-bit integer |
| 2 | U32 | Unsigned 32-bit integer |
| 3 | U64 | Unsigned 64-bit integer |
| 4 | U128 | Unsigned 128-bit integer |
| 5 | I8 | Signed 8-bit integer |
| 6 | I16 | Signed 16-bit integer |
| 7 | I32 | Signed 32-bit integer |
| 8 | I64 | Signed 64-bit integer |
| 9 | I128 | Signed 128-bit integer |
| 10 | Bool | Booleaanse waarde |
| 11 | Char | Enkel karakter |
| 12 | String | String met variabele lengte |
| 13 | VecU8 | Vector van unsigned 8-bit integers |
| 14 | VecU16 | Vector van unsigned 16-bit integers |
| 15 | VecU32 | Vector van unsigned 32-bit integers |
| 16 | VecU64 | Vector van unsigned 64-bit integers |
| 17 | VecU128 | Vector van unsigned 128-bit integers |
| 18 | VecI8 | Vector van signed 8-bit integers |
| 19 | VecI16 | Vector van signed 16-bit integers |
| 20 | VecI32 | Vector van signed 32-bit integers |
| 21 | VecI64 | Vector van signed 64-bit integers |
| 22 | VecI128 | Vector van signed 128-bit integers |
| 23 | VecBool | Vector van booleaanse waarden |
| 24 | VecChar | Vector van karakters |
| 25 | VecString | Vector van strings |
Voorbeeldgebruik
Een layout van [12, 0, 12] zou bijvoorbeeld drie velden definiëren: een
String, gevolgd door een U8-integer, gevolgd door nog een String. De
fieldNames-array biedt leesbare namen die positioneel overeenkomen met elke
layoutwaarde, dus met veldnamen ["name", "age", "country"] zou het eerste
String-veld "name" heten, het U8-veld zou "age" zijn, en het tweede String-veld
zou "country" zijn.
Hier is een voorbeeld van hoe deze gebruikt zouden worden bij het aanmaken van een 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])});
Belangrijke opmerkingen
- Het veld
discriminatorwordt intern gebruikt en mag niet worden gewijzigd - Het veld
credentialkoppelt het schema aan het bijbehorende referentietype isPausedkan worden gebruikt om het gebruik van het schema tijdelijk uit te schakelen- Het veld
versionmaakt schema-evolutie mogelijk met behoud van achterwaartse compatibiliteit layoutenfieldNamesdefiniëren de structuur van referenties die dit schema gebruiken- Alle byte-arrayvelden (
name,description,layout,fieldNames) moeten correct worden gecodeerd/gedecodeerd volgens de behoeften van uw applicatie
Is this page helpful?