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 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};
Phương thức
Lấy Schemas
| Phương thức | Mô tả | Tham số | Trả về |
|---|---|---|---|
fetchSchema | Lấ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ệu | Promise<Account<Schema>> |
fetchMaybeSchema | Lấy schema một cách an toàn, trả về null nếu không tìm thấy | rpc: Ngữ cảnh RPC, address: Địa chỉ của Schema, config?: Cấu hình lấy dữ liệu | Promise<MaybeAccount<Schema>> |
fetchAllSchema | Lấy nhiều schemas theo địa chỉ của chúng | rpc: Ngữ cảnh RPC, addresses: Mảng địa chỉ schema, config?: Cấu hình lấy dữ liệu | Promise<Account<Schema>[]> |
fetchAllMaybeSchema | Lấy nhiều schemas một cách an toàn, bỏ qua những cái không tìm thấy | rpc: Ngữ cảnh RPC, addresses: Mảng địa chỉ schema, config?: Cấu hình lấy dữ liệu | Promise<MaybeAccount<Schema>[]> |
Serialization
| Phương thức | Mô tả | Tham số | Trả về |
|---|---|---|---|
getSchemaEncoder | Lấy bộ mã hóa cho dữ liệu schema | Không có | Encoder<SchemaArgs> |
getSchemaDecoder | Lấy bộ giải mã cho dữ liệu schema | Không có | Decoder<Schema> |
getSchemaCodec | Lấy codec cho dữ liệu schema | Khô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ệu | Mô tả |
|---|---|---|
| 0 | U8 | Số nguyên không dấu 8-bit |
| 1 | U16 | Số nguyên không dấu 16-bit |
| 2 | U32 | Số nguyên không dấu 32-bit |
| 3 | U64 | Số nguyên không dấu 64-bit |
| 4 | U128 | Số nguyên không dấu 128-bit |
| 5 | I8 | Số nguyên có dấu 8-bit |
| 6 | I16 | Số nguyên có dấu 16-bit |
| 7 | I32 | Số nguyên có dấu 32-bit |
| 8 | I64 | Số nguyên có dấu 64-bit |
| 9 | I128 | Số nguyên có dấu 128-bit |
| 10 | Bool | Giá trị boolean |
| 11 | Char | Ký tự đơn |
| 12 | String | Chuỗi có độ dài thay đổi |
| 13 | VecU8 | Vector số nguyên không dấu 8-bit |
| 14 | VecU16 | Vector số nguyên không dấu 16-bit |
| 15 | VecU32 | Vector số nguyên không dấu 32-bit |
| 16 | VecU64 | Vector số nguyên không dấu 64-bit |
| 17 | VecU128 | Vector số nguyên không dấu 128-bit |
| 18 | VecI8 | Vector số nguyên có dấu 8-bit |
| 19 | VecI16 | Vector số nguyên có dấu 16-bit |
| 20 | VecI32 | Vector số nguyên có dấu 32-bit |
| 21 | VecI64 | Vector số nguyên có dấu 64-bit |
| 22 | VecI128 | Vector số nguyên có dấu 128-bit |
| 23 | VecBool | Vector giá trị boolean |
| 24 | VecChar | Vector ký tự |
| 25 | VecString | Vector 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
credentialliên kết schema với loại thông tin xác thực tương ứng isPausedcó thể được sử dụng để tạm thời vô hiệu hóa việc sử dụng schema- Trường
versioncho phép schema phát triển trong khi vẫn duy trì khả năng tương thích ngược layoutvàfieldNamesđị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?