icRamp is a decentralized P2P platform for fiat and cryptocurrency transactions across multiple blockchains, including Bitcoin, Ethereum, and Internet Computer (ICP). It eliminates reliance on centralized exchanges by enabling secure and seamless onramping and offramping solutions with built-in Bitcoin Runes and Ordinals support.
Initiated in ETH Prague 2024, this project leverages multiple ICP canisters for enhanced functionality, including HTTPS outcalls, EVM RPC communication, and real-time exchange rate retrieval. For the associated EVM smart contracts used in the frontend and backend canisters, visit the icRamp-contracts repository. The platform now also enables seamless Bitcoin and Runes transactions through its integrated Bitcoin canister, added for Devcon’s ICP Hackerhouse.
With this Bitcoin integration, users can now create Bitcoin-based orders alongside Ethereum and other EVM-based assets. The Bitcoin canister uses ICP’s threshold ECDSA signatures for secure transactions, allowing users to securely lock and unlock BTC funds without requiring an external wallet. To learn more about the EVM smart contracts that power these functionalities, visit the icRamp-contracts repository.
-
P2P Onramping & Offramping: Users can trade fiat for crypto and vice versa in a decentralized manner.
-
Bitcoin Runes Integration: Seamlessly lock, unlock, and manage balances with Runes.
-
Multi-Chain NFT & Ordinals Marketplace: Trade Ethereum NFTs, Bitcoin Ordinals/Runes, and ICP NFTs.
-
Decentralized Governance: Future DAO-based governance for decision-making.
-
Multi-Wallet Authentication: Supports Internet Identity, Metamask, and Bitcoin wallets like Unisat.
-
Real-time Exchange Rates: Integrates with external APIs for accurate pricing.
-
Secure Bitcoin Canister Integration: Robust handling of transactions and storage.
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_rate
method 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 server
Also, to deploy seamlessly with prepopulated init arguments:
./scripts/deploy/deploy_local.sh
And 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.json
reference 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.