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 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};
Metody
Pobieranie schematów
| Metoda | Opis | Parametry | Zwraca |
|---|---|---|---|
fetchSchema | Pobiera pojedynczy schemat na podstawie jego adresu | rpc: Kontekst RPC, address: Adres schematu, config?: Konfiguracja pobierania | Promise<Account<Schema>> |
fetchMaybeSchema | Bezpiecznie pobiera schemat, zwraca null jeśli nie znaleziono | rpc: Kontekst RPC, address: Adres schematu, config?: Konfiguracja pobierania | Promise<MaybeAccount<Schema>> |
fetchAllSchema | Pobiera wiele schematów na podstawie ich adresów | rpc: Kontekst RPC, addresses: Tablica adresów schematów, config?: Konfiguracja pobierania | Promise<Account<Schema>[]> |
fetchAllMaybeSchema | Bezpiecznie pobiera wiele schematów, pomija nieznalezione | rpc: Kontekst RPC, addresses: Tablica adresów schematów, config?: Konfiguracja pobierania | Promise<MaybeAccount<Schema>[]> |
Serializacja
| Metoda | Opis | Parametry | Zwraca |
|---|---|---|---|
getSchemaEncoder | Zwraca enkoder dla danych schematu | Brak | Encoder<SchemaArgs> |
getSchemaDecoder | Zwraca dekoder dla danych schematu | Brak | Decoder<Schema> |
getSchemaCodec | Zwraca kodek dla danych schematu | Brak | Codec<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 danych | Opis |
|---|---|---|
| 0 | U8 | Liczba całkowita bez znaku 8-bitowa |
| 1 | U16 | Liczba całkowita bez znaku 16-bitowa |
| 2 | U32 | Liczba całkowita bez znaku 32-bitowa |
| 3 | U64 | Liczba całkowita bez znaku 64-bitowa |
| 4 | U128 | Liczba całkowita bez znaku 128-bitowa |
| 5 | I8 | Liczba całkowita ze znakiem 8-bitowa |
| 6 | I16 | Liczba całkowita ze znakiem 16-bitowa |
| 7 | I32 | Liczba całkowita ze znakiem 32-bitowa |
| 8 | I64 | Liczba całkowita ze znakiem 64-bitowa |
| 9 | I128 | Liczba całkowita ze znakiem 128-bitowa |
| 10 | Bool | Wartość logiczna |
| 11 | Char | Pojedynczy znak |
| 12 | String | Ciąg znaków o zmiennej długości |
| 13 | VecU8 | Wektor liczb całkowitych bez znaku 8-bitowych |
| 14 | VecU16 | Wektor liczb całkowitych bez znaku 16-bitowych |
| 15 | VecU32 | Wektor liczb całkowitych bez znaku 32-bitowych |
| 16 | VecU64 | Wektor liczb całkowitych bez znaku 64-bitowych |
| 17 | VecU128 | Wektor liczb całkowitych bez znaku 128-bitowych |
| 18 | VecI8 | Wektor liczb całkowitych ze znakiem 8-bitowych |
| 19 | VecI16 | Wektor liczb całkowitych ze znakiem 16-bitowych |
| 20 | VecI32 | Wektor liczb całkowitych ze znakiem 32-bitowych |
| 21 | VecI64 | Wektor liczb całkowitych ze znakiem 64-bitowych |
| 22 | VecI128 | Wektor liczb całkowitych ze znakiem 128-bitowych |
| 23 | VecBool | Wektor wartości logicznych |
| 24 | VecChar | Wektor znaków |
| 25 | VecString | Wektor 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
discriminatorjest używane wewnętrznie i nie powinno być modyfikowane - Pole
credentialłączy schemat z powiązanym typem poświadczenia isPausedmoże być użyte do tymczasowego wyłączenia użycia schematu- Pole
versionumożliwia ewolucję schematu przy jednoczesnym zachowaniu wstecznej kompatybilności layoutifieldNamesdefiniują 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?