تطوير SVM
تتضمن QoreChain بيئة تنفيذ Solana Virtual Machine (SVM)، تتيح للمطورين نشر وتنفيذ برامج SBF/BPF باستخدام أدوات Solana المألوفة. توفّر وحدة SVM واجهة JSON-RPC متوافقة مع Solana على المنفذ 8899، والتي يشغّلها أمر qorechaind start تلقائيًا (انظر خادم JSON-RPC أدناه).
تستخدم الأوامر أدناه شبكة qorechain-vladi الرئيسية (العاملة منذ 29 يونيو 2026)، التي تشغّل إصدار العقدة v3.2.1. استبدل --chain-id qorechain-diana للشبكة التجريبية، التي تشغّل v3.2.2. معاملات SVM معطّلة على الشبكتين (انظر المربع التالي)، لذا فإن أوامر tx svm في هذه الصفحة للاطلاع المرجعي فقط: لا يمكن أن تنجح اليوم.
اعتبارًا من إصدار السلسلة v3.1.89 (22 أغسطس)، وعقب حادثة وقعت، أصبح مسار تنفيذ SVM معطّلًا على مستوى الشبكة بأكملها بالنسبة لإرسال المعاملات على كلٍّ من qorechain-vladi وqorechain-diana — أي معاملة تُرسَل إلى x/svm (نشر برنامج، تنفيذ تعليمات، إنشاء حساب، تحويلات) تُعيد code 11, "SVM module is disabled". ينطبق هذا على عقدتك الخاصة أيضًا وعلى النقاط العامة سواء بسواء. قد تستجيب طرق RPC ذات طابع القراءة، لكن لا تبنِ أو تختبر تكاملًا فعليًا مع SVM إلى أن يُعاد فتح المسار — هذا تعطيل وقت الترجمة، وليس معاملًا وقت التشغيل، لذا لا يمكن إعادة تفعيله عبر تصويت حوكمة؛ ومن المتوقع أن يبقى معطّلًا إلى أن يُخلي طرفه تدقيق خارجي.
نظرة عامة
توفّر وحدة x/svm ما يلي:
- عملة QOR الأصلية كأصل من الدرجة الأولى على SVM — الرصيد الموحّد للحساب، ظاهرًا باللامبورت (lamports)
- نشر وتنفيذ برامج SBF/BPF
- إنشاء وإدارة حسابات البيانات
- نقطة نهاية JSON-RPC متوافقة مع Solana
- تخطيط عناوين ثنائي الاتجاه بين تنسيقَي عناوين QoreChain وSolana
- قياس ميزانية الحوسبة واقتصاديات التخزين القائمة على الإيجار
عملة QOR الأصلية على واجهة SVM
اعتبارًا من إصدار السلسلة v3.1.82، أصبحت واجهة SVM واجهة QOR أصلية من الدرجة الأولى، وليست رصيدًا معزولًا منفصلًا. الرصيد الموحّد الواحد للحساب — نفس الأموال الظاهرة كـ uqor على واجهة Cosmos وكـ wei بـ 18 منزلة عشرية على واجهة EVM — يظهر على جانب SVM باللامبورت (9 منازل عشرية):
1 uqor = 1,000 lamports · 1 QOR = 1,000,000,000 lamports
getBalance/getAccountInfoتُعيدان رصيد الحساب من QOR الأصلية (باللامبورت).getSignaturesForAddressتُعيد سجل المعاملات المرتبطة بعنوان — قابل للاستخدام لرصد الإيداعات باستخدام أدوات Solana القياسية.- تحويلات System Program تنقل عملة QOR الأصلية — تعليمة تحويل بأسلوب Solana تنقل نفس الأموال التي كانت ستنقلها
MsgSendعلى Cosmos أو تحويل على EVM. - صيغة عنوان SVM — عنوان SVM الخاص بالحساب هو الـ 20 بايت الخاصة بالحساب، مكمَّلة يمينًا لتصبح 32 بايت ومُرمَّزة بـ base58. صيغ العناوين الثلاث كلها (
qor1...،0x...، base58) تشير إلى الحساب ذاته.
النقاط العامة (https://svm.qore.host، https://svm-testnet.qore.host) هي للقراءة فقط — إرسال المعاملات معطّل عند الحافة. في الوضع الطبيعي كنت ستشغّل عقدتك الخاصة (المنفذ 8899) لإرسال معاملات SVM، لكن انظر التحذير أعلاه: مسار معاملات x/svm نفسه معطّل حاليًا على مستوى الشبكة بأكملها، بما في ذلك على عقدتك الخاصة.
خادم JSON-RPC
خادم JSON-RPC المتوافق مع Solana يُشغَّل بواسطة qorechaind start وهو مُفعَّل افتراضيًا. يُضبط عبر قسم [svm-rpc] في app.toml:
[svm-rpc]
# Enable the Solana-compatible JSON-RPC server
enable = true
# Address the server listens on
address = "127.0.0.1:8899"
القيم الافتراضية هي enable = true و address = "127.0.0.1:8899"، لذا فإن عقدة شُغِّلت للتو تقدّم بالفعل واجهة Solana JSON-RPC على المنفذ 8899 — تتصل @solana/web3.js عبر http://127.0.0.1:8899 دون أي إعداد إضافي. تُبلغ getVersion عن 1.18.0-qorechain، وتُعيد getBalance / getAccountInfo حسابات SVM الفعلية الحيّة على السلسلة.
| الخاصية | القيمة |
|---|---|
| العنوان الافتراضي | http://127.0.0.1:8899 |
| مُفعَّل | نعم، افتراضيًا |
| يُشغَّل بواسطة | qorechaind start |
| التوافقية | Solana JSON-RPC (مجموعة فرعية) |
getVersion | 1.18.0-qorechain |
الطرق المدعومة
| الطريقة | الوصف |
|---|---|
getAccountInfo | استرجاع بيانات الحساب ورصيد اللامبورت |
getBalance | الحصول على رصيد الحساب باللامبورت (عملة QOR الأصلية) |
getSignaturesForAddress | سجل المعاملات لعنوان ما |
getSlot | رقم الـ slot الحالي |
getMinimumBalanceForRentExemption | الحد الأدنى للرصيد للإعفاء من الإيجار لحجم بيانات معيّن |
getVersion | معلومات إصدار وقت تشغيل SVM |
getHealth | فحص سلامة نقطة نهاية SVM |
نشر البرامج والتفاعل معها
تنفيذ SBF حديث. جرى تحديث محرك تنفيذ SVM ليعتمد على solana-sbpf 0.21.1، لذا فإن برامج SBF المُجمَّعة حديثًا من سلسلة أدوات Solana الحالية (platform-tools v1.53 / agave 4.x) تُنشَر وتعمل على QoreChain — التنفيذ مدعوم بالكامل، وليس مقتصرًا على النشر فقط. البرامج المبنية باستخدام إما cargo build-sbf --arch v0 أو --arch v3 مدعومة.
-
نشر برنامج SBF — قم بتجميع برنامج Solana الخاص بك إلى كائن مشترك SBF باستخدام platform-tools الحالية (v1.53 / agave 4.x)، ثم انشره على QoreChain:
# Build with the current Solana toolchain (--arch v0 or --arch v3)cargo build-sbf --arch v3# Deploy the compiled programqorechaind tx svm deploy-program ./my_program.so \--from mykey \--gas 2000000 --fees 200000uqor \--generate-only > tx.jsonعلى شبكة يكون فيها المسار مفعَّلًا، فإن كل أمر
tx svmهو معاملة على مسار Cosmos: وقِّعtx.jsonوابثّه باستخدامqorechaind tx pqc cosign tx.json --from mykey --pqc-key mypqc --chain-id <chain-id>، وحدِّد حدًّا صريحًا للغاز مع رسوم لا تقل عن الغاز × 0.1 uqor. تتضمن استجابة المعاملة معرّف البرنامج بصيغة base58. -
تنفيذ تعليمة — استدعِ برنامج BPF موجودًا على السلسلة ببيانات تعليمات:
# Execute instructionqorechaind tx svm execute <program-id-base58> <data-hex> \--from mykey \--gas 400000 --fees 40000uqor \--generate-only > tx.jsonالمعامل الصيغة الوصف program-id-base58سلسلة base58 عنوان البرنامج المنشور data-hexبايتات مُرمَّزة بالسداسي عشري بيانات التعليمات المُسلسلة -
إنشاء حساب بيانات — غالبًا ما تحتاج البرامج إلى حسابات لتخزين الحالة. أنشئ واحدًا بحجم ومالك محدَّدين:
# Create data accountqorechaind tx svm create-account <owner-base58> <space> <lamports> \--from mykey \--gas 400000 --fees 40000uqor \--generate-only > tx.jsonالمعامل الوصف owner-base58البرنامج المالك لهذا الحساب (base58) spaceحجم حقل البيانات بالبايت lamportsالرصيد الابتدائي (يجب أن يفي بحد الإعفاء الأدنى من الإيجار) استعلم عن الحد الأدنى للرصيد المُعفى من الإيجار لحجم معيّن:
# RPC: getMinimumBalanceForRentExemptioncurl -X POST http://localhost:8899 \-H "Content-Type: application/json" \-d '{"jsonrpc": "2.0","id": 1,"method": "getMinimumBalanceForRentExemption","params": [1024]}' -
استخدام @solana/web3.js — تعمل حزمة Solana JavaScript SDK مباشرةً مع نقطة نهاية QoreChain SVM:
import { Connection, PublicKey } from "@solana/web3.js";const connection = new Connection("http://127.0.0.1:8899");// Check healthconst health = await connection.getHealth();console.log("SVM health:", health);// Get slotconst slot = await connection.getSlot();console.log("Current slot:", slot);// Get account infoconst pubkey = new PublicKey("YourBase58ProgramId...");const accountInfo = await connection.getAccountInfo(pubkey);console.log("Account data:", accountInfo);// Get balanceconst balance = await connection.getBalance(pubkey);console.log("Balance (lamports):", balance);
تخطيط العناوين
تحافظ QoreChain على تخطيط عناوين ثنائي الاتجاه بين عناوين Bech32 الأصلية (qor1...) وعناوين base58 على طراز Solana:
| الاتجاه | مثال |
|---|---|
| من الأصلي إلى SVM | qor1abc...xyz يُخطَّط إلى عنوان base58 حتمي |
| من SVM إلى الأصلي | عناوين البرامج بصيغة base58 تُخطَّط عودةً إلى ما يعادلها بصيغة qor1... |
التخطيط حتمي وتديره وحدة x/svm. كلا التمثيلين يشيران إلى الحساب الأساسي ذاته.
نموذج الإيجار
تستخدم وحدة SVM نموذج تخزين قائم على الإيجار لمنع تضخم الحالة:
| المعامل | القيمة |
|---|---|
| لامبورت لكل بايت في السنة | 3,480 |
| مضاعِف الإعفاء من الإيجار | 2.0 |
| تكرار التحصيل | كل حقبة (epoch) |
- الحسابات التي يكون رصيدها أعلى من
2 * (data_size * 3480 / seconds_per_year)باللامبورت تكون معفاة من الإيجار ولا تُحاسَب أبدًا. - الحسابات الأدنى من حد الإعفاء من الإيجار تُحاسَب على الإيجار كل حقبة. إذا وصل الرصيد إلى صفر، يُحذَف الحساب.
أفضل ممارسة: موِّل حسابات البيانات دائمًا فوق الحد الأدنى للإعفاء من الإيجار لتجنّب حذف الحساب غير المتوقَّع.
ميزانية الحوسبة
يُقاس كل تنفيذ تعليمة بوحدات حوسبة:
| المعامل | القيمة |
|---|---|
| الحد الأقصى لوحدات الحوسبة لكل تعليمة | 1,400,000 |
| الحد الأقصى لعمق CPI (الاستدعاء عبر البرامج) | 4 |
| الحد الأقصى لحجم البرنامج | 10 MB |
| الحد الأقصى لحجم بيانات الحساب | 10 MB |
البرامج التي تتجاوز ميزانية الحوسبة تُوقَف وتُلغى المعاملة.
ملخص المعاملات
| المعامل | القيمة |
|---|---|
max_program_size | 10 MB |
max_account_data_size | 10 MB |
compute_budget_max | 1,400,000 CU |
max_cpi_depth | 4 |
lamports_per_byte_year | 3,480 |
rent_exemption_multiplier | 2.0 |
| منفذ JSON-RPC | 8899 |
التشغيل البيني بين الآلات الافتراضية (Cross-VM)
صُمّمت برامج SVM للتواصل مع عقود EVM وCosmWasm عبر رسالة MsgCrossVMCall الخاصة بوحدة x/crossvm (تحدد السلسلة مسار المصدر بنفسها). ولأن مسار SVM معطّل للمعاملات ولأن MsgCrossVMCall متوقفة على الشبكة الرئيسية، فلا يوجد اليوم مسار Cross-VM عامل لـ SVM. انظر التشغيل البيني بين الآلات الافتراضية للاطلاع على الحالة الراهنة ودورة حياة الرسالة وسلوك المهلة الزمنية.
الخطوات التالية
- التشغيل البيني بين الآلات الافتراضية — التواصل بين SVM وEVM وCosmWasm
- تطوير EVM — عقود Solidity الذكية على QoreChain
- تطوير CosmWasm — عقود WebAssembly المبنية بلغة Rust