For the complete documentation index, see llms.txt. This page is also available as Markdown.

استدعِ Solana من EVM

استدعِ برامج Solana من Solidity عبر CPI الخاصة بـRome وعقود precompile المساعدة.

تتيح التعليمات المسبقة في Rome لعقود Solidity استدعاء برامج Solana مباشرة. يشرح هذا الدليل الآلية.

المتطلبات الأساسية

  • واجهات Rome Solidity من المستودع العام rome-solidity المستودع (النشر على npm قيد الانتظار) — توجد واجهات التعليمات المسبقة في contracts/interface.sol

  • عقد Rome منشور (انظر نشر Solidity)

اربط كل واجهة بعنوان التعليمات المسبقة الخاص بها:

import {ICrossProgramInvocation, ISystemProgram, IHelperProgram}
    from "@rome-protocol/rome-solidity/contracts/interface.sol";

ICrossProgramInvocation constant CpiProgram    = ICrossProgramInvocation(0xFF00000000000000000000000000000000000008);
ISystemProgram          constant SystemProgram = ISystemProgram(0xFF00000000000000000000000000000000000007);
IHelperProgram          constant Helper        = IHelperProgram(0xFF00000000000000000000000000000000000009);

التعليم المسبق CpiProgram

CpiProgram (0xFF…08) ينفّذ CPI (invoke / invoke_signed) بالإضافة إلى اختصارات القراءة عبر الحالة المشتركة (account_info, account_data_at, account_u64_at, account_lamports, pdas_batch_derive):

// استدعِ برنامج Solana
CpiProgram.invoke(programId, accounts, instructionData);

// استدعِ مع توقيع PDA (يوقّع عقدك بوصفه PDA)
CpiProgram.invoke_signed(programId, accounts, data, seeds);

نقل lamports

لتحويلات SOL/lamports البسيطة وتحويلات SPL من PDA الخاص بالمتصل، استخدم التعليم المسبق HelperProgram — لا حاجة إلى CPI مُنشأ يدويًا:

transfer_spl تحتوي على عدة نسخ محمّلة فوق الاسم نفسه (بما في ذلك نسخة delegate لتدفقات transferFrom )؛ راجع interface.sol. في المسار المخبأ، استخدم ISplCached (0xff…05) / IAssociatedSplCached (0xff…06بدلاً من ذلك — يجب أن يستخدم العقد مسارًا واحدًا بشكل متسق.

قراءة بيانات الحساب

اقرأ بيانات أي حساب Solana عبر اختصارات القراءة في CpiProgram:

اشتقاق PDA

اعثر على عناوين Program Derived Address من Solidity عبر التعليم المسبق System:

تحويل Base58

حوّل بين bytes32 و base58 (تنسيق عناوين Solana):

استدعاء برامج Solana المخصصة

لاستدعاء أي برنامج Solana، أنشئ قائمة الحسابات وبيانات التعليمة بنفسك:

القيود الرئيسية

  1. يجب التصريح عن جميع الحسابات مسبقًا. يجب أن تتضمن معاملة Solana كل حساب سيلامسه CPI — لا يمكن اكتشاف الحسابات ديناميكيًا داخل CPI.

  2. حد عمق CPI: 4 مستويات. Rome EVM → هدفك → استدعاء الهدف → واحد إضافي. خطّط لعمق الاستدعاء.

  3. مفاتيح Solana العامة هي bytes32, ليست عناوين Ethereum ذات 20 بايت.

  4. بيانات التعليمة هي بايتات خام بالصيغة التي يتوقعها البرنامج الهدف (عادةً Borsh، وبترتيب صغير endian).

ما التالي

  • شاهد ذلك في تطبيق حقيقيrome-dex (صانع سوق آلي ثنائي المسار)، cardo (توجّه مسارات CPI إلى Meteora / Marinade / Mango / Jupiter)، و aerarium استدعِ Solana من Solidity في بيئة الإنتاج.

  • استدعِ EVM من Solana — العكس: تحكّم في عقود EVM من محفظة Solana

  • التشغيل البيني للرموز — كيف تعمل رموز ERC-20 و SPL معًا

  • القيود — عمق CPI والقيود الأخرى

آخر تحديث

هل كان هذا مفيدا؟