المخططات

يُعرّف المخطط البنية وقواعد التحقق لبيانات الاعتماد في نظام شهادات سولانا. تعمل المخططات كقوالب تحدد الحقول التي يجب أن تحتويها بيانات الاعتماد وكيفية تنسيقها. يرتبط كل مخطط بنوع بيانات اعتماد ويمكن إصداره بنسخ متعددة لدعم تطور بنية البيانات.

البنية

يمثل هيكل Schema مخططاً في نظام شهادات سولانا. يحدد كل مخطط قالباً لبيانات الاعتماد التي يمكن إنشاؤها تحته.

تعريفات الأنواع

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 مؤسسة سولانا.
جميع الحقوق محفوظة.
تواصل معنا