Skema mendefinisikan struktur dan aturan validasi untuk kredensial dalam Sistem Atestasi Solana. Skema berfungsi sebagai template yang menentukan field apa yang harus ada dalam kredensial dan bagaimana formatnya. Setiap skema dikaitkan dengan jenis kredensial dan dapat diberi versi untuk mendukung evolusi struktur data.
Struktur
Struct Schema merepresentasikan skema dalam Sistem Atestasi Solana. Setiap skema mendefinisikan template untuk kredensial yang dapat dibuat di bawahnya.
Definisi Tipe
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};
Metode
Mengambil Skema
| Metode | Deskripsi | Parameter | Mengembalikan |
|---|---|---|---|
fetchSchema | Mengambil satu skema berdasarkan alamatnya | rpc: Konteks RPC, address: Alamat skema, config?: Konfigurasi fetch | Promise<Account<Schema>> |
fetchMaybeSchema | Mengambil skema dengan aman, mengembalikan null jika tidak ditemukan | rpc: Konteks RPC, address: Alamat skema, config?: Konfigurasi fetch | Promise<MaybeAccount<Schema>> |
fetchAllSchema | Mengambil beberapa skema berdasarkan alamatnya | rpc: Konteks RPC, addresses: Array alamat skema, config?: Konfigurasi fetch | Promise<Account<Schema>[]> |
fetchAllMaybeSchema | Mengambil beberapa skema dengan aman, melewati yang tidak ditemukan | rpc: Konteks RPC, addresses: Array alamat skema, config?: Konfigurasi fetch | Promise<MaybeAccount<Schema>[]> |
Serialisasi
| Metode | Deskripsi | Parameter | Mengembalikan |
|---|---|---|---|
getSchemaEncoder | Mendapatkan encoder untuk data skema | Tidak ada | Encoder<SchemaArgs> |
getSchemaDecoder | Mendapatkan decoder untuk data skema | Tidak ada | Decoder<Schema> |
getSchemaCodec | Mendapatkan codec untuk data skema | Tidak ada | Codec<SchemaArgs, Schema> |
Contoh Penggunaan
Mengambil Satu Skema
const schema = await fetchSchema(rpc, schemaAddress);console.log("Schema name:", schema.name);
Mengambil Beberapa Skema
const schemas = await fetchAllSchema(rpc, [schema1Address, schema2Address]);schemas.forEach((schema) => console.log("Schema:", schema.name));
Pengambilan Aman
const schema = await fetchMaybeSchema(rpc, schemaAddress);if (schema) {console.log("Schema found:", schema.name);} else {console.log("Schema not found");}
Tipe Data Layout Skema
Field layout menggunakan nilai numerik untuk menentukan tipe data bagi setiap
field dalam skema:
| Nilai | Tipe Data | Deskripsi |
|---|---|---|
| 0 | U8 | Integer 8-bit unsigned |
| 1 | U16 | Integer 16-bit unsigned |
| 2 | U32 | Integer 32-bit unsigned |
| 3 | U64 | Integer 64-bit unsigned |
| 4 | U128 | Integer 128-bit unsigned |
| 5 | I8 | Integer 8-bit signed |
| 6 | I16 | Integer 16-bit signed |
| 7 | I32 | Integer 32-bit signed |
| 8 | I64 | Integer 64-bit signed |
| 9 | I128 | Integer 128-bit signed |
| 10 | Bool | Nilai boolean |
| 11 | Char | Karakter tunggal |
| 12 | String | String dengan panjang variabel |
| 13 | VecU8 | Vektor integer 8-bit unsigned |
| 14 | VecU16 | Vektor integer 16-bit unsigned |
| 15 | VecU32 | Vektor integer 32-bit unsigned |
| 16 | VecU64 | Vektor integer 64-bit unsigned |
| 17 | VecU128 | Vektor integer 128-bit unsigned |
| 18 | VecI8 | Vektor integer 8-bit signed |
| 19 | VecI16 | Vektor integer 16-bit signed |
| 20 | VecI32 | Vektor integer 32-bit signed |
| 21 | VecI64 | Vektor integer 64-bit signed |
| 22 | VecI128 | Vektor integer 128-bit signed |
| 23 | VecBool | Vektor nilai boolean |
| 24 | VecChar | Vektor karakter |
| 25 | VecString | Vektor string |
Contoh Penggunaan
Sebagai contoh, layout [12, 0, 12] akan mendefinisikan tiga field: sebuah
String, diikuti oleh integer U8, kemudian diikuti String lainnya. Array
fieldNames menyediakan nama yang mudah dibaca yang sesuai secara posisional
dengan setiap nilai layout, jadi dengan nama field ["name", "age", "country"],
field String pertama akan diberi nama "name", field U8 akan bernama "age", dan
field String kedua akan bernama "country".
Berikut adalah contoh bagaimana field-field tersebut digunakan saat membuat 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])});
Catatan Penting
- Field
discriminatordigunakan secara internal dan tidak boleh dimodifikasi - Field
credentialmenghubungkan schema dengan tipe kredensial terkait isPauseddapat digunakan untuk menonaktifkan penggunaan schema secara sementara- Field
versionmemungkinkan evolusi schema sambil menjaga kompatibilitas mundur layoutdanfieldNamesmendefinisikan struktur kredensial yang menggunakan schema ini- Semua field array byte (
name,description,layout,fieldNames) harus di-encode/decode dengan benar sesuai kebutuhan aplikasi Anda
Is this page helpful?