Schemas

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

Methoden

Abrufen von Schemas

MethodeBeschreibungParameterRückgabewert
fetchSchemaRuft ein einzelnes Schema über seine Adresse abrpc: RPC-Kontext, address: Adresse des Schemas, config?: Fetch-KonfigurationPromise<Account<Schema>>
fetchMaybeSchemaRuft ein Schema sicher ab, gibt null zurück, falls nicht gefundenrpc: RPC-Kontext, address: Adresse des Schemas, config?: Fetch-KonfigurationPromise<MaybeAccount<Schema>>
fetchAllSchemaRuft mehrere Schemas über ihre Adressen abrpc: RPC-Kontext, addresses: Array von Schema-Adressen, config?: Fetch-KonfigurationPromise<Account<Schema>[]>
fetchAllMaybeSchemaRuft mehrere Schemas sicher ab, überspringt nicht gefundenerpc: RPC-Kontext, addresses: Array von Schema-Adressen, config?: Fetch-KonfigurationPromise<MaybeAccount<Schema>[]>

Serialisierung

MethodeBeschreibungParameterRückgabewert
getSchemaEncoderGibt den Encoder für Schema-Daten zurückKeineEncoder<SchemaArgs>
getSchemaDecoderGibt den Decoder für Schema-Daten zurückKeineDecoder<Schema>
getSchemaCodecGibt den Codec für Schema-Daten zurückKeineCodec<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:

WertDatentypBeschreibung
0U8Vorzeichenlose 8-Bit-Ganzzahl
1U16Vorzeichenlose 16-Bit-Ganzzahl
2U32Vorzeichenlose 32-Bit-Ganzzahl
3U64Vorzeichenlose 64-Bit-Ganzzahl
4U128Vorzeichenlose 128-Bit-Ganzzahl
5I8Vorzeichenbehaftete 8-Bit-Ganzzahl
6I16Vorzeichenbehaftete 16-Bit-Ganzzahl
7I32Vorzeichenbehaftete 32-Bit-Ganzzahl
8I64Vorzeichenbehaftete 64-Bit-Ganzzahl
9I128Vorzeichenbehaftete 128-Bit-Ganzzahl
10BoolBoolescher Wert
11CharEinzelnes Zeichen
12StringZeichenkette variabler Länge
13VecU8Vektor vorzeichenloser 8-Bit-Ganzzahlen
14VecU16Vektor vorzeichenloser 16-Bit-Ganzzahlen
15VecU32Vektor vorzeichenloser 32-Bit-Ganzzahlen
16VecU64Vektor vorzeichenloser 64-Bit-Ganzzahlen
17VecU128Vektor vorzeichenloser 128-Bit-Ganzzahlen
18VecI8Vektor vorzeichenbehafteter 8-Bit-Ganzzahlen
19VecI16Vektor vorzeichenbehafteter 16-Bit-Ganzzahlen
20VecI32Vektor vorzeichenbehafteter 32-Bit-Ganzzahlen
21VecI64Vektor vorzeichenbehafteter 64-Bit-Ganzzahlen
22VecI128Vektor vorzeichenbehafteter 128-Bit-Ganzzahlen
23VecBoolVektor boolescher Werte
24VecCharVektor von Zeichen
25VecStringVektor 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
  • isPaused kann 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
  • layout und fieldNames definieren 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?

Inhaltsverzeichnis

Seite bearbeiten

Verwaltet von

© 2026 Solana Foundation.
Alle Rechte vorbehalten.
Verbinden Sie sich