> 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/from-home.md).

# Dari rumah: menjangkau Rome dari chain lain

Biarkan pengguna di chain lain menjangkau aplikasi Rome Anda tanpa meninggalkan rumah — masukkan aset, lakukan tindakan, keluarkan kembali.

Pengguna Anda tidak perlu pindah ke Rome. Dari rantai asal mereka — L2 seperti Arbitrum atau Monad, atau Solana — mereka membawa aset masuk, menggunakan aplikasi Rome Anda, lalu membawa aset keluar kembali. Jembatan ini berada di on-chain dan diotorisasi oleh tanda tangan pengguna sendiri; Anda menghubungkan aplikasi Anda ke sana melalui satu API.

## Cara kerjanya

* **Masuk (home → Rome):** pada rute token gas USDC melalui CCTP, `settle_inbound_bridge_v2` instruksi program Rome mengkredit pengguna, di bawah sebuah **EIP-712** `SettleAuthorization`, jadi tidak ada penyeleksi istimewa. Rute inbound lainnya tidak menggunakan instruksi atau tanda tangan itu. Wrapper USDC, ETH melalui Wormhole, dan SOL masuk langsung sebagai token wrapper ke akun pengguna. Solana USDC pada chain yang token gas-nya adalah USDC memerlukan satu transaksi lagi, ditandatangani oleh pengguna, untuk mengubah wrapper menjadi gas. Quote memberi tahu Anda tanda tangan apa saja yang dibutuhkan suatu rute.
* **Keluar (Rome → home):** `RomeBridgeWithdraw` (di [`rome-solidity`](https://github.com/rome-protocol/rome-solidity)) membakar aset di Rome. Pengguna kemudian mengklaimnya di rantai asal dengan transaksi mereka sendiri.
* **Transportasi:** Circle **CCTP** untuk USDC dan **Wormhole** untuk jembatan token ETH. Rantai asal Solana menggunakan transfer SPL biasa saat masuk dan withdraw Rome saat keluar. Wormhole adalah jalur inbound hanya untuk ETH. Rute Wormhole generik tersedia hanya untuk outbound, dan setiap aset di dalamnya harus diaktifkan terlebih dahulu oleh operator Rome.
* **Orkestrasi:** off-chain [`rome-bridge-api`](https://github.com/rome-protocol/rome-bridge-api) memberikan quote untuk rute, memverifikasi transaksi di rantai sumber, dan mensponsori biaya settle. Ia tidak menyimpan dana maupun kunci. Ia hanya dapat memicu apa yang sudah ditandatangani pengguna.

## Bangun ini

API publik tersedia di devnet pada `https://bridge-api.devnet.romeprotocol.xyz`. `GET /v1/routes` menampilkan semua rute yang aktif (aset, jalur, arah, chain sumber, chain Rome, kecepatan). Panggilan di bawah ini adalah empat panggilan yang sama yang dibungkus SDK dalam `@rome-protocol/sdk/bridge` (`requestQuote`, `registerTransfer`, `getTransfer`, `reportStep`). CLI menjalankan seluruh alur untuk Anda: `rome fund` dan `rome bridge` untuk transfer dan `rome verify --path from-home` untuk perjalanan pulang-pergi, seperti dijelaskan pada [Rome CLI](/id/produk/rome-cli.md) halaman.

### Bawa aset masuk

1. **Dapatkan quote untuk rutenya.** Kirim chain sumber pengguna, aset, jumlah, dan alamat. Chain dimasukkan sebagai id CAIP-2 seperti `eip155:84532`; `romeChainId` adalah chain Rome Anda. Nama lama `ethereum` dan `solana` masih diterima tetapi sudah tidak disarankan, dan API menandai respons tersebut dengan header `Sunset` yang tersedia. Bentuk request dan response lengkap ada di [referensi API](https://github.com/rome-protocol/rome-bridge-api/blob/main/docs/API.md).

   ```bash
   curl -X POST https://bridge-api.devnet.romeprotocol.xyz/v1/quote \\
     -H 'Content-Type: application/json' \\
     -d '{
       "asset": "USDC",
       "direction": "to-rome",
       "sourceChain": "eip155:84532",
       "romeChainId": "200010",
       "amount": "1000000",
       "sender": { "ethereum": "0xUSER" },
       "recipient": "0xUSER"
     }'
   ```

   Jumlah adalah bilangan bulat unit dasar dalam bentuk string (`"1000000"` adalah 1 USDC). Jumlah ETH dinyatakan dalam wei dan, saat keluar, harus kelipatan 10.000.000.000 wei (wrapper memiliki 8 desimal); API menolak apa pun yang lebih halus. Respons mencantumkan `langkah-langkah`. Pengguna menandatangani transaksi pada setiap langkah yang ditandai `userSigns: true`, sesuai urutan langkah: transaksi EVM ada di `unsignedTxs`, instruksi Solana di `unsignedTx`. Tandatangani persis seperti yang dikembalikan. Langkah tanpa apa pun untuk ditandatangani diselesaikan oleh sponsor setelah Circle atau Wormhole mengesahkan transfer. Klaim outbound adalah pengecualian, dijelaskan di bawah: pengguna yang membuatnya.
2. **Minta pengguna menandatangani.** Untuk quote CCTP, itu adalah persetujuan USDC dan burn di chain sumber. Jika quote memiliki entri di `signatureRequests`, pengguna juga menandatangani EIP-712 tersebut `SettleAuthorization` setelah hash burn diketahui; isi hash burn dan teruskan hasilnya sebagai `userSettleSig` pada panggilan berikutnya. Hanya rute CCTP token gas yang memilikinya. Rute Wormhole ETH, wrapper-intent USDC, dan Solana tidak memilikinya.
3. **Daftarkan transfernya.** `POST /v1/transfers` dengan quote lengkap dan `step1TxHash`, hash dari transaksi terakhir pada langkah pertama (burn). API memeriksa bahwa transaksi di chain sumber cocok dengan quote dan mengembalikan transfer `id`.
4. **Poll** `GET /v1/transfers/{id}` setiap beberapa detik sampai `hasil` adalah `selesai`. Pengguna kemudian didanai di Rome dan dapat memakai aplikasi Anda.

Rantai asal Solana mengikuti bentuk yang sama dengan langkah yang berbeda. Pengguna mengirim transfer SPL ke akun token pada akun Rome mereka. SOL masuk sebagai wrapped SOL setelah satu transfer itu. Pada chain yang token gas-nya USDC, seperti Hadrian, USDC memerlukan langkah kedua: transaksi Rome yang ditandatangani pengguna yang mengubah wrapper yang masuk menjadi gas native. Token SPL lain apa pun melalui `spl-solana-to-rome` rute, yang mengambil mint di `splAsset`.

### Keluarkan aset kembali

Bridging keluar bukanlah alur inbound yang dibalik. Ia memiliki lebih dari satu tanda tangan, dan pengguna menyelesaikannya di chain asal. Dapatkan quote-nya dengan `direction` disetel ke `from-rome`. `sourceChain` menamai sisi non-Rome dan `destinationChainId` memilih chain tempat pengguna melakukan klaim. Berikan keduanya: `destinationChainId` adalah yang menentukan chain klaim, dan quote tanpa itu akan default ke Ethereum Sepolia apa pun `sourceChain` yang dikatakan:

```bash
curl -X POST https://bridge-api.devnet.romeprotocol.xyz/v1/quote \\
  -H 'Content-Type: application/json' \\
  -d '{
    "asset": "USDC",
    "direction": "from-rome",
    "sourceChain": "eip155:84532",
    "destinationChainId": 84532,
    "romeChainId": "200010",
    "amount": "1000000",
    "sender": { "rome": "0xUSER" },
    "recipient": "0xUSER"
  }'
```

Untuk USDC melalui CCTP, quote mengembalikan dua langkah, dan pengguna menandatangani keduanya:

1. **Di Rome, dua transaksi secara berurutan.** Yang pertama memberikan `RomeBridgeWithdraw` hak delegate atas wUSDC pengguna di Solana (`approve_spl` ). Pemberian itu mencakup tepat jumlah burn ini, jadi quote selalu menyertakannya dan pengguna menandatanganinya sebelum setiap burn. Yang kedua membakar wUSDC melalui `RomeBridgeWithdraw`, yang memulai transfer CCTP. Daftarkan transfer dengan hash dari burn. Burn menggunakan wUSDC, token yang disebut quote sebagai `burnToken`, bukan USDC gas native. Dana yang masuk sebagai gas bukanlah yang dibakar, jadi untuk perjalanan pulang-pergi bawa USDC masuk dengan `intent: "wrapper"`.
2. **Di chain tujuan, klaim.** Poll `GET /v1/transfers/{id}` hingga langkah 2 `siap`. Ia kemudian membawa `pesan` dan `attestation`. Pengguna memanggil `receiveMessage(message, attestation)` pada message transmitter milik Circle di chain tujuan (quote menamai transmitter dan domain CCTP). Tidak ada yang disponsori di sini, jadi pengguna membutuhkan gas pada chain itu. Laporkan hash klaim dengan `POST /v1/transfers/{id}/steps/2`.

ETH melalui Wormhole memiliki bentuk yang sama. Pengguna memberikan hak delegate yang sama atas wETH, membakar wETH di Rome, dan menunggu para guardian Wormhole untuk menandatangani. Pengguna kemudian menebus di Ethereum dengan transaksi mereka sendiri: `completeTransferAndUnwrapETH` pada token bridge yang disebut quote (`claimTokenBridge`), menggunakan pesan yang ditandatangani (`vaa`) dari langkah 2.

Menarik ke alamat Solana tidak memiliki langkah klaim. USDC adalah satu transaksi Rome yang menarik ke akun Solana pengguna. SOL adalah satu langkah Rome dengan tiga transaksi: pemberian delegate yang sama atas wSOL, pembuatan opsional akun token wSOL penerima di Solana (dilewati jika sudah ada), dan withdraw melalui `RomeBridgeWithdraw`.

**Transfer outbound pertama memerlukan akun yang sudah diaktifkan.** Burn CCTP membuat akun pesan di Solana, dan akun pengguna di Rome harus memiliki cukup lamport untuk membayarnya. Dompet baru tidak memilikinya, jadi transfer outbound pertama gagal sampai pengguna melakukan aktivasi sekali. Pemeriksaannya adalah akun tersebut memiliki setidaknya 15.000.000 lamport. Baca dengan `account_lamports(bytes32)` pada CPI precompile di `0xff00000000000000000000000000000000000008`, dengan meneruskan akun external-auth pengguna di Solana (CLI melakukan pembacaan ini untuk Anda). Aktivasi memanggil `activate()` pada `SimpleActivator` kontrak yang tercantum di [registry](https://github.com/rome-protocol/rome-registry) untuk chain Anda, dan panggilan itu membawa pembayaran dalam token gas chain tersebut. Pada Hadrian itu adalah 2 USDC. CLI melakukan ini dengan `rome activate <chain>`, dan `rome bridge --to` berhenti dan memberi tahu Anda untuk menjalankannya jika akun belum siap. Cadangan itu mencakup satu burn, dan biaya sewa kembali setelah Circle mengesahkan burn, yang memakan waktu sekitar 30 menit. Burn kedua sebelum itu, atau akun yang sudah terkuras sejak diaktifkan, memerlukan `topUpUserPda(lamports)` pada kontrak yang sama, karena `activate()` revert setelah akun diaktifkan. `rome activate` memilih panggilan yang tepat. Transfer inbound tidak memerlukan aktivasi. Quote tidak menyertakan aktivasi sebagai langkah, jadi aplikasi Anda harus memeriksa akun dan menawarkannya sebelum quote outbound pertama.

## Baca kodenya

* [appia](https://github.com/rome-protocol/appia) — aplikasi from-home: pengguna membawa USDC dari chain asal mereka dan menggunakan DeFi di sisi Rome tanpa meninggalkannya.
* [rome-bridge-api](https://github.com/rome-protocol/rome-bridge-api) — orchestrator (quote → verify → sponsor).

## Berikutnya

* [Mendapatkan dana](/id/sumber-daya/faucets.md) — jalur bridge yang sama mendanai dompet dev baru.
* [Deploy Solidity](/id/panduan-pengembang/deploy-solidity.md) — tempatkan aplikasi Anda di Rome.


---

# 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/id/panduan-pengembang/from-home.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.
