Schematy

Schemat definiuje strukturę i reguły walidacji dla poświadczeń w Systemie Atestacji Solana. Schematy służą jako szablony określające, jakie pola powinno zawierać poświadczenie i jak powinny być sformatowane. Każdy schemat jest powiązany z typem poświadczenia i może być wersjonowany, aby wspierać ewolucję struktury danych.

Struktura

Struktura Schema reprezentuje schemat w Systemie Atestacji Solana. Każdy schemat definiuje szablon dla poświadczeń, które mogą być tworzone w jego ramach.

Definicje typów

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

Metody

Pobieranie schematów

MetodaOpisParametryZwraca
fetchSchemaPobiera pojedynczy schemat na podstawie jego adresurpc: Kontekst RPC, address: Adres schematu, config?: Konfiguracja pobieraniaPromise<Account<Schema>>
fetchMaybeSchemaBezpiecznie pobiera schemat, zwraca null jeśli nie znalezionorpc: Kontekst RPC, address: Adres schematu, config?: Konfiguracja pobieraniaPromise<MaybeAccount<Schema>>
fetchAllSchemaPobiera wiele schematów na podstawie ich adresówrpc: Kontekst RPC, addresses: Tablica adresów schematów, config?: Konfiguracja pobieraniaPromise<Account<Schema>[]>
fetchAllMaybeSchemaBezpiecznie pobiera wiele schematów, pomija nieznalezionerpc: Kontekst RPC, addresses: Tablica adresów schematów, config?: Konfiguracja pobieraniaPromise<MaybeAccount<Schema>[]>

Serializacja

MetodaOpisParametryZwraca
getSchemaEncoderZwraca enkoder dla danych schematuBrakEncoder<SchemaArgs>
getSchemaDecoderZwraca dekoder dla danych schematuBrakDecoder<Schema>
getSchemaCodecZwraca kodek dla danych schematuBrakCodec<SchemaArgs, Schema>

Przykłady użycia

Pobieranie pojedynczego schematu

const schema = await fetchSchema(rpc, schemaAddress);
console.log("Schema name:", schema.name);

Pobieranie wielu schematów

const schemas = await fetchAllSchema(rpc, [schema1Address, schema2Address]);
schemas.forEach((schema) => console.log("Schema:", schema.name));

Bezpieczne pobieranie

const schema = await fetchMaybeSchema(rpc, schemaAddress);
if (schema) {
console.log("Schema found:", schema.name);
} else {
console.log("Schema not found");
}

Typy danych układu schematu

Pole layout używa wartości numerycznych do określenia typów danych dla każdego pola w schemacie:

WartośćTyp danychOpis
0U8Liczba całkowita bez znaku 8-bitowa
1U16Liczba całkowita bez znaku 16-bitowa
2U32Liczba całkowita bez znaku 32-bitowa
3U64Liczba całkowita bez znaku 64-bitowa
4U128Liczba całkowita bez znaku 128-bitowa
5I8Liczba całkowita ze znakiem 8-bitowa
6I16Liczba całkowita ze znakiem 16-bitowa
7I32Liczba całkowita ze znakiem 32-bitowa
8I64Liczba całkowita ze znakiem 64-bitowa
9I128Liczba całkowita ze znakiem 128-bitowa
10BoolWartość logiczna
11CharPojedynczy znak
12StringCiąg znaków o zmiennej długości
13VecU8Wektor liczb całkowitych bez znaku 8-bitowych
14VecU16Wektor liczb całkowitych bez znaku 16-bitowych
15VecU32Wektor liczb całkowitych bez znaku 32-bitowych
16VecU64Wektor liczb całkowitych bez znaku 64-bitowych
17VecU128Wektor liczb całkowitych bez znaku 128-bitowych
18VecI8Wektor liczb całkowitych ze znakiem 8-bitowych
19VecI16Wektor liczb całkowitych ze znakiem 16-bitowych
20VecI32Wektor liczb całkowitych ze znakiem 32-bitowych
21VecI64Wektor liczb całkowitych ze znakiem 64-bitowych
22VecI128Wektor liczb całkowitych ze znakiem 128-bitowych
23VecBoolWektor wartości logicznych
24VecCharWektor znaków
25VecStringWektor ciągów znaków

Przykład użycia

Na przykład układ [12, 0, 12] definiowałby trzy pola: String, po którym następuje liczba całkowita U8, a następnie kolejny String. Tablica fieldNames udostępnia czytelne dla człowieka nazwy, które odpowiadają pozycyjnie każdej wartości układu, więc przy nazwach pól ["name", "age", "country"], pierwsze pole String nosiłoby nazwę "name", pole U8 to "age", a drugie pole String to "country".

Oto przykład tego, jak można je wykorzystać podczas tworzenia schematu:

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

Ważne uwagi

  • Pole discriminator jest używane wewnętrznie i nie powinno być modyfikowane
  • Pole credential łączy schemat z powiązanym typem poświadczenia
  • isPaused może być użyte do tymczasowego wyłączenia użycia schematu
  • Pole version umożliwia ewolucję schematu przy jednoczesnym zachowaniu wstecznej kompatybilności
  • layout i fieldNames definiują strukturę poświadczeń wykorzystujących ten schemat
  • Wszystkie pola tablic bajtów (name, description, layout, fieldNames) powinny być odpowiednio zakodowane/odkodowane zgodnie z potrzebami Twojej aplikacji

Is this page helpful?

Spis treści

Edytuj stronę

Zarządzane przez

© 2026 Solana Foundation.
Wszelkie prawa zastrzeżone.
Bądź na bieżąco