يُعرّف المخطط البنية وقواعد التحقق لبيانات الاعتماد في نظام شهادات سولانا. تعمل المخططات كقوالب تحدد الحقول التي يجب أن تحتويها بيانات الاعتماد وكيفية تنسيقها. يرتبط كل مخطط بنوع بيانات اعتماد ويمكن إصداره بنسخ متعددة لدعم تطور بنية البيانات.
البنية
يمثل هيكل Schema مخططاً في نظام شهادات سولانا. يحدد كل مخطط قالباً لبيانات الاعتماد التي يمكن إنشاؤها تحته.
تعريفات الأنواع
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};
الدوال
جلب المخططات
| الدالة | الوصف | المعاملات | القيمة المُرجعة |
|---|---|---|---|
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 قيمًا رقمية لتحديد أنواع البيانات لكل حقل في المخطط:
| القيمة | نوع البيانات | الوصف |
|---|---|---|
| 0 | U8 | عدد صحيح بدون إشارة 8 بت |
| 1 | U16 | عدد صحيح بدون إشارة 16 بت |
| 2 | U32 | عدد صحيح بدون إشارة 32 بت |
| 3 | U64 | عدد صحيح بدون إشارة 64 بت |
| 4 | U128 | عدد صحيح بدون إشارة 128 بت |
| 5 | I8 | عدد صحيح بإشارة 8 بت |
| 6 | I16 | عدد صحيح بإشارة 16 بت |
| 7 | I32 | عدد صحيح بإشارة 32 بت |
| 8 | I64 | عدد صحيح بإشارة 64 بت |
| 9 | I128 | عدد صحيح بإشارة 128 بت |
| 10 | Bool | قيمة منطقية |
| 11 | Char | حرف واحد |
| 12 | String | سلسلة نصية متغيرة الطول |
| 13 | VecU8 | متجه من الأعداد الصحيحة بدون إشارة 8 بت |
| 14 | VecU16 | متجه من الأعداد الصحيحة بدون إشارة 16 بت |
| 15 | VecU32 | متجه من الأعداد الصحيحة بدون إشارة 32 بت |
| 16 | VecU64 | متجه من الأعداد الصحيحة بدون إشارة 64 بت |
| 17 | VecU128 | متجه من الأعداد الصحيحة بدون إشارة 128 بت |
| 18 | VecI8 | متجه من الأعداد الصحيحة بإشارة 8 بت |
| 19 | VecI16 | متجه من الأعداد الصحيحة بإشارة 16 بت |
| 20 | VecI32 | متجه من الأعداد الصحيحة بإشارة 32 بت |
| 21 | VecI64 | متجه من الأعداد الصحيحة بإشارة 64 بت |
| 22 | VecI128 | متجه من الأعداد الصحيحة بإشارة 128 بت |
| 23 | VecBool | متجه من القيم المنطقية |
| 24 | VecChar | متجه من الحروف |
| 25 | VecString | متجه من السلاسل النصية |
مثال على الاستخدام
على سبيل المثال، تخطيط [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?