> 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/ru/produkty/rome-sdk.md).

# Rome SDK

Типизированные интерфейсы Solidity для вызова программ Solana из EVM-контрактов, а также Rust SDK, лежащий в основе офчейн-сервисов Rome.

SDK Rome предоставляет типизированные интерфейсы Solidity для взаимодействия с программами Solana из смарт-контрактов EVM. Это набор инструментов для разработчиков, предназначенный для создания кросс-рантайм приложений на Rome.

## SDK

У Rome есть SDK для трёх категорий пользователей — разработчиков приложений (TypeScript), разработчиков контрактов (Solidity) и команд, которые запускают собственные сервисы на Rome (Rust).

### TypeScript SDK (`@rome-protocol/sdk`)

**Для разработчиков dapp и frontend** — SDK, с которого начинают большинство разработчиков приложений. [`@rome-protocol/sdk`](https://github.com/rome-protocol/rome-sdk-ts) оборачивает путь записи Rome так, чтобы веб-приложение корректно отправляло транзакции Rome: `submitRomeTx` (правильный путь записи плюс обработка газа/комиссии), вывод PDA / ATA, CPI `invoke` / `invoke_signed` энкодеры, привязки прекомпилов и `/bridge` подпуть. Установка из репозитория в первую очередь (публикация в npm ожидается):

```bash
npm install github:rome-protocol/rome-sdk-ts#v0.4.0
```

```typescript
import { submitRomeTx } from '@rome-protocol/sdk';
// Отправьте любую запись EVM Rome через правильный путь записи (обрабатывает кодирование газа/комиссии).
```

Публичное [rome-dex](https://github.com/rome-protocol/rome-dex) приложение использует лишь несколько вспомогательных функций SDK (вывод PDA и токен-аккаунтов, `invoke` энкодер CPI и запас газа 1,3x), и [cardo](https://github.com/rome-protocol/cardo) не зависит от него. Оно не вызывает ни `submitRomeTx` или `submitRomeTxV1`что читайте их, чтобы понять, как приложение вызывает прекомпил CPI, а не путь записи SDK.

**Оба маршрута — один SDK.** `submitRomeTx` — это маршрут EVM (MetaMask). Для **маршрута Solana** — кошелёк Solana, управляющий вашим EVM-приложением — `submitRomeTxV1` повторяет его: прокси формирует одну транзакцию Solana v1 для вызова, кошелёк подписывает её дважды одним и тем же ключом (сначала читаемое сообщение авторизации, затем транзакцию), а Rome выполняет вызов как EVM-транзакцию от производной идентичности пользователя, без EVM-ключа. Вызов, который не помещается в одну транзакцию, ретранслируется прокси с той же авторизационной подписью, и `fundSyntheticGas` пополняет нативный газ, который расходует ретранслируемый вызов. Если ретранслируемый вызов откатывается, результатом будет `receipt.status === "0x0"` вместо выбрасывания исключения, поэтому проверяйте это; [ретранслируемые вызовы и длинные вызовы](/ru/rukovodstva-dlya-razrabotchikov/call-evm-from-solana.md#relayed-calls-and-long-calls) в этом разделе описаны правило газа и ограничения. Значение перемещается внутрь и наружу через `buildFundLeg` / `buildSweepLeg` как обёртка ERC-20 (например, `wUSDC`), а не как нативный `msg.value` — синтетический отправитель в состоянии покоя не хранит ничего — и синтетический аккаунт при первом создании подготавливается один раз, явно, с помощью `buildCreatePdaCall`. Ранее `submitRomeTxSolanaLane`функция, которая создаёт legacy-транзакцию Solana на клиенте, по-прежнему находится в SDK. См. [Создание приложения с двумя каналами](/ru/rukovodstva-dlya-razrabotchikov/dual-lane-app.md) и [Вызов EVM из Solana](/ru/rukovodstva-dlya-razrabotchikov/call-evm-from-solana.md).

### Solidity SDK (`@rome-protocol/rome-solidity`)

**Для разработчиков на Solidity.** Предоставляет интерфейсы прекомпилов, обёртки ERC-20/SPL, вывод PDA и утилиты CPI. Публикация в npm ожидается; сегодня вы используете это из публичного [`rome-solidity`](https://github.com/rome-protocol/rome-solidity) репозитория (как зависимость git или копируемые файлы).

```solidity
import {ISystemProgram, ICrossProgramInvocation, IHelperProgram, IWithdraw}
    from "@rome-protocol/rome-solidity/contracts/interface.sol";
import {SPL_ERC20} from "@rome-protocol/rome-solidity/contracts/erc20spl/erc20spl.sol";
import {RomeEVMAccount} from "@rome-protocol/rome-solidity/contracts/rome_evm_account.sol";
```

### Rust SDK (`rome-sdk`)

**Для команд, которые запускают собственные сервисы на Rome.** Рабочее пространство Rust, которое обрабатывает композицию транзакций, взаимодействие с Solana, ценообразование газа и индексацию блоков. На нём построены Proxy и Hercules. Исходный код находится в [`rome-protocol/rome-sdk`](https://github.com/rome-protocol/rome-sdk). Оно отправляет транзакции Solana v1 (4 КБ, до 64 аккаунтов).

**Сборка.** Рабочее пространство ожидает, что репозитории [`rome-sdk`](https://github.com/rome-protocol/rome-sdk), [`rome-evm`](https://github.com/rome-protocol/rome-evm) и [`mollusk`](https://github.com/rome-protocol/mollusk) будут клонированы рядом, поскольку оно зависит от двух других по относительному пути. Именно поэтому поддерживаемый способ использования его из другого проекта — это зависимость по пути, а не обычная git-зависимость. Для первой сборки вам понадобятся Rust 1.85 или новее и доступ к сети. `rome-evm` не имеет сетевой функции по умолчанию, поэтому любая сборка, которая его компилирует, требует ровно одну из `ci`, `testnet` или `mainnet`; используйте `ci` для локальной работы, например `cargo test -p rome-sdk --features ci`. В README репозитория приведены полные шаги и таблица функций.

**Лицензия.** Rust SDK доступен в исходниках, но не является open source: все права защищены, и его можно использовать для личных некоммерческих целей. Коммерческое использование требует письменного разрешения от Rome Protocol; в файле `LICENSE` описано, как запросить разрешение.

## Solidity SDK: что включено

### Интерфейсы прекомпилов

Привяжите интерфейс к его адресу прекомпила:

```solidity
ISystemProgram          constant System   = ISystemProgram(0xFF00000000000000000000000000000000000007);
ICrossProgramInvocation constant Cpi      = ICrossProgramInvocation(0xFF00000000000000000000000000000000000008);
IHelperProgram          constant Helper   = IHelperProgram(0xFF00000000000000000000000000000000000009);
IWithdraw               constant Withdraw = IWithdraw(0x4200000000000000000000000000000000000016);
// Кэшированный путь: ISplCached 0xff…05, IAssociatedSplCached 0xff…06, ISystemCached 0xff…04, IWithdrawCached 0xff…0b
```

### Операции с токенами SPL

Используйте `IHelperProgram` (`0xff…09`) для примитивов SPL, подписываемых пользовательским PDA:

```solidity
// Создать ATA вызывающей стороны для mint
Helper.create_ata(user, mint);

// Перевести SPL из PDA вызывающей стороны
Helper.transfer_spl(to, tokens, mint);
```

В кэшированном пути эквивалентные операции находятся в `ISplCached` (`0xff…05`и `IAssociatedSplCached` (`0xff…06`). См. `interface.sol` для всех перегрузок; контракт последовательно использует один и тот же путь.

### Вывод PDA

```solidity
// Вывести Solana PDA пользователя
bytes32 userPda = RomeEVMAccount.pda(msg.sender);

// Вывести PDA с солью (для создания нескольких PDA на одного пользователя)
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);
```

### Десериализация Borsh

```solidity
import {Convert} from "@rome-protocol/rome-solidity/contracts/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/rome-solidity/contracts/mpl_token_metadata/lib.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 — это рабочее пространство Cargo. Его основные crates:

| Crate               | Назначение                                                                                                                                               |
| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `rome-sdk`          | Основной API: `Rome` структура, конфигурация, типы транзакций (RheaTx, RemusTx, RomulusTx)                                                               |
| `rome-evm-client`   | клиент EVM rollup, TxBuilder, ResourceFactory, интеграция с эмулятором                                                                                   |
| `rome-solana`       | Solana tower, RPC-клиент, пакетирование и отслеживание транзакций                                                                                        |
| `rome-utils`        | утилиты RLP, hex, JSON-RPC и аутентификации                                                                                                              |
| `rome-obs`          | наблюдаемость OpenTelemetry (трейсы, метрики, логи)                                                                                                      |
| `rome-meteora`      | чтение пулов Meteora DAMM v1 и v2 для ценообразования газа                                                                                               |
| `rome-meta-hook`    | клиент для программы Meta-Hook Router: конфигурация transfer-hook для Token-2022, разрешение дополнительных аккаунтов, переводы с оценкой compute budget |
| `rome-jito-bundler` | сборщик Jito bundle для атомарной отправки нескольких транзакций                                                                                         |

### Типы транзакций

```rust
// Одиночная транзакция rollup
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?;

// Атомарная транзакция между rollup
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?;
```

### Пул ресурсов

SDK объединяет keypair'ы Solana (payer'ы) и индексы аккаунтов-держателей для параллельной отправки транзакций:

```rust
let resource = resource_factory.get().await?;
let payer = resource.payer();       // keypair Solana
let holder = resource.holder();     // индекс аккаунта-держателя
// Ресурс автоматически возвращается в пул при Drop
```

## Дорожная карта SDK

### Реализовано и работает

* Обёртки токенов SPL и интерфейсы прекомпилов
* Свопы Meteora DAMM v1 через CPI
* Oracle Gateway V1 + V2 (Pyth Pull, Switchboard V3)
* Вспомогательные функции System Program, десериализация Borsh
* Фабрика ERC20SPL + bridge-контракты

## Что дальше

* [Разверните Solidity](/ru/rukovodstva-dlya-razrabotchikov/deploy-solidity.md) — разверните свой первый контракт с помощью SDK
* [Вызов Solana из EVM](/ru/rukovodstva-dlya-razrabotchikov/call-solana-from-evm.md) — используйте CPI для взаимодействия с программами Solana
* [справочнике Contract Addresses](/ru/spravochnik/contract-addresses.md) — адреса контрактов SDK после развертывания


---

# 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/ru/produkty/rome-sdk.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.
