> For the complete documentation index, see [llms.txt](https://docs.rome.builders/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.rome.builders/ar/adlh-almtwryn/call-evm-from-solana.md).

# استدعاء EVM من Solana

عكس [استدعِ سولانا من EVM](/ar/adlh-almtwryn/call-solana-from-evm.md): تستدعي محفظة سولانا (مثل Phantom) أي عقد EVM على Rome مباشرةً، مع **من دون مفتاح إيثريوم**. هكذا [Aerarium](/ar/alttbyqat-ala-rome/apps.md) و [Rome DEX](/ar/alttbyqat-ala-rome/apps.md) تتيح للمستخدمين الأصليين لسولانا مشاركة العقود نفسها مع مستخدمي EVM.

الطريقة ذات الاستدعاء الواحد هي `submitRomeTxSolanaLane`; تشرح هذه الصفحة ما يفعله.

## العناوين الاصطناعية

الهوية EVM لمحفظة سولانا هي **العنوان الاصطناعي** — آخر 20 بايت من `keccak256` للمفتاح العام لسولانا المكوّن من 32 بايت:

```
synthetic_evm_address = keccak256(solana_pubkey)[12:]
```

هذا هو `msg.sender` عندما تستدعي المحفظة عقدًا، والهوية الثابتة التي يوجد تحتها الـ nonce والتخزين. الاشتقاق مثبت في البروتوكول، لذا تُطابِق المحفظة دائمًا العنوان نفسه.

```javascript
import { syntheticAddress } from "@rome-protocol/sdk";
const from = syntheticAddress(solanaPubkey); // 0x… 20 bytes
```

## العنوان الاصطناعي مجرد قناة تمرير — لا يحتفظ بأي رموز عند السكون

الرصيد القابل للإنفاق للمستخدم الأصلي لسولانا يوجد في **محفظة سولانا** (كـرموز SPL)، ويظهر على جانب EVM بنسبة 1:1 بوصفه **غلاف ERC20SPL** (مثل `wUSDC`). العنوان الاصطناعي لا يحتفظ بشيء عند السكون، لذا تتدفق القيمة *عبر* من خلاله — وكل خطوة موقعة من محفظة سولانا:

1. **التهيئة (مرة واحدة).** لا يوجد PDA للمصادقة الخارجية للعنوان الاصطناعي الجديد تمامًا حتى `create_pda` يُنفَّذ — وتُوقَّع التحويلات أدناه بواسطة ذلك الـ PDA. `submitRomeTxSolanaLane` يُهيّئه تلقائيًا عند أول استخدام (أو استدعِ `provisionSynthetic` لخطوة "تفعيل" صريحة؛ تحقّق باستخدام `isSyntheticProvisioned`).
2. **ساق التمويل (المحفظة → العنوان الاصطناعي).** انقل الرمز من ATA الخاص بالمحفظة إلى الخاص بالعنوان الاصطناعي — خطوة `ActivateAta` التفعيل، المبنية بواسطة `buildFundLeg`. الآن `wrapper.balanceOf(synthetic)` يقرأ ذلك الرصيد، لذا ينفقه العنوان الاصطناعي كرمز ERC-20 عادي (`transfer` / `transferFrom`) — **وليس** كأصلٍ أصلي `msg.value`، لأنه لا يملكه.
3. **الاستدعاء(ات) (`DoTxUnsigned`).** ينفّذ العنوان الاصطناعي معاملة/معاملات EVM — مثل `approve` ثم خزنة `deposit` تسحب عبر `transferFrom`.
4. **ساق السحب (العنوان الاصطناعي → المحفظة).** بعد أن يضع السحب / الاقتراض / المطالبة رموزًا في العنوان الاصطناعي، `buildSweepLeg` يعيدها إلى ATA الخاص بمحفظة المستخدم نفسها (`HelperProgram.transfer_spl`)، وبذلك ينتهي صافي العنوان الاصطناعي إلى لا شيء.

## كيف يُبنى الاستدعاء

`submitRomeTxSolanaLane` يقوم بكل ذلك. الآلية:

1. **أنشئ معاملة EIP-1559 غير موقعة** بـ `من` = العنوان الاصطناعي — من دون توقيع secp256k1.
2. **اكتشف الحسابات** — استدعِ [`rome_emulateCallAccounts`](/ar/almrja/json-rpc.md) باستخدام `من`, `حقل`, `البيانات`, **و `القيمة`** (عندما يكون الاستدعاء قابلاً للدفع). تمرير `القيمة` مهم: فالوكيل يحاكي *الحقيقي* الاستدعاء، لذا يتم تخصيص أي كتابة تخزين تعتمد على القيمة — مثل خانة mapping جديدة — ويُعاد حساب سولانا الخاص بها. احذفه وسيغيب ذلك الحساب، وتفشل المعاملة مع *"instruction modified data of a read-only account."*
3. **جمّع معاملة سولانا:** اثنتين من **ComputeBudget** تعليمات (يحتاج EVM الخاص بـ Rome إلى حد أعلى لوحدات الحوسبة CU ≈1.35M وإطار heap كبير ≈250 KB — إعدادات سولانا الافتراضية تفشل) + **`DoTxUnsigned`** التعليمات (RLP غير الموقّع + الحسابات المكتشفة) + **محفظة الخزانة** (يدفع التنفيذ لها رسومًا صغيرة؛ ويستثنيها الاكتشاف، لذا يُلحقها SDK).
4. **توقّع المحفظة وتُرسل.** تقوم **محفظة سولانا بتوقيع معاملة سولانا (Ed25519) وإرسالها إلى Solana RPC — وليس إلى الوكيل.** يتحقق وقت تشغيل سولانا من التوقيع؛ وعلى السلسلة، يشتق البرنامج `msg.sender` من ذلك الموقّع. فالسلطة هي توقيع سولانا، لا توقيع إيثريوم. (يُستخدم الوكيل فقط للمحاكاة/الاكتشاف في الخطوة 2.)

يملك PDA الخاص بالمستخدم (`["EXTERNAL_AUTHORITY", synthetic_address]`) حسابات رموزهم ويوقّع استدعاءات SPL البينية (CPIs) نيابةً عنهم — لذا يمكن لمستخدم سولانا الإيداع والاقتراض والمبادلة وتوفير السيولة بالكامل من Phantom.

## التنفيذات المرجعية

* **Aerarium** — يدير Compound v3 (الإيداع / الاقتراض) من Phantom عبر `DoTxUnsigned`.
* **Rome DEX** — يتداول مسار سولانا ويوفّر السيولة في المجمع نفسه مثل مسار EVM.

كلاهما أصلي لسولانا من دون جسر أو محفظة ثانية — يجعل العنوان الاصطناعي مفتاح Phantom واحدًا حساب EVM من الدرجة الأولى.

## ما التالي

* [استدعِ سولانا من EVM](/ar/adlh-almtwryn/call-solana-from-evm.md) — الاتجاه الآخر، عبر CPI
* [التوافق البيني للرموز](/ar/almfahym-alasasyh/token-interop.md) — كيف تُشارك الأرصدة عبر EVM وسولانا


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.rome.builders/ar/adlh-almtwryn/call-evm-from-solana.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
