Schemas

Một schema định nghĩa cấu trúc và quy tắc xác thực cho các thông tin xác thực trong Hệ thống Chứng thực Solana. Các schema đóng vai trò như các mẫu chỉ định các trường mà một thông tin xác thực nên chứa và cách chúng nên được định dạng. Mỗi schema được liên kết với một loại thông tin xác thực và có thể được phiên bản hóa để hỗ trợ sự phát triển của cấu trúc dữ liệu.

Cấu trúc

Struct Schema đại diện cho một schema trong Hệ thống Chứng thực Solana. Mỗi schema định nghĩa một mẫu cho các thông tin xác thực có thể được tạo dưới nó.

Định nghĩa Kiểu

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

Phương thức

Lấy Schemas

Phương thứcMô tảTham sốTrả về
fetchSchemaLấy một schema duy nhất theo địa chỉ của nórpc: Ngữ cảnh RPC, address: Địa chỉ của Schema, config?: Cấu hình lấy dữ liệuPromise<Account<Schema>>
fetchMaybeSchemaLấy schema một cách an toàn, trả về null nếu không tìm thấyrpc: Ngữ cảnh RPC, address: Địa chỉ của Schema, config?: Cấu hình lấy dữ liệuPromise<MaybeAccount<Schema>>
fetchAllSchemaLấy nhiều schemas theo địa chỉ của chúngrpc: Ngữ cảnh RPC, addresses: Mảng địa chỉ schema, config?: Cấu hình lấy dữ liệuPromise<Account<Schema>[]>
fetchAllMaybeSchemaLấy nhiều schemas một cách an toàn, bỏ qua những cái không tìm thấyrpc: Ngữ cảnh RPC, addresses: Mảng địa chỉ schema, config?: Cấu hình lấy dữ liệuPromise<MaybeAccount<Schema>[]>

Serialization

Phương thứcMô tảTham sốTrả về
getSchemaEncoderLấy bộ mã hóa cho dữ liệu schemaKhông cóEncoder<SchemaArgs>
getSchemaDecoderLấy bộ giải mã cho dữ liệu schemaKhông cóDecoder<Schema>
getSchemaCodecLấy codec cho dữ liệu schemaKhông cóCodec<SchemaArgs, Schema>

Ví dụ Sử dụng

Lấy một Schema Đơn

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

Lấy Nhiều Schema

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

Lấy Dữ liệu An toàn

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

Các Kiểu Dữ liệu Bố cục Schema

Trường layout sử dụng các giá trị số để chỉ định kiểu dữ liệu cho từng trường trong schema:

Giá trịKiểu Dữ liệuMô tả
0U8Số nguyên không dấu 8-bit
1U16Số nguyên không dấu 16-bit
2U32Số nguyên không dấu 32-bit
3U64Số nguyên không dấu 64-bit
4U128Số nguyên không dấu 128-bit
5I8Số nguyên có dấu 8-bit
6I16Số nguyên có dấu 16-bit
7I32Số nguyên có dấu 32-bit
8I64Số nguyên có dấu 64-bit
9I128Số nguyên có dấu 128-bit
10BoolGiá trị boolean
11CharKý tự đơn
12StringChuỗi có độ dài thay đổi
13VecU8Vector số nguyên không dấu 8-bit
14VecU16Vector số nguyên không dấu 16-bit
15VecU32Vector số nguyên không dấu 32-bit
16VecU64Vector số nguyên không dấu 64-bit
17VecU128Vector số nguyên không dấu 128-bit
18VecI8Vector số nguyên có dấu 8-bit
19VecI16Vector số nguyên có dấu 16-bit
20VecI32Vector số nguyên có dấu 32-bit
21VecI64Vector số nguyên có dấu 64-bit
22VecI128Vector số nguyên có dấu 128-bit
23VecBoolVector giá trị boolean
24VecCharVector ký tự
25VecStringVector chuỗi

Ví dụ Sử dụng

Ví dụ, một bố cục [12, 0, 12] sẽ định nghĩa ba trường: một String, tiếp theo là một số nguyên U8, sau đó là một String khác. Mảng fieldNames cung cấp các tên dễ đọc tương ứng về vị trí với từng giá trị bố cục, vì vậy với các tên trường ["name", "age", "country"], trường String đầu tiên sẽ được đặt tên là "name", trường U8 sẽ là "age", và trường String thứ hai sẽ là "country".

Dưới đây là ví dụ về cách chúng được sử dụng khi tạo một 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])
});

Lưu ý Quan trọng

  • Trường discriminator được sử dụng nội bộ và không nên sửa đổi
  • Trường credential liên kết schema với loại thông tin xác thực tương ứng
  • isPaused có thể được sử dụng để tạm thời vô hiệu hóa việc sử dụng schema
  • Trường version cho phép schema phát triển trong khi vẫn duy trì khả năng tương thích ngược
  • layoutfieldNames định nghĩa cấu trúc của các thông tin xác thực sử dụng schema này
  • Tất cả các trường mảng byte (name, description, layout, fieldNames) nên được mã hóa/giải mã đúng cách theo yêu cầu của ứng dụng

Is this page helpful?

Mục lục

Chỉnh sửa trang

Quản lý bởi

© 2026 Solana Foundation.
Đã đăng ký bản quyền.
Kết nối