> 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-almtw-ryn/from-home.md).

# من المنزل: الوصول إلى Rome من سلسلة أخرى

اسمح للمستخدمين على سلسلة أخرى بالوصول إلى تطبيق Rome الخاص بك دون مغادرة موطنهم — أدخل الأصول، واجرِ العمليات، ثم أخرجها مرة أخرى.

لا يحتاج مستخدموك إلى الانتقال إلى روما. من سلسلتهم المنزلية — طبقة L2 مثل Arbitrum أو Monad، أو Solana — يُدخلون الأصول، ويستخدمون تطبيقك في روما، ثم يُخرجون الأصول مرة أخرى. الجسر يعمل على السلسلة ومخوَّل بتوقيع المستخدم نفسه؛ وتربط تطبيقك به عبر واجهة API واحدة.

## كيف يعمل

* **الوارد (المنزل → روما):** على مسار USDC لرمز الغاز عبر CCTP، فإن `settle_inbound_bridge_v2` تعليمة برنامج روما تُضيف الرصيد للمستخدم، بموجب **EIP-712** `SettleAuthorization` الموقَّع، لذلك لا يوجد مُسوّي مميَّز. المسارات الواردة الأخرى لا تستخدم تلك التعليمة أو ذلك التوقيع. USDC المغلَّف وETH عبر Wormhole وSOL تصل مباشرة كرمز مغلف في حساب المستخدم. USDC على سولانا في سلسلة يكون رمز الغاز فيها هو USDC يحتاج معاملة إضافية واحدة، يوقّعها المستخدم، لتحويل الرمز المغلف إلى غاز أصلي. يوضح لك عرض السعر التوقيعات التي يحتاجها كل مسار.
* **الصادر (روما → المنزل):** `RomeBridgeWithdraw` (في [`rome-solidity`](https://github.com/rome-protocol/rome-solidity)) يحرق الأصل على روما. ثم يطالب به المستخدم على السلسلة المنزلية بمعاملته الخاصة.
* **النقل:** Circle **CCTP** لـ USDC و **Wormhole** لجسر الرموز الخاص بـ ETH. السلاسل المنزلية على سولانا تستخدم تحويلات SPL العادية للداخل ثم عملية سحب عبر روما للخارج. Wormhole هو مسار الدخول لـ ETH فقط. يوجد مسار Wormhole عام للخروج فقط، ويجب تمكين كل أصل عليه من قبل مشغّلي روما أولًا.
* **الترتيب:** الخدمة خارج السلسلة [`rome-bridge-api`](https://github.com/rome-protocol/rome-bridge-api) تسعّر المسار، وتتحقق من معاملة السلسلة المصدر، وتتكفّل برسوم التسوية. لا تحتفظ بأي أموال ولا بأي مفاتيح. ولا يمكنها سوى تنفيذ ما وقّعه المستخدم مسبقًا.

## ابنِه

واجهة API عامة على devnet على `https://bridge-api.devnet.romeprotocol.xyz`. `GET /v1/routes` يسرد كل المسارات الحية (الأصل، المسار، الاتجاه، السلسلة المصدر، سلسلة روما، السرعات). الاستدعاءات أدناه هي نفسها الأربع التي يغلّفها الـ SDK في `@rome-protocol/sdk/bridge` (`requestQuote`, `registerTransfer`, `getTransfer`, `reportStep`). ينفّذ لك CLI المسار الكامل: `rome fund` و `rome bridge` لعمليات النقل و `rome verify --path from-home` لرحلة ذهاب وعودة، كما هو موضح في [واجهة سطر أوامر روما](/ar/almntjat/rome-cli.md) الصفحة.

### أدخل الأصول

1. **أسعّر المسار.** أرسل السلسلة المصدر الخاصة بالمستخدم، والأصل، والمبلغ، والعناوين. تُمرَّر السلاسل كمعرّفات CAIP-2 مثل `eip155:84532`; `romeChainId` هي سلسلة روما الخاصة بك. الأسماء الأقدم `ethereum` و `solana` ما تزال مقبولة ولكنها مهجورة، وتعلِّم الـ API تلك الاستجابات بـ `Sunset` رأس. الأشكال الكاملة للطلب والاستجابة موجودة في [مرجع API](https://github.com/rome-protocol/rome-bridge-api/blob/main/docs/API.md).

   ```bash
   curl -X POST https://bridge-api.devnet.romeprotocol.xyz/v1/quote \
     -H 'Content-Type: application/json' \
     -d '{
       "asset": "USDC",
       "direction": "to-rome",
       "sourceChain": "eip155:84532",
       "romeChainId": "200010",
       "amount": "1000000",
       "sender": { "ethereum": "0xUSER" },
       "recipient": "0xUSER"
     }'
   ```

   المبالغ هي أعداد صحيحة بوحدات الأساس داخل سلاسل نصية (`"1000000"` هو 1 USDC). مبالغ ETH تكون بالـ wei، وفي طريق الخروج يجب أن تكون مضاعفًا لـ 10,000,000,000 wei (لأن الرمز المغلّف له 8 منازل عشرية)؛ والـ API يرفض أي قيمة أدق من ذلك. تعرض الاستجابة `الخطوات`. يوقّع المستخدم معاملات كل خطوة موسومة بـ `userSigns: true`, بحسب ترتيب الخطوات: معاملات EVM موجودة في `unsignedTxs`, وتعليمات سولانا في `unsignedTx`. وقّعها تمامًا كما وردت. الخطوات التي لا تحتاج إلى توقيع ينفذها المموِّل بعد أن تؤكد Circle أو Wormhole النقل. مطالبة الخروج هي الاستثناء، كما هو موضح أدناه: المستخدم ينشئها.
2. **اجعل المستخدم يوقّع.** بالنسبة إلى عرض سعر CCTP، فهذا هو تفويض USDC والحرق على السلسلة المصدر. إذا كان في العرض إدخال ضمن `signatureRequests`، فإن المستخدم يوقّع أيضًا ذلك `SettleAuthorization` بمجرد معرفة تجزئة الحرق؛ املأ تجزئة الحرق ومرّر النتيجة على أنها `userSettleSig` في الاستدعاء التالي. مسار CCTP الخاص برمز الغاز فقط هو الذي يحتوي على ذلك. مسارات Wormhole لـ ETH، وUSDC بنية الرمز المغلف، ومسارات سولانا لا تحتوي على أي منها.
3. **سجّل النقل.** `POST /v1/transfers` مع العرض الكامل و `step1TxHash`، وهو تجزئة آخر معاملة في الخطوة الأولى (الحرق). يتحقق الـ API من أن المعاملة على السلسلة المصدر تطابق العرض، ثم يعيد `معرّف النقل`.
4. **استعلم** `GET /v1/transfers/{id}` كل بضع ثوانٍ حتى `النتيجة` هو `اكتمل`. عندها يُموَّل المستخدم على روما ويمكنه استخدام تطبيقك.

تتبع السلاسل المنزلية على سولانا الشكل نفسه لكن بخطوات مختلفة. يرسل المستخدم تحويل SPL إلى حساب الرموز الخاص بحسابه في روما. يصل SOL على هيئة wSOL بعد تلك المعاملة الواحدة. وعلى سلسلة يكون رمز الغاز فيها هو USDC، مثل Hadrian، يحتاج USDC إلى خطوة ثانية: معاملة في روما يوقّعها المستخدم لتحويل الرمز المغلّف الذي وصل إلى غاز أصلي. أي رمز SPL آخر يمر عبر `spl-solana-to-rome` المسار، الذي يأخذ الـ mint في `splAsset`.

### أخرج الأصول مرة أخرى

الخروج عبر الجسر ليس مجرد عكس لتدفق الدخول. فهو يحتاج إلى أكثر من توقيع واحد، ويكمل المستخدم العملية على السلسلة المنزلية. اطلبه مع `direction` مضبوطًا على `from-rome`. `sourceChain` يحدد الجانب غير الخاص بروما و `destinationChainId` يختار السلسلة التي يطالب عليها المستخدم. مرّر كلاهما: `destinationChainId` هو ما يحدد سلسلة المطالبة، وأي عرض من دونه يعود افتراضيًا إلى Ethereum Sepolia مهما كان `sourceChain` يقول:

```bash
curl -X POST https://bridge-api.devnet.romeprotocol.xyz/v1/quote \
  -H 'Content-Type: application/json' \
  -d '{
    "asset": "USDC",
    "direction": "from-rome",
    "sourceChain": "eip155:84532",
    "destinationChainId": 84532,
    "romeChainId": "200010",
    "amount": "1000000",
    "sender": { "rome": "0xUSER" },
    "recipient": "0xUSER"
  }'
```

بالنسبة إلى USDC عبر CCTP، يعيد العرض خطوتين، ويوقّع المستخدم كلتيهما:

1. **على روما، معامَلتان بالترتيب.** الأولى تمنح `RomeBridgeWithdraw` حقوق المندوب على wUSDC الخاص بالمستخدم على سولانا (`approve_spl`). يغطي هذا التفويض بالضبط مقدار هذا الحرق، لذلك يتضمنه العرض في كل مرة ويوقّعه المستخدم قبل كل حرق. الثانية تحرق wUSDC عبر `RomeBridgeWithdraw`، والذي يبدأ تحويل CCTP. سجّل النقل باستخدام تجزئة الحرق. يستهلك الحرق wUSDC، وهو الرمز الذي يسميه العرض `burnToken`، وليس USDC الغازي الأصلي. الأموال التي دخلت كغاز ليست هي ما يُحرق، لذلك لإجراء رحلة ذهاب وعودة أدخل USDC بـ `intent: "wrapper"`.
2. **على السلسلة الوجهة، المطالبة.** استعلم `GET /v1/transfers/{id}` حتى تصبح الخطوة 2 `جاهزة`. ثم تحمل `message` و `attestation`. يستدعي المستخدم `receiveMessage(message, attestation)` على ناقل الرسائل الخاص بـ Circle على السلسلة الوجهة (يسمي العرض الناقل ونطاق CCTP). لا يوجد تمويل هنا، لذا يحتاج المستخدم إلى غاز على تلك السلسلة. أرسل تجزئة المطالبة مع `POST /v1/transfers/{id}/steps/2`.

ETH عبر Wormhole له الشكل نفسه. يمنح المستخدم حقوق المندوب نفسها على wETH، ويحرق wETH على روما، وينتظر حتى يوقّع حُرّاس Wormhole. ثم يسترد على Ethereum بمعاملته الخاصة: `completeTransferAndUnwrapETH` على جسر الرموز الذي يسميه العرض (`claimTokenBridge`), باستخدام الرسالة الموقّعة (`vaa`) من الخطوة 2.

السحب إلى عنوان سولانا لا يحتوي على خطوة مطالبة. USDC هي معاملة واحدة في روما تسحب إلى حساب سولانا الخاص بالمستخدم. أما SOL فهي خطوة واحدة في روما بثلاث معاملات: منح التفويض نفسه على wSOL، وإنشاء اختياري لحساب رمز wSOL الخاص بالمستلم على سولانا (يُتخطّى إذا كان موجودًا بالفعل)، ثم السحب عبر `RomeBridgeWithdraw`.

**تحتاج أول عملية سحب إلى حساب مفعّل.** ينشئ حرق CCTP حساب رسالة على سولانا، ويجب أن يحتوي حساب المستخدم على روما على عدد كافٍ من lamports لدفع تكلفته. المحفظة الجديدة لا تملك ذلك، لذا تفشل أول عملية سحب إلى أن يفعّلها المستخدم مرة واحدة. الفحص هو أن يحتوي الحساب على ما لا يقل عن 15,000,000 lamports. اقرأها باستخدام `account_lamports(bytes32)` على precompile الخاص بـ CPI عند `0xff00000000000000000000000000000000000008`، مع تمرير حساب المصادقة الخارجي للمستخدم على سولانا (يقوم CLI بهذا القراءة نيابةً عنك). يستدعي التفعيل `activate()` على `SimpleActivator` العقد المدرج في [السجل](https://github.com/rome-protocol/rome-registry) لسلسلتك، ويحمل الاستدعاء دفعةً بالرمز الغازي الخاص بالسلسلة. على Hadrian تكون 2 USDC. يقوم CLI بذلك باستخدام `rome activate <chain>`، و `rome bridge --to` يتوقف ويخبرك بتشغيله إذا كان الحساب غير جاهز. يغطي الاحتياطي حرقًا واحدًا، وتعود الإيجارات بعد أن تؤكد Circle الحرق، وهذا يستغرق نحو 30 دقيقة. أي حرق ثانٍ قبل ذلك، أو حساب تم استنزافه منذ تفعيله، يحتاج `topUpUserPda(lamports)` على العقد نفسه، لأن `activate()` تتراجع بمجرد أن يكون الحساب قد تم تفعيله. `rome activate` يختار الاستدعاء الصحيح. التحويلات الواردة لا تحتاج إلى تفعيل. لا يتضمن العرض التفعيل كخطوة، لذا يجب على تطبيقك التحقق من الحساب وعرضه قبل أول عرض سعر للخروج.

## اقرأ الشيفرة

* [appia](https://github.com/rome-protocol/appia) — تطبيق من المنزل: يجلب المستخدمون USDC من سلسلتهم المنزلية ويستخدمون DeFi على جانب روما دون مغادرتها.
* [rome-bridge-api](https://github.com/rome-protocol/rome-bridge-api) — المنسّق (عرض السعر → التحقق → التمويل).

## ما التالي

* [الحصول على تمويل](/ar/almward/faucets.md) — مسار الجسر نفسه يمول محفظة تطوير جديدة.
* [انشر Solidity](/ar/adlh-almtw-ryn/deploy-solidity.md) — ضع تطبيقك على روما.


---

# 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.rome.builders/ar/adlh-almtw-ryn/from-home.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
