Ein Schema definiert die Struktur und Validierungsregeln für Credentials im Solana Attestation System. Schemas dienen als Vorlagen, die festlegen, welche Felder ein Credential enthalten sollte und wie diese formatiert sein sollten. Jedes Schema ist einem Credential-Typ zugeordnet und kann versioniert werden, um die Weiterentwicklung der Datenstruktur zu unterstützen.
Struktur
Das Schema-Struct repräsentiert ein Schema im Solana Attestation System. Jedes Schema definiert eine Vorlage für Credentials, die darunter erstellt werden können.
Typdefinitionen
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
Abrufen von Schemas
| Methode | Beschreibung | Parameter | Rückgabewert |
|---|---|---|---|
fetchSchema | Ruft ein einzelnes Schema über seine Adresse ab | rpc: RPC-Kontext, address: Adresse des Schemas, config?: Fetch-Konfiguration | Promise<Account<Schema>> |
fetchMaybeSchema | Ruft ein Schema sicher ab, gibt null zurück, falls nicht gefunden | rpc: RPC-Kontext, address: Adresse des Schemas, config?: Fetch-Konfiguration | Promise<MaybeAccount<Schema>> |
fetchAllSchema | Ruft mehrere Schemas über ihre Adressen ab | rpc: RPC-Kontext, addresses: Array von Schema-Adressen, config?: Fetch-Konfiguration | Promise<Account<Schema>[]> |
fetchAllMaybeSchema | Ruft mehrere Schemas sicher ab, überspringt nicht gefundene | rpc: RPC-Kontext, addresses: Array von Schema-Adressen, config?: Fetch-Konfiguration | Promise<MaybeAccount<Schema>[]> |
Serialisierung
| Methode | Beschreibung | Parameter | Rückgabewert |
|---|---|---|---|
getSchemaEncoder | Gibt den Encoder für Schema-Daten zurück | Keine | Encoder<SchemaArgs> |
getSchemaDecoder | Gibt den Decoder für Schema-Daten zurück | Keine | Decoder<Schema> |
getSchemaCodec | Gibt den Codec für Schema-Daten zurück | Keine | Codec<SchemaArgs, Schema> |
Verwendungsbeispiele
Abrufen eines einzelnen Schemas
const schema = await fetchSchema(rpc, schemaAddress);console.log("Schema name:", schema.name);
Abrufen mehrerer Schemas
const schemas = await fetchAllSchema(rpc, [schema1Address, schema2Address]);schemas.forEach((schema) => console.log("Schema:", schema.name));
Sicheres Abrufen
const schema = await fetchMaybeSchema(rpc, schemaAddress);if (schema) {console.log("Schema found:", schema.name);} else {console.log("Schema not found");}
Schema-Layout-Datentypen
Das Feld layout verwendet numerische Werte, um Datentypen für jedes Feld im
Schema anzugeben:
| Wert | Datentyp | Beschreibung |
|---|---|---|
| 0 | U8 | Vorzeichenlose 8-Bit-Ganzzahl |
| 1 | U16 | Vorzeichenlose 16-Bit-Ganzzahl |
| 2 | U32 | Vorzeichenlose 32-Bit-Ganzzahl |
| 3 | U64 | Vorzeichenlose 64-Bit-Ganzzahl |
| 4 | U128 | Vorzeichenlose 128-Bit-Ganzzahl |
| 5 | I8 | Vorzeichenbehaftete 8-Bit-Ganzzahl |
| 6 | I16 | Vorzeichenbehaftete 16-Bit-Ganzzahl |
| 7 | I32 | Vorzeichenbehaftete 32-Bit-Ganzzahl |
| 8 | I64 | Vorzeichenbehaftete 64-Bit-Ganzzahl |
| 9 | I128 | Vorzeichenbehaftete 128-Bit-Ganzzahl |
| 10 | Bool | Boolescher Wert |
| 11 | Char | Einzelnes Zeichen |
| 12 | String | Zeichenkette variabler Länge |
| 13 | VecU8 | Vektor vorzeichenloser 8-Bit-Ganzzahlen |
| 14 | VecU16 | Vektor vorzeichenloser 16-Bit-Ganzzahlen |
| 15 | VecU32 | Vektor vorzeichenloser 32-Bit-Ganzzahlen |
| 16 | VecU64 | Vektor vorzeichenloser 64-Bit-Ganzzahlen |
| 17 | VecU128 | Vektor vorzeichenloser 128-Bit-Ganzzahlen |
| 18 | VecI8 | Vektor vorzeichenbehafteter 8-Bit-Ganzzahlen |
| 19 | VecI16 | Vektor vorzeichenbehafteter 16-Bit-Ganzzahlen |
| 20 | VecI32 | Vektor vorzeichenbehafteter 32-Bit-Ganzzahlen |
| 21 | VecI64 | Vektor vorzeichenbehafteter 64-Bit-Ganzzahlen |
| 22 | VecI128 | Vektor vorzeichenbehafteter 128-Bit-Ganzzahlen |
| 23 | VecBool | Vektor boolescher Werte |
| 24 | VecChar | Vektor von Zeichen |
| 25 | VecString | Vektor von Zeichenketten |
Beispielverwendung
Beispielsweise würde ein Layout von [12, 0, 12] drei Felder definieren: einen
String, gefolgt von einer U8-Ganzzahl, gefolgt von einem weiteren String. Das
fieldNames-Array stellt menschenlesbare Namen bereit, die positionell jedem
Layout-Wert entsprechen. Bei Feldnamen ["name", "age", "country"] würde also
das erste String-Feld "name" heißen, das U8-Feld würde "age" sein und das zweite
String-Feld wäre "country".
Hier ist ein Beispiel, wie diese beim Erstellen eines Schemas verwendet werden würden:
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])});
Wichtige Hinweise
- Das
discriminator-Feld wird intern verwendet und sollte nicht verändert werden - Das
credential-Feld verknüpft das Schema mit dem zugehörigen Credential-Typ isPausedkann verwendet werden, um die Schema-Verwendung vorübergehend zu deaktivieren- Das
version-Feld ermöglicht die Weiterentwicklung des Schemas bei gleichzeitiger Aufrechterhaltung der Abwärtskompatibilität layoutundfieldNamesdefinieren die Struktur von Credentials, die dieses Schema verwenden- Alle Byte-Array-Felder (
name,description,layout,fieldNames) sollten gemäß den Anforderungen Ihrer Anwendung ordnungsgemäß kodiert/dekodiert werden
Is this page helpful?