وثائق سولاناتطوير البرامجكودما

إنشاء العملاء

يقوم Codama بإنشاء عملاء TypeScript وRust من ملف IDL الخاص بالبرنامج. تتضمن العملاء المُنشأة وظائف لاستدعاء التعليمات واسترجاع الحسابات، مما يلغي الحاجة إلى تسلسل وفك تسلسل حسابات البرنامج أو instruction data يدويًا.

Codama قيد التطوير النشط وعرضة للتغيير. يرجى الرجوع إلى المستودعات المرتبطة في المرجع السريع للحصول على أحدث المعلومات.

مرجع سريع

أوامر واجهة سطر الأوامر

الأمرالوصف
codama initإنشاء ملف تكوين codama
codama runإنشاء عملاء البرنامج من ملف التكوين

مولدات العملاء

الحزمةالوصف
@codama/renderers-jsإنشاء عملاء TypeScript متوافقة مع @solana/kit
@codama/renderers-rustإنشاء عملاء Rust متوافقة مع solana_sdk
@codama/nodes-from-anchorتحويل Anchor IDLs إلى Codama IDLs لإنشاء العملاء

موارد إضافية

الموردالوصف
CodamaGitHub الخاص بـ Codama
Codama CLIGitHub الخاص بواجهة سطر أوامر Codama
Codama MacrosGitHub الخاص بـ Codama Macros. إنشاء Codama IDL من برامج Rust الأصلية باستخدام وحدات ماكرو Codama
Codama Macros Example Programبرنامج مثال يوضح استخدام وحدات ماكرو Codama

مثال

يشرح هذا المثال عملية إنشاء العملاء من IDL برنامج Anchor.

إعداد ملفات المشروع

للمتابعة، قم بإنشاء دليل جديد يسمى example وأضف ملف idl.json وملف package.json من مقتطفات الكود.

يستخدم هذا المثال IDL لبرنامج العداد. عرض المصدر.

في مشروع Anchor، يمكن العثور على IDL في target/idl/<program_name>.json بعد تشغيل anchor build.

إنشاء ملف تكوين Codama

يستخدم Codama ملف تكوين لتحديد موقع ملف IDL، ولغات العميل التي سيتم إنشاؤها، وأين سيتم إخراج الكود المُنشأ. قم بإنشاء هذا التكوين عن طريق تشغيل:

Terminal
$
npx codama init

سيطرح عليك هذا أسئلة لإنشاء ملف codama.json في الجذر الخاص بمشروعك وتثبيت تبعيات Codama الضرورية.

example output
Welcome to Codama!
Where is your IDL located? (Supports Codama and Anchor IDLs). … idl.json
Which script preset would you like to use? › Generate JavaScript client, Generate Rust client
[js] Where should the JavaScript code be generated? … clients/js/src/generated
[rust] Where is the Rust client crate located? … clients/rust
[rust] Where should the Rust code be generated? … clients/rust/src/generated
Your configuration requires additional dependencies.
Install command: pnpm install @codama/nodes-from-anchor @codama/renderers-js @codama/renderers-rust
Install dependencies? … yes
Installing
├─ @codama/nodes-from-anchor
├─ @codama/renderers-js
└─ @codama/renderers-rust
Dependencies installed successfully.
Configuration file created.
└─ Path: /example/codama.json

إنشاء العملاء

بمجرد إنشاء ملف التكوين، قم بتشغيل أمر الإنشاء لتوليد العملاء:

Terminal
$
npx codama run --all

سيقوم هذا بإنشاء عملاء البرنامج في مسارات الملفات المحددة في ملف تكوين codama.

codama.json
{
"idl": "idl.json",
"before": [],
"scripts": {
"js": {
"from": "@codama/renderers-js",
"args": ["clients/js/src/generated"]
},
"rust": {
"from": "@codama/renderers-rust",
"args": [
"clients/rust/src/generated",
{
"crateFolder": "clients/rust",
"formatCode": true
}
]
}
}
}

لا يتم عرض جميع الملفات المُنشأة في مقتطفات الكود المقابلة.

إعداد ملفات المشروع

للمتابعة، قم بإنشاء دليل جديد يسمى example وأضف ملف idl.json وملف package.json من مقتطفات الكود.

يستخدم هذا المثال IDL لبرنامج العداد. عرض المصدر.

في مشروع Anchor، يمكن العثور على IDL في target/idl/<program_name>.json بعد تشغيل anchor build.

إنشاء ملف تكوين Codama

يستخدم Codama ملف تكوين لتحديد موقع ملف IDL، ولغات العميل التي سيتم إنشاؤها، وأين سيتم إخراج الكود المُنشأ. قم بإنشاء هذا التكوين عن طريق تشغيل:

Terminal
$
npx codama init

سيطرح عليك هذا أسئلة لإنشاء ملف codama.json في الجذر الخاص بمشروعك وتثبيت تبعيات Codama الضرورية.

example output
Welcome to Codama!
Where is your IDL located? (Supports Codama and Anchor IDLs). … idl.json
Which script preset would you like to use? › Generate JavaScript client, Generate Rust client
[js] Where should the JavaScript code be generated? … clients/js/src/generated
[rust] Where is the Rust client crate located? … clients/rust
[rust] Where should the Rust code be generated? … clients/rust/src/generated
Your configuration requires additional dependencies.
Install command: pnpm install @codama/nodes-from-anchor @codama/renderers-js @codama/renderers-rust
Install dependencies? … yes
Installing
├─ @codama/nodes-from-anchor
├─ @codama/renderers-js
└─ @codama/renderers-rust
Dependencies installed successfully.
Configuration file created.
└─ Path: /example/codama.json

إنشاء العملاء

بمجرد إنشاء ملف التكوين، قم بتشغيل أمر الإنشاء لتوليد العملاء:

Terminal
$
npx codama run --all

سيقوم هذا بإنشاء عملاء البرنامج في مسارات الملفات المحددة في ملف تكوين codama.

codama.json
{
"idl": "idl.json",
"before": [],
"scripts": {
"js": {
"from": "@codama/renderers-js",
"args": ["clients/js/src/generated"]
},
"rust": {
"from": "@codama/renderers-rust",
"args": [
"clients/rust/src/generated",
{
"crateFolder": "clients/rust",
"formatCode": true
}
]
}
}
}

لا يتم عرض جميع الملفات المُنشأة في مقتطفات الكود المقابلة.

idl.json
package.json
{
"address": "8PY1q5J3Aq2z7TBDLBrVjv77mYzjXSCz6iHQaFEFw9hY",
"metadata": {
"name": "counter",
"version": "0.1.0",
"spec": "0.1.0",
"description": "Created with Anchor"
},
"instructions": [
{
"name": "decrement",
"discriminator": [106, 227, 168, 59, 248, 27, 150, 101],
"accounts": [
{
"name": "user",
"writable": true,
"signer": true
},
{
"name": "counter",
"writable": true,
"pda": {
"seeds": [
{
"kind": "const",
"value": [99, 111, 117, 110, 116, 101, 114]
}
]
}
},
{
"name": "vault",
"writable": true,
"pda": {
"seeds": [
{
"kind": "const",
"value": [118, 97, 117, 108, 116]
},
{
"kind": "account",
"path": "user"
}
]
}
},
{
"name": "system_program",
"address": "11111111111111111111111111111111"
}
],
"args": []
},
{
"name": "increment",
"discriminator": [11, 18, 104, 9, 104, 174, 59, 33],
"accounts": [
{
"name": "user",
"writable": true,
"signer": true
},
{
"name": "counter",
"writable": true,
"pda": {
"seeds": [
{
"kind": "const",
"value": [99, 111, 117, 110, 116, 101, 114]
}
]
}
},
{
"name": "vault",
"writable": true,
"pda": {
"seeds": [
{
"kind": "const",
"value": [118, 97, 117, 108, 116]
},
{
"kind": "account",
"path": "user"
}
]
}
},
{
"name": "system_program",
"address": "11111111111111111111111111111111"
}
],
"args": []
}
],
"accounts": [
{
"name": "Counter",
"discriminator": [255, 176, 4, 245, 188, 253, 124, 25]
}
],
"errors": [
{
"code": 6000,
"name": "UnderflowError",
"msg": "Counter cannot be decremented below zero"
}
],
"types": [
{
"name": "Counter",
"type": {
"kind": "struct",
"fields": [
{
"name": "count",
"type": "u64"
}
]
}
}
]
}

استخدام العملاء المُنشأين

تتضمن العملاء المُنشأة شيفرة المصدر للتفاعل مع برنامجك ولكن لا تتضمن ملفات package.json (لـ TypeScript) أو Cargo.toml (لـ Rust).

ستحتاج إما إلى إنشاء ملفات package.json و Cargo.toml جديدة أو إضافة التبعيات المطلوبة من العملاء المُنشأة إلى الملفات الموجودة في مشروعك.

دمجها في تطبيقك

قم بإنشاء العميل مباشرة في دليل المصدر لتطبيقك ثم أضف التبعيات المطلوبة إلى ملفات package.json أو Cargo.toml الموجودة.

استخدم هذا النهج عند بناء تطبيق لا تحتاج فيه شيفرة العميل إلى المشاركة أو النشر.

حزم أو صناديق مستقلة

قم بإنشاء حزم TypeScript منفصلة أو صناديق Rust لكل عميل. على سبيل المثال، أضف package.json في clients/js/ و Cargo.toml في clients/rust/.

استخدم هذا النهج لنشر العميل كمكتبة قابلة لإعادة الاستخدام (npm أو crates.io) أو مشاركة العميل عبر تطبيقات متعددة في مستودع أحادي.

Is this page helpful?

جدول المحتويات

تعديل الصفحة

تدار بواسطة

© 2025 مؤسسة سولانا.
جميع الحقوق محفوظة.