Схемы

Схема определяет структуру и правила валидации для учётных данных в Системе аттестации 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 Foundation.
Все права защищены.
Связаться с нами