A simplified decentralized exchange (DEX) built on the blockchain, enabling users to swap tokens, manage liquidity, and track swap history in real-time with interactive charts.Empower your swaping experience with transparency and security.
Explore Demo โข Report Bug โข Request Feature
- ๐ Features
- ๐ ๏ธ Tech Stack
- ๐๏ธ Architecture
- ๐ Quick Start
- ๐ Smart Contract
- ๐ป Frontend
- ๐ Real-time Swap Tracking
- ๐งช Testing
- ๐ Deployment
- ๐ธ Screenshots
- ๐ฃ๏ธ Roadmap
- ๐ค Contributing
- ๐ License
- ๐ Acknowledgments
- ๐ฑ Swap tokens with ease
- ๐งAdd and remove liquidity
- ๐ Real-time price oracle integration
- ๐ Interactive swap history chart
- ๐ Secure and transparent transactions
- ๐ Cross-platform compatibility (Desktop & Mobile)
- ๐พ Local storage for persisting user swap history
- Solidity ^0.8.24
- Hardhat 2.22.5
- OpenZeppelin Contracts 5.0.2
- Chainlink Contracts
- Ethers.js 6.4.0
- React 18.3.1
- Vite 5.3.4
- TailwindCSS 3.4.6
- RainbowKit 2.1.3
- wagmi 2.12.2
- Recharts 2.12.7
- Chai
- Mocha
- Hardhat Network Helpers
- Solidity Coverage
easydex/
โโโ backend/
โ โโโ contracts/
โ โ โโโ DEX.sol
โ โ โโโ Token.sol
โ โ โโโ Oracle.sol
โ โโโ test/
โ โ โโโ DEX.test.js
โ โโโ scripts/
โ โ โโโ deploy.js
โ โโโ hardhat.config.js
โ โโโ package.json
โโโ frontend/
โ โโโ src/
โ โ โโโ components/
โ โ โโโ pages/
โ โ โโโ main.jsx
โ โโโ public/
โ โโโ package.json
โโโ README.md
Our DEX is powered by three main smart contracts:
DEX.sol
: The core exchange functionalityToken.sol
: ERC20 token implementationOracle.sol
: Price feed integration with Chainlink
function swap(uint256 _ethAmountIn, uint256 _tokenAmountIn) external payable;
function addLiquidity(uint256 ethAmount, uint256 tokenAmount) external payable;
function removeLiquidity(uint256 ethAmount, uint256 tokenAmount) external payable;
๐ View full contract on Etherscan
Our frontend provides an intuitive interface for seamless interaction with the DEX:
- ๐ Connect wallet using RainbowKit
- ๐ฑ Swap tokens with real-time price updates
- ๐ง Manage liquidity pools
- ๐ View exchange rates and pool statistics
- ๐ Interactive swap history chart with Recharts
- ๐ฑ Responsive design for optimal mobile and desktop experience
EasyDEX features a powerful real-time swap tracking system:
- ๐ Interactive line chart displaying swap history
- ๐พ Persistent storage using localStorage for each user
- ๐ Automatic updates after each swap transaction
- ๐ Detailed tooltips showing swap information
- ๐ Y-axis displays price in USD, X-axis shows swap count
- Responsive design that adapts to different screen sizes
- Custom styling with gradients and hover effects
- Tooltips with formatted currency display
- Legend for easy data interpretation
This feature provides users with valuable insights into their trading activity and market trends directly within the DApp interface.
- Clone the repository
git clone https://github.com/adelamare-blockchain/dApp_EASYDEX_DeFi-platform.git
- Install dependencies
cd backend && yarn
cd ../frontend && yarn
-
Set up environment variables (refer to
.env.example
in both directories) -
Run the development server
# Terminal 1: Backend
cd backend
yarn hardhat node
# Terminal 2: Backend
cd backend
yarn hardhat run scripts/deployTest.js --network localhost
# Terminal 3: Frontend
cd frontend
yarn dev
- Open
http://localhost:5173
in your browser
We've rigorously tested all functionalities using Hardhat. Run the test suite:
cd backend
yarn hardhat test
View Test Results
DEX.sol
Deployment
โ Should set the right token address and oracle
โ Should set the right owner for Oracle, Token and DEX contracts
โ Should have initial liquidity set to 0
Liquidity Management
โ Should add ETH liquidity
โ Should add token liquidity
โ Should remove ETH liquidity
โ Should remove token liquidity
โ Should revert if tokenAmount or ethAmount is zero or if both tokenAmount and ethAmount
โ Should revert if insufficient liquidity in the pool
โ Should allow addr1 to withdraw his removed ETH liquidity
Swapping
โ Should add sufficient token liquidity before swap
Exchange rate : 250 UTT/ETH
TOKEN amount out :
997.0 UTT | 9970 $USD
FEE : 3.0 UTT | 30 $USD
Eth LIQUIDITY :
14.0 ETH
Token LIQUIDITY :
1503.0 UTT | 15030 $USD
โ Should swap ETH for tokens and update liquidity
ETH amount out : 3.988 ETH | 9970 $USD
FEE : 0.012 ETH | 30 $USD
Eth LIQUIDITY : 6.012 ETH
Token LIQUIDITY : 3500.0 UTT | 35000 $USD
โ Should swap tokens for ETH and update liquidity
โ Should revert for a swap ETH for tokens with tokenAmount or ethAmount at zero
โ Should revert for a swap Tokens for ETH with both tokenAmount and ethAmount values
โ Should revert if both ETH and tokens are provided
โ Should revert if swap delay is superior to 1 minute
โ Should revert if swap amount is superior to the dex limit
Fees Management
โ Should allow owner to update the trading fee
โ Should fail to set fee above maximum
โ Should collect token fees on swaps
โ Should collect eth fees on swaps
Oracle.sol
Deployment
โ Should set the right owner
Get Price
โ Should return the latest price from Chainlink
Token.sol
Deployment
โ Should set the right owner
โ Should assign the total supply of tokens to the owner
โ Should set the max supply correctly
Minting
โ Should allow owner to mint tokens
โ Should not allow minting more than max supply
โ Should revert if non-owner tries to mint tokens
Burning
โ Should allow the owner to burn tokens
โ Should not allow burning more tokens than the owner's balance
ยท--------------------------------|---------------------------|-------------|-----------------------------ยท
| Solc version: 0.8.24 ยท Optimizer enabled: true ยท Runs: 200 ยท Block limit: 30000000 gas โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| Methods
โ
ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| Contract ยท Method ยท Min ยท Max ยท Avg ยท # calls ยท eur (avg) โ
ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| DEX ยท addLiquidity ยท 55473 ยท 108733 ยท 70133 ยท 10 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| DEX ยท removeLiquidity ยท 49877 ยท 56033 ยท 53981 ยท 6 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| DEX ยท setFee ยท - ยท - ยท 29750 ยท 2 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| DEX ยท swap ยท 77242 ยท 111442 ยท 107929 ยท 10 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| DEX ยท withdrawEth ยท - ยท - ยท 30981 ยท 1 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| DEX ยท withdrawFees ยท 33020 ยท 41944 ยท 37482 ยท 2 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| Token ยท approve ยท - ยท - ยท 46406 ยท 8 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| Token ยท burn ยท - ยท - ยท 36219 ยท 1 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| Token ยท transfer ยท 51610 ยท 51622 ยท 51616 ยท 2 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| Deployments ยท ยท % of limit ยท โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| DEX ยท - ยท - ยท 1788584 ยท 6 % ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| MockAggregatorV3 ยท - ยท - ยท 131616 ยท 0.4 % ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| Token ยท - ยท - ยท 830533 ยท 2.8 % ยท - โ
ยท--------------------------------|-------------|-------------|-------------|---------------|-------------ยท
32 passing (2s)
Done in 5.69s.
- Deploy the smart contract
cd backend
yarn hardhat run scripts/deploy.js --network sepolia
-
Get automatically the contract addresses & ABIs in
frontend/src/constants/contractInfo.jsx
-
Build and deploy the frontend
cd frontend
yarn build
# Deploy the 'dist' directory to your preferred hosting service
- Implement multi-token support
- Add yield farming capabilities
- Integrate with additional oracle providers
- Implement governance features
- Enhance swap history analytics with more metrics and visualizations
- Add export functionality for swap history data
Contributions are welcome! Please check out our Contribution Guidelines for details on our code of conduct and the process for submitting pull requests.
This project is licensed under the MIT License. See the LICENSE file for details.
- OpenZeppelin for secure smart contract libraries
- Hardhat for Ethereum development environment
- Chainlink for reliable oracle data
- RainbowKit for wallet connection UI
- TailwindCSS for utility-first CSS framework