> 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/id/panduan-pengembang/call-evm-from-solana.md).

# Panggil EVM dari Solana

Kebalikan dari [Panggil Solana dari EVM](/id/panduan-pengembang/call-solana-from-evm.md): sebuah dompet Solana (mis. Phantom) memanggil kontrak EVM apa pun di Rome secara langsung, dengan **tanpa kunci Ethereum**. Inilah cara [Aerarium](/id/aplikasi-di-rome/apps.md) dan [Rome DEX](/id/aplikasi-di-rome/apps.md) 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.

```javascript
import { syntheticAddress } from "@rome-protocol/sdk";
const from = syntheticAddress(solanaPubkey); // 0x… 20 bytes
```

## Sintetis 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:

1. **Penyediaan (sekali).** PDA otorisasi eksternal dari sintetis yang baru dibuat belum ada sampai `create_pda` dijalankan — dan transfer di bawah ini ditandatangani oleh PDA itu. `submitRomeTxSolanaLane` menyediakannya secara otomatis saat pertama kali digunakan (atau panggil `provisionSynthetic` untuk langkah "Activate" eksplisit; periksa dengan `isSyntheticProvisioned`).
2. **Langkah pendanaan (dompet → sintetis).** Pindahkan token dari ATA dompet ke ATA sintetis — langkah `ActivateAta` , dibuat oleh `buildFundLeg`. Sekarang `wrapper.balanceOf(synthetic)` membaca saldo itu, sehingga sintetis membelanjakannya sebagai ERC-20 biasa (`transfer` / `transferFrom`) — **bukan** sebagai native `msg.value`, yang tidak dimilikinya.
3. **Panggilan-panggilan (`DoTxUnsigned`).** Sintetis menjalankan transaksi EVM — mis. `approve` lalu sebuah vault `deposit` yang menarik melalui `transferFrom`.
4. **Langkah sweeping (sintetis → dompet).** Setelah withdraw / borrow / claim menempatkan token di sintetis, `buildSweepLeg` mendorongnya kembali ke ATA dompet milik pengguna (`HelperProgram.transfer_spl`), sehingga saldo bersih sintetis menjadi nol.

## Bagaimana panggilan dibuat

`submitRomeTxSolanaLane` melakukan semua ini. Mekanismenya:

1. **Bangun transaksi EIP-1559 tanpa tanda tangan** dengan `from` = alamat sintetis — tanpa tanda tangan secp256k1.
2. **Temukan akun-akun** — panggil [`rome_emulateCallAccounts`](/id/referensi/json-rpc.md) dengan `from`, `ke`, `data`, **dan `nilai`** (saat panggilan dapat menerima pembayaran). Menyertakan `nilai` sangat 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."*
3. **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) + **`DoTxUnsigned`** instruksi (RLP tanpa tanda tangan + akun yang ditemukan) + **dompet perbendaharaan** (eksekusi membayarnya biaya kecil; discovery tidak menyertakannya, jadi SDK menambahkannya).
4. **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.sender` dari 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](/id/panduan-pengembang/call-solana-from-evm.md) — arah sebaliknya, melalui CPI
* [Interoperabilitas Token](/id/konsep-inti/token-interop.md) — bagaimana saldo dibagikan di antara EVM dan Solana


---

# 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 dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.rome.builders/id/panduan-pengembang/call-evm-from-solana.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
