> 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/almrja/json-rpc.md).

# دعم JSON-RPC

أساليب Ethereum JSON-RPC المدعومة من نقاط نهاية Rome EVM، بالإضافة إلى السلوكيات الخاصة بـ Rome — لـ Foundry وHardhat وethers وviem وMetaMask.

تتحدث نقاط نهاية Rome EVM بروتوكول Ethereum JSON-RPC القياسي. يعمل Foundry وHardhat وethers وviem وMetaMask مع Rome بالطريقة نفسها التي يعملون بها على أي سلسلة EVM. تسرد هذه الصفحة ما هو المدعوم والسلوكيات القليلة الخاصة بـ Rome التي يجدر معرفتها.

## الأساليب المدعومة

**الأساسيات (الحالة والتنفيذ):** `eth_chainId`, `eth_blockNumber`, `eth_getBalance`, `eth_getCode`, `eth_getStorageAt`, `eth_getTransactionCount`, `eth_call`, `eth_estimateGas`, `eth_gasPrice`, `eth_maxPriorityFeePerGas`, `eth_feeHistory`.

**الكتل والمعاملات:** `eth_getBlockByNumber`, `eth_getBlockByHash`, `eth_getBlockReceipts`, `eth_getTransactionByHash`, `eth_getTransactionReceipt`, `eth_sendRawTransaction`، ومتغيرات block-by-index/count.

**السجلات والفلاتر:** `eth_getLogs`, `eth_newFilter`, `eth_newBlockFilter`, `eth_getFilterChanges`, `eth_getFilterLogs`, `eth_uninstallFilter`.

**اشتراكات WebSocket:** `eth_subscribe` / `eth_unsubscribe` (`newHeads`, `logs`). انظر [اشتراكات WebSocket](/ar/adlh-almtw-ryn/websocket-subscriptions.md).

**Net / web3:** `net_version`, `net_listening`, `net_peerCount`, `web3_clientVersion`.

**أساليب الاستقصاء الصغيرة:** `rpc_modules` (يسرد `debug`, `eth`, `net`, `rome`, `rpc`, `txpool`, `web3`), `eth_syncing` (دائمًا `false`), `eth_accounts` (قائمة فارغة دائمًا)، `eth_getUncleCountByBlockNumber`, `eth_getUncleCountByBlockHash`, `eth_getUncleByBlockNumberAndIndex` و `eth_getUncleByBlockHashAndIndex` (لا توجد كتل أعمام، لذا فإن الأعداد `0x0` وتُرجِع عمليات البحث `null`), `eth_newPendingTransactionFilter` (مقبول، لكنه لا يُرجِع التجزئات أبدًا لأنه لا توجد ذاكرة تجمع عامة)، و `txpool_status`، والتي تُرجِع دائمًا `{"pending":"0x0","queued":"0x0"}` لأنه لا توجد ذاكرة تجمع عامة.

**التتبّع:** `debug_traceRomeTransaction` يأخذ تجزئة معاملة ويُرجِع التفصيل لكل استدعاء فرعي ولكل CPI لمعاملة تجمع عدة استدعاءات في دفعة واحدة. المعاملات العادية تُرجِع `null`، وكذلك أي تجزئة غير معروفة أو غير مفهرسة بعد.

### غير مدعوم

`debug_traceTransaction` / `trace_*` (تتبّع المعاملات بأسلوب Ethereum؛ فهي تُرجِع `-32601`), `eth_getProof`, `eth_createAccessList`, `eth_blobBaseFee` (لا توجد معاملات blob)، و `txpool_*` الأساليب الأخرى غير `txpool_status` (لا توجد ذاكرة تجمع عامة). `newPendingTransactions` الاشتراكات مقبولة لكنها لا تُصدر أي أحداث أبدًا.

## أساليب امتداد Rome

إلى جانب Ethereum RPC القياسي، يوفّر الوكيل `rome_*` الأساليب:

| الأسلوب                           | الغرض                                                                                                                                                                                      |
| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `rome_emulateTx`                  | محاكاة معاملة خارج السلسلة (تُرجع نتيجة تنفيذ سولانا)                                                                                                                                      |
| `rome_emulateTxWithPayer`         | محاكاة مقابل دافع محدد                                                                                                                                                                     |
| `rome_emulateCallAccounts`        | محاكاة وإرجاع حسابات سولانا التي تلامسها المكالمة                                                                                                                                          |
| `rome_emulateRegRollup`           | محاكاة تسجيل rollup                                                                                                                                                                        |
| `rome_getResources`               | الإبلاغ عن حالة مجموعة موارد الوكيل (الدافعون، الحائزون)                                                                                                                                   |
| `rome_mintId`                     | حلّ عملية mint الخاصة بـ SPL الكامنة خلف غلاف ERC-20                                                                                                                                       |
| `rome_buildInfo`                  | معلومات بناء الوكيل + معلومات البرنامج على السلسلة                                                                                                                                         |
| `rome_isCompatible`               | التحقق من توافق الوكيل/البرنامج                                                                                                                                                            |
| `rome_solanaTxForEvmTx`           | الحصول على معاملة سولانا (أو المعاملات) لتجزئة معاملة EVM                                                                                                                                  |
| `rome_sendUnsignedTransaction`    | إرسال معاملة غير موقعة (تدفقات المرسل الاصطناعي)                                                                                                                                           |
| `rome_composeUnsignedAtomicV1`    | تكوين معاملة Solana v1 واحدة لجسم EIP-1559 غير موقّع ومخوّل بتوقيع Ed25519 من محفظة Solana؛ تقوم المحفظة بتوقيعه ويقوم التطبيق ببثّه. يرفض عندما لا تتلاءم المكالمة ضمن معاملة ذرّية واحدة |
| `rome_composeUnsignedIterativeV1` | نفس الشيء، لكنه يُرجِع كل خطوة (ذرّية إذا أمكن، وإلا فالخطوات التكرارية)؛ تقوم المحفظة بتوقيع كل خطوة وإرسالها مع `rome_submitSignedV1Plan`                                                |
| `rome_submitSignedV1Plan`         | بث خطة موقّعة (حتى 64 خطوة)؛ الوكيل هو للنقل فقط، وتبقى المحفظة هي دافع الرسوم                                                                                                             |
| `rome_relayUnsignedV1`            | توقيع واحد من المحفظة، ودافع الوكيل يقود الخطوات؛ يدفع المرسل الاصطناعي رسوم Rome (موّله أولًا باستخدام `rome_composeExternalDepositV1`). يُرجع تجزئة معاملة EVM                           |
| `rome_composeExternalDepositV1`   | معاملة واحدة موقّعة من المحفظة تُضاف بها رصيد الغاز الأصلي للكيان الاصطناعي من رموز المحفظة                                                                                                |

## سلوكيات خاصة بـ Rome

### الغاز مشتق من Solana — قدِّره، ولا تُثبّته بقيمة ثابتة

يقيس Rome التنفيذ بوحدات حوسبة Solana، وتظهر على هيئة غاز EVM. معظم تكلفة الكتابة تكون في إنشاء حسابات Solana: مستلم لم يُستخدم من قبل، حساب رمز جديد، عقد منشور. تُعدّ هذه الحسابات جزءًا من التقدير. النتائج العملية:

* **استخدم `eth_estimateGas`، ولا تُثبّت قيمة ثابتة `21000`.** الأدوات القياسية (`forge create`, `cast`، Hardhat، ethers، viem، MetaMask) تستدعيه بالفعل وتحصل على قيمة قابلة للاستخدام. بالنسبة للاستدعاءات التي تلامس برامج Solana، أضف هامشًا ( `submitRomeTx` يضيف 1.3×) وحدِّد سقفًا للغاز إذا كانت عملية التقدير نفسها تُرجِع خطأً. قيمة `21000` ثابتة تفشل كلما أنشأت الكتابة حسابات، مثل تحويل إلى عنوان لم يُستخدم من قبل.
* **يفرض Rome الغاز المستخدم فعليًا.** في القياسات أدناه، لم يكن الغاز المستخدم أبدًا أكثر من التقدير، لذا فإن التقدير الأعلى من العمل المنجز لا يكلفك الفرق.
* **اترك الهامش الذي تضيفه أداتك.** يمكن أن تتغير الحالة بين التقدير واللحظة التي تصل فيها المعاملة، وقد يظهر تقدير الاستدعاء الذي ينفذ Solana CPIs منخفضًا. يضيف SDK's `submitRomeTx` هامشًا قدره 1.3× إلى التقدير.

تم القياس على Hadrian، مع سعر غاز يبلغ حوالي 10.4 gwei في ذلك الوقت:

| الكتابة                                              | `eth_estimateGas` | الغاز المستخدم |
| ---------------------------------------------------- | ----------------- | -------------- |
| تحويل أصلي إلى عنوان لم يُستخدم من قبل               | 1,086,961         | 1,086,961      |
| تحويل أصلي إلى عنوان موجود                           | 21,000            | 10,001         |
| تحويل wUSDC إلى عنوان لم يُستخدم من قبل              | 2,544,921         | 2,544,921      |
| تغليف الغاز إلى wUSDC (`withdraw_to_ata`)            | 21,000            | 10,001         |
| منح الغلاف (`approve_spl` على التمهيد المسبق Helper) | 21,000            | 10,001         |
| نشر عقد بحجم 10 بايت                                 | 1,147,921         | 1,147,921      |

هذه قياسات منفردة على سلسلة واحدة، وليست حدودًا. تعتمد الأرقام على الحسابات التي يجب أن ينشئها الاستدعاء، لذا قدِّر كل كتابة بدلًا من نسخها.

### `forge script --broadcast` يتطلب `--skip-simulation`

`forge script` يضبط حدّ الغاز للبث من **محاكاة** محلية، وهذا يوفّر كمية أقل من المطلوب بالنسبة لنموذج غاز Rome. أضف `--skip-simulation` حتى يستخدم Foundry ما هو الخاص بالسلسلة `eth_estimateGas` بدلاً من ذلك:

```bash
forge script script/Deploy.s.sol:Deploy \\
  --rpc-url <RPC> --private-key $PRIVATE_KEY --broadcast --skip-simulation
```

`forge create`, `cast send`، وHardhat غير متأثرين — فهما يقدّران بالفعل على السلسلة.

### `eth_getLogs` مقيّد بنطاق (\~12,000 كتلة)

مثل Infura وAlchemy وغيرها من خدمات RPC الإنتاجية، `eth_getLogs` يرفض النطاقات الواسعة جدًا للكتل (خطأ `-32005`). حدِّد استعلاماتك:

```javascript
const latest = await provider.getBlockNumber();
const logs = await contract.queryFilter(filter, latest - 5000, latest);
```

تطبيق `queryFilter` من دون نطاق يمسح كل السجل وسيجاوز الحد — مرّر `fromBlock`/`toBlock`بشكل صريح. لا تتأثر التأكيدات القائمة على الإيصالات للأحداث (مثل انتظار معاملة وقراءة سجلاتها).

### الرسوم

`eth_gasPrice` يُرجع السعر الحقيقي المشتق من oracle؛ تستخدمه المحافظ (بما فيها MetaMask) وتعرض الرسوم الصحيحة. تُقبل حقول الرسوم المُرسلة بسماح — فكل من المعاملات القديمة وEIP-1559 تصل مع القيم الافتراضية للأدوات القياسية.


---

# 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/almrja/json-rpc.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.
