# Rome SDK

توفر Rome SDK واجهات Solidity مُنَمطَة للتفاعل مع برامج Solana من عقود EVM الذكية. إنها مجموعة أدوات المطورين لبناء تطبيقات متعددة بيئات التشغيل على Rome.

## حزمتا SDK

يحتوي Rome على حزمتَي SDK تخدمان أغراضًا مختلفة:

### حزمة Solidity SDK (`@rome-protocol/solidity-sdk`)

**للمطورين الذين يستخدمون Solidity.** توفر واجهات precompile، وواجهات تغليف ERC-20/SPL، واشتقاق PDA، وأدوات CPI. ثبّت عبر npm واستوردها داخل عقود Solidity الخاصة بك.

```bash
npm install @rome-protocol/solidity-sdk
```

```solidity
import {SplToken, CpiProgram, SystemProgram} from "@rome-protocol/solidity-sdk/contracts/core/Precompiles.sol";
import {SPL_ERC20} from "@rome-protocol/solidity-sdk/contracts/token/ERC20SPL.sol";
import {RomeEVMAccount} from "@rome-protocol/solidity-sdk/contracts/core/RomeEVMAccount.sol";
```

### حزمة Rust SDK (`rome-sdk`)

**لمشغّلي البنية التحتية.** مساحة عمل Rust تضم 9 حزم تتعامل مع تركيب المعاملات، والتفاعل مع Solana، وتسعير الغاز، وفهرسة الكتل، وتنسيق الخدمات. تُستخدم بواسطة Proxy وHercules وRhea.

## حزمة Solidity SDK: ما الذي تتضمنه

### واجهات Precompile

ثوابت singleton مُهيأة مسبقًا لجميع عمليات precompile في Rome:

```solidity
// متاحة عالميًا بعد الاستيراد
ISplToken constant SplToken;                    // 0xff...05
IAssociatedSplToken constant AssociatedSplToken; // 0xff...06
ISystemProgram constant SystemProgram;           // 0xff...07
ICrossProgramInvocation constant CpiProgram;     // 0xff...08
IWithdraw constant Withdraw;                     // 0x42...16
```

### عمليات SPL Token

```solidity
// قراءة حالة حساب الرمز
ISplToken.Account memory acc = SplToken.account_state(tokenAccountPubkey);
uint64 balance = acc.amount;
bytes32 owner = acc.owner;

// نقل الرموز
SplToken.transfer(recipientAta, mintPubkey, amount);

// تهيئة حساب رمز جديد
SplToken.initialize_account3(newAccount, mintPubkey, ownerPubkey);
```

### اشتقاق PDA

```solidity
// اشتقاق PDA خاص بمستخدم على Solana
bytes32 userPda = RomeEVMAccount.pda(msg.sender);

// اشتقاق PDA مع salt (لإنشاء عدة PDAs لكل مستخدم)
bytes32 pda = RomeEVMAccount.pda_with_salt(msg.sender, salt);

// العثور على PDA عشوائي
(bytes32 pda, uint8 bump) = SystemProgram.find_program_address(programId, seeds);
```

### الاستدعاء بين البرامج

```solidity
// استدعاء أي برنامج على Solana
ICrossProgramInvocation.AccountMeta[] memory accounts = new ICrossProgramInvocation.AccountMeta[](2);
accounts[0] = ICrossProgramInvocation.AccountMeta(signerPda, true, true);
accounts[1] = ICrossProgramInvocation.AccountMeta(targetAccount, false, true);

CpiProgram.invoke(programId, accounts, instructionData);

// الاستدعاء مع التوقيع عبر PDA
CpiProgram.invoke_signed(programId, accounts, data, seeds);

// قراءة بيانات الحساب
(uint64 lamports, bytes32 owner, bool isSigner, bool isWritable, bool executable, bytes memory data)
    = CpiProgram.account_info(pubkey);
```

### ERC-20 فوق رموز SPL

```solidity
// نشر غلاف لأي mint من SPL
ERC20SPLFactory factory = ERC20SPLFactory(FACTORY_ADDRESS);
address wrapper = factory.add_spl_token_with_metadata(splMint);

// استخدام الغلاف كأنه ERC-20 قياسي
SPL_ERC20 token = SPL_ERC20(wrapper);
token.transfer(recipient, amount);
uint256 balance = token.balanceOf(user);
```

### سجل الرموز

```solidity
TokenRegistry registry = TokenRegistry(REGISTRY_ADDRESS);

// التسجيل مع بيانات وصفية عبر السلاسل
registry.registerToken(splMint, TokenOrigin.WormholeWrapped, externalAddr, chainId);

// البحث بواسطة رمز خارجي
TokenEntry memory entry = registry.getTokenByExternal(2, ethUsdcAddress);
```

### إلغاء تسلسل Borsh

```solidity
import {Convert} from "@rome-protocol/solidity-sdk/contracts/core/Convert.sol";

// تحليل بيانات حساب Solana (بتنسيق Borsh little-endian)
(uint64 value, uint256 newOffset) = Convert.read_u64le(data, offset);
(bytes32 pubkey, uint256 newOffset2) = Convert.read_bytes32(data, offset);
```

### بيانات Metaplex الوصفية

```solidity
import {MplTokenMetadataLib} from "@rome-protocol/solidity-sdk/contracts/programs/metadata/MplTokenMetadataLib.sol";

// تحميل بيانات الرمز الوصفية من Metaplex
MplTokenMetadataLib.Metadata memory meta = MplTokenMetadataLib.load_metadata(
    mintPubkey, mplProgramId, cpiAddress
);
string memory name = meta.name;
string memory symbol = meta.symbol;
```

## حزمة Rust SDK: البنية

حزمة Rust SDK هي مساحة عمل من 9 حزم:

| الحزمة            | الغرض                                                                                   |
| ----------------- | --------------------------------------------------------------------------------------- |
| `rome-sdk`        | واجهة API الأساسية: `Rome` بنية، إعدادات، وأنواع المعاملات (RheaTx, RemusTx, RomulusTx) |
| `rome-evm-client` | عميل تجميع EVM، TxBuilder، ResourceFactory، وتكامل المحاكي                              |
| `rome-solana`     | برج Solana، عميل RPC، وتجزئة المعاملات وتتبعها                                          |
| `rome-geth`       | تكامل OP-Geth Engine API لبناء الكتل                                                    |
| `rome-utils`      | أدوات RLP، hex، JSON-RPC، والمصادقة                                                     |
| `rome-obs`        | إمكانية الرصد عبر OpenTelemetry (تتبعات، مقاييس، سجلات)                                 |
| `rome-da`         | طبقة توافر البيانات Celestia                                                            |
| `rome-meteora`    | مهايئات مجمع AMM الخاص بـ Meteora DEX لتسعير الغاز                                      |
| `rome-meta-hook`  | عميل الموجّه الخاص بـ Token-2022 Transfer Hook                                          |

### أنواع المعاملات

```rust
// معاملة تجميع واحدة
let rhea = RheaTx::new(signed_eth_tx);
let mut tx = rome.compose_rollup_tx(rhea).await?;
let sig = rome.send_and_confirm(&mut *tx).await?;

// معاملة ذرية عبر التجميعات
let remus = RemusTx::new(vec![tx1, tx2]);
let mut tx = rome.compose_cross_rollup_tx(remus).await?;

// معاملة ذرية عبر السلاسل (EVM + Solana)
let romulus = RomulusTx::new(eth_txs, sol_ixs);
let mut tx = rome.compose_cross_chain_tx(romulus, signers).await?;
```

### تجميع الموارد

تقوم الحزمة بتجميع أزواج مفاتيح Solana (الدافعين) وفهارس حسابات الحاملين لإرسال المعاملات بالتوازي:

```rust
let resource = resource_factory.get().await?;
let payer = resource.payer();       // زوج مفاتيح Solana
let holder = resource.holder();     // فهرس حساب الحامل
// تُعاد الموارد تلقائيًا إلى المجموعة عند Drop
```

## خارطة طريق SDK

### مبني ويعمل

* غلافات SPL Token وواجهات precompile
* تبادلات Meteora DAMM v1 عبر CPI
* Oracle Gateway V1 + V2 (Pyth Pull, Switchboard V3)
* مساعدات System Program، وإلغاء تسلسل Borsh
* ERC20SPL Factory + عقود الجسر
* سجل الرموز مع بيانات وصفية عبر السلاسل

### قيد التنفيذ

* JupiterRouter (واجهة Solidity لتبادلات Jupiter)
* عميل SDK لموجّه Meta-Hook

### مخطط له (المرحلة 2)

| الواجهة  | البروتوكول               |
| -------- | ------------------------ |
| IJupiter | مجمّع Jupiter DEX        |
| IDrift   | العقود الدائمة Drift     |
| IKamino  | إقراض Kamino             |
| IMeteora | سيولة Meteora            |
| IOndoGM  | أصول العالم الحقيقي Ondo |

### مخطط له (المرحلة 3)

| الواجهة       | البرنامج          |
| ------------- | ----------------- |
| IStakeProgram | Solana Stake      |
| IVoteProgram  | Solana Vote       |
| ISlotHashes   | SlotHashes Sysvar |

## ما التالي

* [نشر Solidity](/ar/adlh-almtwryn/deploy-solidity.md) — انشر عقدك الأول باستخدام الحزمة
* [استدعِ Solana من EVM](/ar/adlh-almtwryn/call-solana-from-evm.md) — استخدم CPI للتفاعل مع برامج Solana
* [عناوين العقود](/ar/almrja/contract-addresses.md) — عناوين عقود SDK المنشورة


---

# Agent Instructions: 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:

```
GET https://docs.rome.builders/ar/almntjat/rome-sdk.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
