Skema

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

Metode

Mengambil Skema

MetodeDeskripsiParameterMengembalikan
fetchSchemaMengambil satu skema berdasarkan alamatnyarpc: Konteks RPC, address: Alamat skema, config?: Konfigurasi fetchPromise<Account<Schema>>
fetchMaybeSchemaMengambil skema dengan aman, mengembalikan null jika tidak ditemukanrpc: Konteks RPC, address: Alamat skema, config?: Konfigurasi fetchPromise<MaybeAccount<Schema>>
fetchAllSchemaMengambil beberapa skema berdasarkan alamatnyarpc: Konteks RPC, addresses: Array alamat skema, config?: Konfigurasi fetchPromise<Account<Schema>[]>
fetchAllMaybeSchemaMengambil beberapa skema dengan aman, melewati yang tidak ditemukanrpc: Konteks RPC, addresses: Array alamat skema, config?: Konfigurasi fetchPromise<MaybeAccount<Schema>[]>

Serialisasi

MetodeDeskripsiParameterMengembalikan
getSchemaEncoderMendapatkan encoder untuk data skemaTidak adaEncoder<SchemaArgs>
getSchemaDecoderMendapatkan decoder untuk data skemaTidak adaDecoder<Schema>
getSchemaCodecMendapatkan codec untuk data skemaTidak adaCodec<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:

NilaiTipe DataDeskripsi
0U8Integer 8-bit unsigned
1U16Integer 16-bit unsigned
2U32Integer 32-bit unsigned
3U64Integer 64-bit unsigned
4U128Integer 128-bit unsigned
5I8Integer 8-bit signed
6I16Integer 16-bit signed
7I32Integer 32-bit signed
8I64Integer 64-bit signed
9I128Integer 128-bit signed
10BoolNilai boolean
11CharKarakter tunggal
12StringString dengan panjang variabel
13VecU8Vektor integer 8-bit unsigned
14VecU16Vektor integer 16-bit unsigned
15VecU32Vektor integer 32-bit unsigned
16VecU64Vektor integer 64-bit unsigned
17VecU128Vektor integer 128-bit unsigned
18VecI8Vektor integer 8-bit signed
19VecI16Vektor integer 16-bit signed
20VecI32Vektor integer 32-bit signed
21VecI64Vektor integer 64-bit signed
22VecI128Vektor integer 128-bit signed
23VecBoolVektor nilai boolean
24VecCharVektor karakter
25VecStringVektor 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 discriminator digunakan secara internal dan tidak boleh dimodifikasi
  • Field credential menghubungkan schema dengan tipe kredensial terkait
  • isPaused dapat digunakan untuk menonaktifkan penggunaan schema secara sementara
  • Field version memungkinkan evolusi schema sambil menjaga kompatibilitas mundur
  • layout dan fieldNames mendefinisikan 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?

Daftar Isi

Edit Halaman

Dikelola oleh

© 2026 Yayasan Solana.
Semua hak dilindungi.
Terhubung