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

Panggil Solana dari EVM

Panggil program Solana dari Solidity melalui CPI Rome dan precompile pembantu.

Precompile Rome memungkinkan kontrak Solidity memanggil program Solana secara langsung. Panduan ini membahas mekanismenya.

Prasyarat

Tautkan setiap antarmuka ke alamat precompilenya:

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);

Precompile CpiProgram

CpiProgram (0xFFโ€ฆ08) menjalankan CPI (invoke / invoke_signed) plus pintasan baca lintas-state (account_info, account_data_at, account_u64_at, account_lamports, pdas_batch_derive):

// Panggil program Solana
CpiProgram.invoke(programId, accounts, instructionData);

// Panggil dengan penandatanganan PDA (kontrak Anda menandatangani sebagai PDA)
CpiProgram.invoke_signed(programId, accounts, data, seeds);

Transfer lamport

Untuk transfer SOL/lamport dan SPL sederhana dari PDA pemanggil, gunakan precompile HelperProgram โ€” tidak perlu CPI buatan tangan:

transfer_spl memiliki beberapa overload (termasuk varian delegate untuk transferFrom alur); lihat interface.sol. Pada jalur cached, gunakan ISplCached (0xffโ€ฆ05) / IAssociatedSplCached (0xffโ€ฆ06) sebagai gantinya โ€” kontrak menggunakan satu jalur secara konsisten.

Membaca data akun

Baca data akun Solana apa pun melalui pintasan baca CpiProgram:

Derivasi PDA

Temukan Program Derived Address dari Solidity melalui precompile System:

Konversi Base58

Konversi antara bytes32 dan base58 (format alamat Solana):

Memanggil program Solana kustom

Untuk memanggil program Solana apa pun, buat sendiri daftar akun dan data instruksinya:

Batasan Utama

  1. Semua akun harus dideklarasikan sejak awal. Transaksi Solana harus menyertakan setiap akun yang akan disentuh CPI โ€” penemuan akun dinamis di dalam CPI tidak dimungkinkan.

  2. Batas kedalaman CPI: 4 tingkat. Rome EVM โ†’ target Anda โ†’ panggilan target โ†’ satu lagi. Rencanakan kedalaman panggilan Anda.

  3. Pubkey Solana adalah bytes32, bukan alamat Ethereum berukuran 20 byte.

  4. Data instruksi adalah byte mentah dalam format yang diharapkan program target (biasanya Borsh, little-endian).

Apa Selanjutnya

  • Lihat di aplikasi nyata โ€” rome-dex (AMM dua jalur), cardo (rute CPI ke Meteora / Marinade / Mango / Jupiter), dan aerarium memanggil Solana dari Solidity dalam produksi.

  • Panggil EVM dari Solana โ€” kebalikannya: kendalikan kontrak EVM dari dompet Solana

  • Interoperabilitas Token โ€” cara ERC-20 dan token SPL bekerja bersama

  • Kendala โ€” kedalaman CPI dan batasan lainnya

Terakhir diperbarui

Apakah ini membantu?