├── README.md └── Lending.sol /README.md: -------------------------------------------------------------------------------- 1 | # Decentralized Lending Platform 💰 2 | A blockchain-powered lending and borrowing platform that eliminates intermediaries, enabling users to earn interest or borrow assets by providing collateral. 3 | 4 | ## 📌 Features 5 | - **Supply assets** and earn interest 6 | - **Borrow assets** with crypto collateral 7 | - **Dynamic interest rates** based on supply & demand 8 | - **Automated liquidation** to protect lenders 9 | - **Web3 wallet integration** (MetaMask, WalletConnect) 10 | 11 | ## 🔗 Project Structure 12 | /decentralized-lending-platform 13 | ├── contracts/ # Solidity smart contracts for lending & borrowing logic 14 | ├── scripts/ # Deployment and interaction scripts 15 | ├── frontend/ # Web-based UI for users 16 | ├── backend/ # API for querying blockchain data 17 | ├── test/ # Unit tests for smart contracts 18 | ├── README.md # Setup and usage guide 19 | ├── hardhat.config.js # Hardhat configuration file 20 | ├── package.json # Dependencies 21 | -------------------------------------------------------------------------------- /Lending.sol: -------------------------------------------------------------------------------- 1 | 2 | --- 3 | 4 | ### **Example Solidity Contract (`contracts/Lending.sol`)** 5 | ```solidity 6 | // SPDX-License-Identifier: MIT 7 | pragma solidity ^0.8.19; 8 | 9 | import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; 10 | import "@openzeppelin/contracts/access/Ownable.sol"; 11 | 12 | contract LendingPlatform is Ownable { 13 | struct Loan { 14 | address borrower; 15 | uint256 collateralAmount; 16 | uint256 borrowedAmount; 17 | uint256 interestRate; 18 | uint256 dueDate; 19 | bool isRepaid; 20 | } 21 | 22 | IERC20 public stablecoin; 23 | mapping(address => Loan) public loans; 24 | 25 | event LoanRequested(address indexed borrower, uint256 amount, uint256 collateral); 26 | event LoanRepaid(address indexed borrower, uint256 amount); 27 | 28 | constructor(address _stablecoin) { 29 | stablecoin = IERC20(_stablecoin); 30 | } 31 | 32 | function requestLoan(uint256 _borrowAmount, uint256 _collateralAmount, uint256 _interestRate) public { 33 | require(loans[msg.sender].borrowedAmount == 0, "Existing loan must be repaid first"); 34 | 35 | stablecoin.transferFrom(msg.sender, address(this), _collateralAmount); 36 | loans[msg.sender] = Loan(msg.sender, _collateralAmount, _borrowAmount, _interestRate, block.timestamp + 30 days, false); 37 | 38 | emit LoanRequested(msg.sender, _borrowAmount, _collateralAmount); 39 | } 40 | 41 | function repayLoan() public { 42 | Loan storage loan = loans[msg.sender]; 43 | require(loan.borrowedAmount > 0, "No active loan"); 44 | require(!loan.isRepaid, "Loan already repaid"); 45 | 46 | uint256 repaymentAmount = loan.borrowedAmount + (loan.borrowedAmount * loan.interestRate) / 100; 47 | stablecoin.transferFrom(msg.sender, address(this), repaymentAmount); 48 | 49 | loan.isRepaid = true; 50 | stablecoin.transfer(msg.sender, loan.collateralAmount); 51 | 52 | emit LoanRepaid(msg.sender, repaymentAmount); 53 | } 54 | } 55 | --------------------------------------------------------------------------------