Схеми

Схема визначає структуру та правила валідації для облікових даних у Системі атестації Solana. Схеми служать шаблонами, які вказують, які поля повинні міститися в обліковому записі та як вони повинні бути відформатовані. Кожна схема пов'язана з типом облікових даних і може мати версії для підтримки еволюції структури даних.

Структура

Структура Schema представляє схему в Системі атестації Solana. Кожна схема визначає шаблон для облікових даних, які можуть бути створені під нею.

Визначення типів

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

Методи

Отримання схем

МетодОписПараметриПовертає
fetchSchemaОтримує одну схему за її адресоюrpc: контекст RPC, address: адреса схеми, config?: конфігурація отриманняPromise<Account<Schema>>
fetchMaybeSchemaБезпечно отримує схему, повертає null якщо не знайденоrpc: контекст RPC, address: адреса схеми, config?: конфігурація отриманняPromise<MaybeAccount<Schema>>
fetchAllSchemaОтримує кілька схем за їхніми адресамиrpc: контекст RPC, addresses: масив адрес схем, config?: конфігурація отриманняPromise<Account<Schema>[]>
fetchAllMaybeSchemaБезпечно отримує кілька схем, пропускає не знайденіrpc: контекст RPC, addresses: масив адрес схем, config?: конфігурація отриманняPromise<MaybeAccount<Schema>[]>

Серіалізація

МетодОписПараметриПовертає
getSchemaEncoderОтримує кодувальник для даних схемиНемаєEncoder<SchemaArgs>
getSchemaDecoderОтримує декодер для даних схемиНемаєDecoder<Schema>
getSchemaCodecОтримує кодек для даних схемиНемаєCodec<SchemaArgs, Schema>

Приклади використання

Отримання однієї схеми

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

Отримання кількох схем

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

Безпечне отримання

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

Типи даних макета схеми

Поле layout використовує числові значення для визначення типів даних для кожного поля у схемі:

ЗначенняТип данихОпис
0U8Беззнакове 8-бітне ціле число
1U16Беззнакове 16-бітне ціле число
2U32Беззнакове 32-бітне ціле число
3U64Беззнакове 64-бітне ціле число
4U128Беззнакове 128-бітне ціле число
5I8Знакове 8-бітне ціле число
6I16Знакове 16-бітне ціле число
7I32Знакове 32-бітне ціле число
8I64Знакове 64-бітне ціле число
9I128Знакове 128-бітне ціле число
10BoolБулеве значення
11CharОдин символ
12StringРядок змінної довжини
13VecU8Вектор беззнакових 8-бітних цілих чисел
14VecU16Вектор беззнакових 16-бітних цілих чисел
15VecU32Вектор беззнакових 32-бітних цілих чисел
16VecU64Вектор беззнакових 64-бітних цілих чисел
17VecU128Вектор беззнакових 128-бітних цілих чисел
18VecI8Вектор знакових 8-бітних цілих чисел
19VecI16Вектор знакових 16-бітних цілих чисел
20VecI32Вектор знакових 32-бітних цілих чисел
21VecI64Вектор знакових 64-бітних цілих чисел
22VecI128Вектор знакових 128-бітних цілих чисел
23VecBoolВектор булевих значень
24VecCharВектор символів
25VecStringВектор рядків

Приклад використання

Наприклад, макет [12, 0, 12] визначить три поля: рядок (String), за яким слідує ціле число U8, а потім ще один рядок (String). Масив fieldNames надає зрозумілі людині назви, які позиційно відповідають кожному значенню макета, тому з іменами полів ["name", "age", "country"] перше поле String буде називатися "name", поле U8 буде "age", а друге поле String буде "country".

Ось приклад того, як вони використовуватимуться при створенні 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])
});

Важливі примітки

  • Поле discriminator використовується внутрішньо і не повинно змінюватися
  • Поле credential пов'язує схему з відповідним типом облікових даних
  • isPaused може використовуватися для тимчасового вимкнення використання схеми
  • Поле version дозволяє еволюцію схеми зі збереженням зворотної сумісності
  • layout та fieldNames визначають структуру облікових даних, що використовують цю схему
  • Усі поля масиву байтів (name, description, layout, fieldNames) повинні бути правильно закодовані/декодовані відповідно до потреб вашої програми

Is this page helpful?

Керується

© 2026 Фонд Solana.
Всі права захищені.
Залишайтеся на зв'язку