
icRamp Devlog 12 — Milestone Submission: Solana P2P Onramping (SOL + BONK)
This post consolidates all evidence for the Solana Integration milestone: end-to-end demo (SOL + BONK), slides, deliverables checklist with proofs, tests, and canister URLs.
🎬 5-min Demo (YouTube)
Chapters
- 00:00–01:53 · Slides (architecture & scope)
- 01:53–02:57 · Offramper login (Solana) + existing SOL order + Profile/Balances
- 02:57–03:34 · Create SPL order (BONK)
- 03:34–04:16 · Onramper locks, pays on Solana, receives funds
- 04:16–04:50 · Tests (README + token registry example)
- 04:50–04:59 · Blog/devlogs wrap-up
🖼️ Slides (selected pictures)
✅ Deliverables Checklist (with proofs)
- Solana canister (key derivation, SOL/SPL tx, ATA, fees, tx lookup) — shown in demo + code refs
- SOL/SPL support in order system — shown in BONK flow
- Wallet connection (WalletConnect/Solflare/Metamask) — demo login
- Unified vault logic (BTC/EVM/SOL) — slides + demo creation/locking/completion
- Frontend updates (auth + orders) — Profile & Balances pages, Solana Orders
- Full tests + docs — below + devlogs
🧪 Tests
Run:
cargo test -p solana_tests -- --nocapture
Highlight: Token registry tests (SPL decimals, symbol/rate_symbol checks).
See tests/solana_tests/src/registry_tests.rs
and tests/README.md
.
🌐 Canisters & How to Run
- Frontend (mainnet) URL: sandbox.icramp.xyz
- Backends:
icramp_backend
,solana_backend
,bitcoin_backend
(wired by the frontend)
Local quickstart (devnet):
dfx deploy sol_rpc
dfx canister call sol_rpc updateApiKeys "(vec {
record { variant { AlchemyDevnet }; opt \"$SOL_ALCHEMY_KEY\" };
record { variant { AnkrDevnet }; opt \"$SOL_ANKR_KEY\" };
})"
cargo build --release --target wasm32-unknown-unknown --package solana_backend
candid-extractor target/wasm32-unknown-unknown/release/solana_backend.wasm > backend/solana/solana_backend.did
dfx deploy solana_backend --argument "(
variant {
Reinstall = record {
sol_rpc_canister_id = opt principal \"tghme-zyaaa-aaaar-qarca-cai\";
ed25519_key_name = variant { LocalDevelopment };
network = variant { Devnet };
proxy_url = \"https://icramp.info\";
}
}
)"
cargo build --release --target wasm32-unknown-unknown --package icramp_backend
candid-extractor target/wasm32-unknown-unknown/release/icramp_backend.wasm > backend/icramp/icramp_backend.did
# dfx_test_key, test_key_1
# api-m.paypal.com, api-m.sandbox.paypal.com
dfx deploy icramp_backend --argument "(
variant {
Reinstall = record {
canister_ids = record {
bitcoin_backend_id = \"zhuzm-wqaaa-aaaap-qpk2q-cai\";
solana_backend_id = \"u6s2n-gx777-77774-qaaba-cai\";
};
paypal = record {
client_id = \"${PAYPAL_CLIENT_ID}\";
client_secret = \"${PAYPAL_CLIENT_SECRET}\";
api_url = \"api-m.sandbox.paypal.com\";
};
...
}
)"
dfx canister call solana_backend register_tokens '(vec {
record { "FxoGGtuyjfVybdA3X5WgxzNhjvSN73R5zqPYg3on8hwE"; "KONG"; "KONG" };
record { "HbA6BgBmA3X6X8jtts5X2ZiJXXxZQKDbQR4s5XCD82pr"; "BONK"; "BONK"};
})'
dfx generate icramp_backend
dfx generate bitcoin_backend
dfx generate solana_backend
cd frontend && npm run build && cd .. && dfx deploy frontend --mode reinstall --yes
⚠️ Risks & Mitigations
- Devnet RPC volatility → retries & warm-up
- HTTPS outcalls/cycles → caching & consolidated calls
- ATA first-receive path → create-if-missing in same tx
📚 Devlogs
- #2 Solana Canister, Registry & Vault
- #3 icRamp ↔ Solana Integration
- #4 Frontend Deployment Setup
- #5 Frontend Solana Wallet Adapter
- #6 Frontend Solana Orders
- #7 Extra SPL Tokens
- #8-#11 Test Saga
Stay Updated
Get notified when I publish new articles about Web3 development, hackathon experiences, and cryptography insights.
You might also like

icRamp Devlog #2 — Solana Canister, Registry & Vault
Second Chain Fusion grant: building a Solana canister with safe token registry and a thin vault to coordinate escrow.

icRamp Devlog #6 — icRamp Orders with Solana
Everything is ready for us to create orders in the frontend containing solana and executing the full offramping flow.

icRamp Devlog #4 — icRamp frontend Deployment Setup with Solana
Third Chain Fusion grant log: wiring icRamp's core backend with the Solana canister, persisting canister IDs, and preparing escrow flows for SOL/SPL assets.