icRamp is a fully trustless P2P on/off-ramp that works across Bitcoin, Ethereum, Solana, and the Internet Computer, allowing people worldwide to exchange fiat β crypto securely and without custodians.
It leverages the Internet Computerβs unique capabilities:
- HTTPS Outcalls β verify PayPal + Stripe payments trustlessly
- ic-alloy EVM RPC β query EVM smart contracts directly from canisters
- Deterministic Rust canisters β orchestrate cross-chain vault logic
- Threshold ECDSA β manage Bitcoin transactions
- Canister-based Solana RPC β sign transactions and verify SPL transfers
Built through 3 ICP Grants (EVM, Bitcoin, Solana + Payment Layer Overhaul).
- BTC (UTXO)
- ETH & EVM chains (ERC-20)
- Solana (SPL tokens)
- ICP (ICRC-1)
- PayPal
- Revolut
- Stripe Connect (destination charges, per-order success/cancel URLs)
- Email provider (credit card for stripe's counterparty)
- Partial Fills: onramper locks only part of the order
- Top-Ups: offramper adds more liquidity on demand
- Aggregate fills tracked over time
- Unified release logic across all chains
Users can settle orders using on-chain payment instead of Stripe/PayPal:
- BTC β BTC
- ETH β ERC20
- SOL β SPL token
- ICP β ICRC-1
Backend listeners verify chain-specific transactions and release funds accordingly.
βββββββββββββββββββββββ β Frontend (React) β ββββββββββββ¬βββββββββββ β βΌ βββββββββββββββββββββ ββββββββββββββββββββ β icramp_backend βββββΆβ HTTPS Outcalls β β (Rust canister) β β (PayPal, Stripe) β βββββββββββββββββββββ€ ββββββββββββββββββββ β Orders / Fills β β Payment Providers β β Multi-Chain Vault β ββββββββββββ¬βββββββββ β βΌ βββββββββββββββββββββββββββββββββββββ β On-Chain Listeners β βββββββββββββββββββββββββββββββββββββ€ β BTC β BTC RPC + T-ECDSA β β EVM β ic-alloy + RPC EVM Canister β β Solana β SPL transfer parser β β ICP β ICRC-1 ledger queries β βββββββββββββββββββββββββββββββββββββ
- Stripe Connect onboarding flow
- Redirect-survival logic
- Verified via HTTPS Outcalls
- Stored per-user provider
- Used for partial fills + top-ups
- Minimal Solidity vault contract
- Only
deposit / withdraw / release - Business logic moved to ICP
getDepositcalled via ic-alloy: ABI-free, typesafe, cheap
icRamp supports login and authentication with email, Internet Identity and Ethereum Walets such as Metamask.
The HTTPS Outcalls Canister enables secure HTTPS requests from ICP canisters, allowing for external data fetching and API interactions. It is used particularly to fetch order details from the Paypal API in order to verify the transactions.
The EVM RPC Canister is a smart contract on the ICP that communicates with Ethereum and other EVM blockchains. It provides an on-chain API for interacting with smart contracts and retrieving blockchain data. It is used to release the funds once the paypal payment is verified.
The Exchange Rate Canister retrieves and provides exchange rates for various assets. It uses an external API to fetch real-time exchange rates and serves this data to other canisters within the protocol. It is used to automatically fetch the best market price for the offramper order.
The Backend Canister handles the core business logic of the icRamp protocol. It manages orders, communicates with the EVM RPC canister for blockchain interactions with the escrow in different EVM blockchains, such as Mantle and Polygon, and verifies paypal payments using the HTTPS Outcalls canister.
The Frontend Canister provides a user-friendly interface for interacting with the icRamp protocol. Users can create and manage orders, view exchange rates, make payments and perform other related onramping and offramping operations.
-
Multi-Chain Interoperability: Bridges Bitcoin, Ethereum, and ICP.
-
Open-Source SDKs & Modules: Provides reusable smart contracts and APIs.
-
Educational Content: Blogs, tutorials, and documentation to onboard developers.
-
Open-source contributions to encourage adoption.
-
Workshops and hackathons to showcase icRamp.
-
Expanding to Solana and additional fiat onramping solutions.
To build the canisters, use the following command:
dfx build- Call the
get_usd_exchange_ratemethod to retrieve the exchange rate for a given asset:
dfx canister call backend get_usd_exchange_rate '( "ETH" )'- Retrieve and verify a paypal order using the backend canister:
dfx canister call backend verify_transaction '( "0", transaction_id = "4UC03319AV493141A" )'Run the following commands in a new, empty project directory:
git clone https://github.com/reymom/ic2P2ramp.git
cd ic2P2ramp
dfx start --clean --background
npm install
npm run setup # Install packages, deploy canisters, and generate type bindings
npm start # Start the development serverAlso, to deploy seamlessly with prepopulated init arguments:
./scripts/deploy/deploy_local.shAnd for updates, check different argument options in:
./scripts/update.sh- Internet Computer docs
- Internet Computer wiki
- Internet Computer forum
- Vite developer docs
- React quick start guide
dfx.jsonreference schema- Rust developer docs
- EVM RPC developer docs
- Bitcoin developer docs
- Developer Experience Feedback Board
This project is licensed under the MIT license, see LICENSE.md for details. See CONTRIBUTE.md for details about how to contribute to this project.














