Panggil EVM dari Solana
Biarkan wallet Solana mengendalikan kontrak EVM di Rome — tanpa kunci Ethereum. Wallet menandatangani, dan transaksinya masuk ke Solana.
Kebalikan dari Panggil Solana dari EVM: sebuah dompet Solana (mis. Phantom) memanggil kontrak EVM apa pun di Rome secara langsung, dengan tanpa kunci Ethereum. Inilah cara Aerarium dan Rome DEX memungkinkan pengguna native Solana berbagi kontrak yang sama dengan pengguna EVM.
Cara satu panggilan adalah submitRomeTxSolanaLane; halaman ini menjelaskan fungsinya.
Alamat sintetis
Identitas EVM dari dompet Solana adalah alamat sintetis — 20 byte terakhir dari keccak256 dari public key Solana 32 byte-nya:
synthetic_evm_address = keccak256(solana_pubkey)[12:]Ini adalah msg.sender saat dompet memanggil kontrak, dan identitas stabil tempat nonce dan penyimpanannya berada. Derivasinya dipatok dalam protokol, jadi sebuah dompet selalu dipetakan ke alamat yang sama.
import { syntheticAddress } from "@rome-protocol/sdk";
const from = syntheticAddress(solanaPubkey); // 0x… 20 bytesSintetis ini hanyalah perantara — ia tidak menyimpan token saat tidak digunakan
Saldo yang dapat dibelanjakan oleh pengguna native Solana berada di dompet Solana (sebagai token SPL), ditampilkan 1:1 di sisi EVM sebagai pembungkus ERC20SPL (mis. wUSDC). Sintetis tidak menyimpan apa pun saat tidak digunakan, jadi nilai mengalir melalui darinya — setiap langkah ditandatangani oleh dompet Solana:
Penyediaan (sekali). PDA otorisasi eksternal dari sintetis yang baru dibuat belum ada sampai
create_pdadijalankan — dan transfer di bawah ini ditandatangani oleh PDA itu.submitRomeTxSolanaLanemenyediakannya secara otomatis saat pertama kali digunakan (atau panggilprovisionSyntheticuntuk langkah "Activate" eksplisit; periksa denganisSyntheticProvisioned).Langkah pendanaan (dompet → sintetis). Pindahkan token dari ATA dompet ke ATA sintetis — langkah
ActivateAta, dibuat olehbuildFundLeg. Sekarangwrapper.balanceOf(synthetic)membaca saldo itu, sehingga sintetis membelanjakannya sebagai ERC-20 biasa (transfer/transferFrom) — bukan sebagai nativemsg.value, yang tidak dimilikinya.Panggilan-panggilan (
DoTxUnsigned). Sintetis menjalankan transaksi EVM — mis.approvelalu sebuah vaultdeposityang menarik melaluitransferFrom.Langkah sweeping (sintetis → dompet). Setelah withdraw / borrow / claim menempatkan token di sintetis,
buildSweepLegmendorongnya kembali ke ATA dompet milik pengguna (HelperProgram.transfer_spl), sehingga saldo bersih sintetis menjadi nol.
Bagaimana panggilan dibuat
submitRomeTxSolanaLane melakukan semua ini. Mekanismenya:
Bangun transaksi EIP-1559 tanpa tanda tangan dengan
from= alamat sintetis — tanpa tanda tangan secp256k1.Temukan akun-akun — panggil
rome_emulateCallAccountsdenganfrom,ke,data, dannilai(saat panggilan dapat menerima pembayaran). Menyertakannilaisangat penting: proxy meniru sebenarnya panggilan, jadi setiap penulisan penyimpanan yang bergantung pada nilai — misalnya slot mapping baru — dialokasikan dan akun Solana-nya dikembalikan. Jika dihilangkan, akun itu tidak ada, dan transaksi gagal dengan "instruction modified data of a read-only account."Susun transaksi Solana: dua ComputeBudget instruksi (EVM Rome memerlukan batas CU yang lebih tinggi ≈1,35 juta dan heap frame besar ≈250 KB — default Solana akan gagal) +
DoTxUnsignedinstruksi (RLP tanpa tanda tangan + akun yang ditemukan) + dompet perbendaharaan (eksekusi membayarnya biaya kecil; discovery tidak menyertakannya, jadi SDK menambahkannya).Dompet menandatangani dan mengirimkannya. Sang dompet Solana menandatangani transaksi Solana (Ed25519) dan mengirimkannya ke RPC Solana — bukan ke proxy. Runtime Solana memverifikasi tanda tangan; di on-chain, program menurunkan
msg.senderdari penandatangan itu. Otoritasnya adalah tanda tangan Solana, bukan tanda tangan Ethereum. (Proxy hanya digunakan untuk emulasi/discovery pada langkah 2.)
PDA milik pengguna (["EXTERNAL_AUTHORITY", synthetic_address]) memiliki akun token mereka dan menandatangani CPI SPL atas nama mereka — jadi pengguna Solana dapat supply, borrow, swap, dan LP sepenuhnya dari Phantom.
Implementasi referensi
Aerarium — menjalankan Compound v3 (supply / borrow) dari Phantom melalui
DoTxUnsigned.Rome DEX — jalur Solana memperdagangkan dan menyediakan likuiditas pada pool yang sama dengan jalur EVM.
Keduanya native Solana tanpa bridge atau dompet kedua — alamat sintetis menjadikan satu kunci Phantom sebagai akun EVM kelas utama.
Apa Selanjutnya
Panggil Solana dari EVM — arah sebaliknya, melalui CPI
Interoperabilitas Token — bagaimana saldo dibagikan di antara EVM dan Solana
Terakhir diperbarui
Apakah ini membantu?