For the complete documentation index, see llms.txt. This page is also available as Markdown.

Вызов Solana из EVM

Вызывайте программы Solana из Solidity через CPI и вспомогательные пре-компилы Rome.

Предкомпилированные контракты Rome позволяют контрактам Solidity напрямую вызывать программы Solana. В этом руководстве рассматриваются механизмы.

Требования

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

import {ICrossProgramInvocation, ISystemProgram, IHelperProgram}
    from "@rome-protocol/rome-solidity/contracts/interface.sol";

ICrossProgramInvocation constant CpiProgram    = ICrossProgramInvocation(0xFF00000000000000000000000000000000000008);
ISystemProgram          constant SystemProgram = ISystemProgram(0xFF00000000000000000000000000000000000007);
IHelperProgram          constant Helper        = IHelperProgram(0xFF00000000000000000000000000000000000009);

Предкомпиляция CpiProgram

CpiProgram (0xFF…08) выполняет CPI (invoke / invoke_signed) а также сокращенные способы чтения состояния (account_info, account_data_at, account_u64_at, account_lamports, pdas_batch_derive):

// Вызов программы Solana
CpiProgram.invoke(programId, accounts, instructionData);

// Вызов с подписью PDA (ваш контракт подписывает как PDA)
CpiProgram.invoke_signed(programId, accounts, data, seeds);

Перевод lamports

Для простых переводов SOL/lamports и SPL из PDA вызывающей стороны используйте предкомпиляцию HelperProgram — вручную собирать CPI не требуется:

transfer_spl имеет несколько перегрузок (включая вариант delegate для transferFrom потоков); см. interface.sol. В кэшированном варианте используйте ISplCached (0xff…05) / IAssociatedSplCached (0xff…06) вместо этого — контракт должен последовательно использовать один вариант.

Чтение данных аккаунта

Читайте данные любого аккаунта Solana с помощью сокращенных способов чтения CpiProgram:

Получение PDA

Находите Program Derived Address из Solidity через предкомпиляцию System:

Преобразование Base58

Преобразование между bytes32 и base58 (формат адресов Solana):

Вызов пользовательских программ Solana

Чтобы вызвать любую программу Solana, самостоятельно сформируйте список аккаунтов и данные инструкции:

Ключевые ограничения

  1. Все аккаунты должны быть объявлены заранее. Транзакция Solana должна включать каждый аккаунт, к которому обратится CPI — динамическое обнаружение аккаунтов внутри CPI невозможно.

  2. Ограничение глубины CPI: 4 уровня. Rome EVM → ваша цель → вызов цели → еще один уровень. Планируйте глубину вызовов.

  3. Pubkey Solana — это bytes32, не 20-байтные адреса Ethereum.

  4. Данные инструкции — это необработанные байты в формате, который ожидает целевая программа (обычно Borsh, little-endian).

Что дальше

  • Посмотрите это в реальном приложенииrome-dex (двухканальный AMM), cardo (маршруты CPI в Meteora / Marinade / Mango / Jupiter), и aerarium вызывать Solana из Solidity в рабочей среде.

  • Вызов EVM из Solana — обратный сценарий: управлять контрактами EVM из кошелька Solana

  • Совместимость токенов — как взаимодействуют токены ERC-20 и SPL

  • Ограничения — глубина CPI и другие ограничения

Последнее обновление

Это было полезно?