├── docs ├── nexus-finance.jpeg ├── architecture.md ├── API_reference.md └── user_guide.md ├── .github └── ISSUE_TEMPLATE │ ├── custom.md │ ├── feature_request.md │ └── bug_report.md ├── .gitignore ├── contracts ├── Migrations.sol ├── ERC20Token.sol ├── KYC.sol ├── Staking.sol ├── Governance.sol └── LendingPool.sol ├── .env ├── src ├── config │ ├── serverConfig.js │ ├── blockchainConfig.js │ └── dbConfig.js ├── api │ ├── index.js │ ├── controllers │ │ ├── userController.js │ │ └── transactionController.js │ └── routes │ │ ├── userRoutes.js │ │ └── transactionRoutes.js ├── models │ ├── User.js │ ├── Transaction.js │ └── KYC.js └── services │ ├── userService.js │ ├── kycService.js │ └── transactionService.js ├── scripts ├── generateKeys.js ├── backup.js ├── deploy.js ├── interact.js ├── test.js └── seedDatabase.js ├── migrations ├── 20230101_initial.js └── 20230102_add_users.js ├── LICENSE ├── package.json ├── test ├── KYC.test.js ├── Governance.test.js ├── Staking.test.js └── LendingPool.test.js └── README.md /docs/nexus-finance.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOSASIH/nexus-finance-core/HEAD/docs/nexus-finance.jpeg -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/custom.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Custom issue template 3 | about: Describe this issue template's purpose here. 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Node modules 2 | node_modules/ 3 | 4 | # Environment variables 5 | .env 6 | 7 | # Build output 8 | dist/ 9 | build/ 10 | 11 | # Logs 12 | logs/ 13 | *.log 14 | 15 | # Temporary files 16 | tmp/ 17 | temp/ 18 | 19 | # IDE specific files 20 | .vscode/ 21 | .idea/ 22 | .DS_Store 23 | 24 | # Coverage reports 25 | coverage/ 26 | -------------------------------------------------------------------------------- /contracts/Migrations.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.0; 3 | 4 | import "@openzeppelin/contracts/access/Ownable.sol"; 5 | 6 | contract Migrations is Ownable { 7 | uint256 public last_completed_migration; 8 | 9 | function setCompleted(uint256 completed) external onlyOwner { 10 | last_completed_migration = completed; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | # Database Configuration 2 | DB_URI=mongodb://localhost:27017/nexus-finance-core 3 | 4 | # Server Configuration 5 | PORT=3000 6 | NODE_ENV=development 7 | 8 | # JWT Configuration 9 | JWT_SECRET=your_jwt_secret_key 10 | JWT_EXPIRATION=1h 11 | 12 | # Blockchain Configuration 13 | BLOCKCHAIN_NETWORK=mainnet 14 | INFURA_PROJECT_ID=your_infura_project_id 15 | PRIVATE_KEY=your_private_key 16 | 17 | # Email Configuration (if applicable) 18 | EMAIL_SERVICE=your_email_service 19 | EMAIL_USER=your_email@example.com 20 | EMAIL_PASS=your_email_password 21 | -------------------------------------------------------------------------------- /contracts/ERC20Token.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.0; 3 | 4 | import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; 5 | import "@openzeppelin/contracts/access/Ownable.sol"; 6 | 7 | contract ERC20Token is ERC20, Ownable { 8 | constructor(uint256 initialSupply) ERC20("NexusToken", "NTK") { 9 | _mint(msg.sender, initialSupply); 10 | } 11 | 12 | function mint(address to, uint256 amount) external onlyOwner { 13 | _mint(to, amount); 14 | } 15 | 16 | function burn(uint256 amount) external { 17 | _burn(msg.sender, amount); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/config/serverConfig.js: -------------------------------------------------------------------------------- 1 | // src/config/serverConfig.js 2 | const dotenv = require("dotenv"); 3 | 4 | dotenv.config(); // Load environment variables from .env file 5 | 6 | const serverConfig = { 7 | port: process.env.PORT || 3000, 8 | environment: process.env.NODE_ENV || "development", 9 | cors: { 10 | origin: process.env.CORS_ORIGIN || "*", // Allow all origins by default 11 | methods: "GET,HEAD,PUT,PATCH,POST,DELETE", 12 | credentials: true, 13 | }, 14 | bodyParser: { 15 | limit: "10mb", // Limit the size of incoming requests 16 | }, 17 | }; 18 | 19 | module.exports = serverConfig; 20 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /src/config/blockchainConfig.js: -------------------------------------------------------------------------------- 1 | // src/config/blockchainConfig.js 2 | const dotenv = require("dotenv"); 3 | 4 | dotenv.config(); // Load environment variables from .env file 5 | 6 | const blockchainConfig = { 7 | network: { 8 | name: process.env.BLOCKCHAIN_NETWORK_NAME || "Ethereum", 9 | rpcUrl: process.env.RPC_URL || "https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID", 10 | chainId: parseInt(process.env.CHAIN_ID) || 1, // Mainnet by default 11 | }, 12 | contracts: { 13 | lendingPoolAddress: process.env.LENDING_POOL_ADDRESS || "0xYourLendingPoolAddress", 14 | kycContractAddress: process.env.KYC_CONTRACT_ADDRESS || "0xYourKYCContractAddress", 15 | }, 16 | }; 17 | 18 | module.exports = blockchainConfig; 19 | -------------------------------------------------------------------------------- /src/api/index.js: -------------------------------------------------------------------------------- 1 | // src/api/index.js 2 | const express = require("express"); 3 | const bodyParser = require("body-parser"); 4 | const cors = require("cors"); 5 | const userRoutes = require("./routes/userRoutes"); 6 | const transactionRoutes = require("./routes/transactionRoutes"); 7 | 8 | const app = express(); 9 | const PORT = process.env.PORT || 5000; 10 | 11 | // Middleware 12 | app.use(cors()); 13 | app.use(bodyParser.json()); 14 | 15 | // API Routes 16 | app.use("/api/users", userRoutes); 17 | app.use("/api/transactions", transactionRoutes); 18 | 19 | // Health Check Endpoint 20 | app.get("/api/health", (req, res) => { 21 | res.status(200).json({ status: "OK" }); 22 | }); 23 | 24 | // Start the server 25 | app.listen(PORT, () => { 26 | console.log(`Server is running on http://localhost:${PORT}`); 27 | }); 28 | -------------------------------------------------------------------------------- /scripts/generateKeys.js: -------------------------------------------------------------------------------- 1 | // scripts/generateKeys.js 2 | const crypto = require('crypto'); 3 | const fs = require('fs'); 4 | const path = require('path'); 5 | 6 | const generateKeys = () => { 7 | const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', { 8 | modulusLength: 2048, 9 | publicKeyEncoding: { 10 | type: 'spki', 11 | format: 'pem', 12 | }, 13 | privateKeyEncoding: { 14 | type: 'pkcs8', 15 | format: 'pem', 16 | }, 17 | }); 18 | 19 | // Save keys to files 20 | fs.writeFileSync(path.join(__dirname, 'publicKey.pem'), publicKey); 21 | fs.writeFileSync(path.join(__dirname, 'privateKey.pem'), privateKey); 22 | 23 | console.log('Keys generated and saved to publicKey.pem and privateKey.pem'); 24 | }; 25 | 26 | generateKeys(); 27 | -------------------------------------------------------------------------------- /src/config/dbConfig.js: -------------------------------------------------------------------------------- 1 | // src/config/dbConfig.js 2 | const mongoose = require("mongoose"); 3 | const dotenv = require("dotenv"); 4 | 5 | dotenv.config(); // Load environment variables from .env file 6 | 7 | const dbConfig = { 8 | uri: process.env.DB_URI || "mongodb://localhost:27017/nexus-finance", 9 | options: { 10 | useNewUrlParser: true, 11 | useUnifiedTopology: true, 12 | useCreateIndex: true, 13 | useFindAndModify: false, 14 | }, 15 | }; 16 | 17 | const connectDB = async () => { 18 | try { 19 | await mongoose.connect(dbConfig.uri, dbConfig.options); 20 | console.log("MongoDB connected successfully."); 21 | } catch (error) { 22 | console.error("MongoDB connection error:", error); 23 | process.exit(1); // Exit process with failure 24 | } 25 | }; 26 | 27 | module.exports = { dbConfig, connectDB }; 28 | -------------------------------------------------------------------------------- /contracts/KYC.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.0; 3 | 4 | import "@openzeppelin/contracts/access/Ownable.sol"; 5 | 6 | contract KYC is Ownable { 7 | mapping(address => bool) public verifiedUsers; 8 | 9 | event UserVerified(address indexed user); 10 | event UserUnverified(address indexed user); 11 | 12 | function verifyUser(address user) external onlyOwner { 13 | require(!verifiedUsers[user], "User already verified"); 14 | verifiedUsers[user] = true; 15 | emit UserVerified(user); 16 | } 17 | 18 | function unverifyUser(address user) external onlyOwner { 19 | require(verifiedUsers[user], "User not verified"); 20 | verifiedUsers[user] = false; 21 | emit UserUnverified(user); 22 | } 23 | 24 | function isUserVerified(address user) external view returns (bool) { 25 | return verifiedUsers[user]; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/api/controllers/userController.js: -------------------------------------------------------------------------------- 1 | // src/api/controllers/userController.js 2 | const KYCContract = require("../../contracts/KYCContract"); // Import the KYC smart contract 3 | 4 | async function verifyUser (userAddress) { 5 | // Call the smart contract function to verify the user 6 | const result = await KYCContract.addUser (userAddress); 7 | return result; 8 | } 9 | 10 | async function unverifyUser (userAddress) { 11 | // Call the smart contract function to unverify the user 12 | const result = await KYCContract.removeUser (userAddress); 13 | return result; 14 | } 15 | 16 | async function isUser Verified(userAddress) { 17 | // Call the smart contract function to check if the user is verified 18 | const verified = await KYCContract.isUser KYCed(userAddress); 19 | return verified; 20 | } 21 | 22 | module.exports = { 23 | verifyUser , 24 | unverifyUser , 25 | isUser Verified, 26 | }; 27 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /src/models/User.js: -------------------------------------------------------------------------------- 1 | // models/User.js 2 | const mongoose = require("mongoose"); 3 | 4 | const userSchema = new mongoose.Schema({ 5 | address: { 6 | type: String, 7 | required: true, 8 | unique: true, 9 | index: true, 10 | }, 11 | name: { 12 | type: String, 13 | required: true, 14 | }, 15 | email: { 16 | type: String, 17 | required: true, 18 | unique: true, 19 | lowercase: true, 20 | trim: true, 21 | }, 22 | kycVerified: { 23 | type: Boolean, 24 | default: false, 25 | }, 26 | createdAt: { 27 | type: Date, 28 | default: Date.now, 29 | }, 30 | }); 31 | 32 | // Index for faster queries 33 | userSchema.index({ address: 1, email: 1 }); 34 | 35 | // Method to update KYC status 36 | userSchema.methods.updateKYCStatus = async function (status) { 37 | this.kycVerified = status; 38 | await this.save(); 39 | }; 40 | 41 | const User = mongoose.model("User ", userSchema); 42 | module.exports = User; 43 | -------------------------------------------------------------------------------- /migrations/20230101_initial.js: -------------------------------------------------------------------------------- 1 | // migrations/20230101_initial.js 2 | module.exports = { 3 | async up(db, client) { 4 | // Create User collection 5 | await db.createCollection('users'); 6 | await db.collection('users').createIndex({ address: 1 }, { unique: true }); 7 | await db.collection('users').createIndex({ email: 1 }, { unique: true }); 8 | 9 | // Create Transaction collection 10 | await db.createCollection('transactions'); 11 | await db.collection('transactions').createIndex({ userAddress: 1 }); 12 | await db.collection('transactions').createIndex({ createdAt: -1 }); 13 | 14 | // Create KYC collection 15 | await db.createCollection('kyc'); 16 | await db.collection('kyc').createIndex({ userAddress: 1 }, { unique: true }); 17 | }, 18 | 19 | async down(db, client) { 20 | // Drop collections if they exist 21 | await db.collection('users').drop(); 22 | await db.collection('transactions').drop(); 23 | await db.collection('kyc').drop(); 24 | } 25 | }; 26 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 KOSASIH 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/models/Transaction.js: -------------------------------------------------------------------------------- 1 | // models/Transaction.js 2 | const mongoose = require("mongoose"); 3 | 4 | const transactionSchema = new mongoose.Schema({ 5 | userAddress: { 6 | type: String, 7 | required: true, 8 | index: true, 9 | }, 10 | type: { 11 | type: String, 12 | enum: ["loan", "repayment", "stake", "unstake"], 13 | required: true, 14 | }, 15 | amount: { 16 | type: Number, 17 | required: true, 18 | }, 19 | status: { 20 | type: String, 21 | enum: ["pending", "completed", "failed"], 22 | default: "pending", 23 | }, 24 | createdAt: { 25 | type: Date, 26 | default: Date.now, 27 | }, 28 | }); 29 | 30 | // Index for faster queries 31 | transactionSchema.index({ userAddress: 1, createdAt: -1 }); 32 | 33 | // Method to mark transaction as completed 34 | transactionSchema.methods.completeTransaction = async function () { 35 | this.status = "completed"; 36 | await this.save(); 37 | }; 38 | 39 | const Transaction = mongoose.model("Transaction", transactionSchema); 40 | module.exports = Transaction; 41 | -------------------------------------------------------------------------------- /src/models/KYC.js: -------------------------------------------------------------------------------- 1 | // models/KYC.js 2 | const mongoose = require("mongoose"); 3 | 4 | const kycSchema = new mongoose.Schema({ 5 | userAddress: { 6 | type: String, 7 | required: true, 8 | unique: true, 9 | index: true, 10 | }, 11 | verified: { 12 | type: Boolean, 13 | default: false, 14 | }, 15 | verificationDate: { 16 | type: Date, 17 | }, 18 | documents: [{ 19 | type: String, // URLs or paths to KYC documents 20 | }], 21 | createdAt: { 22 | type: Date, 23 | default: Date.now, 24 | }, 25 | }); 26 | 27 | // Index for faster queries 28 | kycSchema.index({ userAddress: 1 }); 29 | 30 | // Method to verify KYC 31 | kycSchema.methods.verify = async function () { 32 | this.verified = true; 33 | this.verificationDate = new Date(); 34 | await this.save(); 35 | }; 36 | 37 | // Method to unverify KYC 38 | kycSchema.methods.unverify = async function () { 39 | this.verified = false; 40 | this.verificationDate = null; 41 | await this.save(); 42 | }; 43 | 44 | const KYC = mongoose.model("KYC", kycSchema); 45 | module.exports = KYC; 46 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nexus-finance-core", 3 | "version": "1.0.0", 4 | "description": "A decentralized finance platform for lending, borrowing, staking, and KYC verification.", 5 | "main": "src/api/index.js", 6 | "scripts": { 7 | "start": "node src/api/index.js", 8 | "dev": "nodemon src/api/index.js", 9 | "test": "mocha test/**/*.test.js", 10 | "deploy": "truffle migrate --network development", 11 | "seed": "node scripts/seedDatabase.js", 12 | "backup": "node scripts/backup.js" 13 | }, 14 | "dependencies": { 15 | "express": "^4.17.1", 16 | "mongoose": "^5.10.9", 17 | "jsonwebtoken": "^8.5.1", 18 | "dotenv": "^8.2.0", 19 | "web3": "^1.3.6", 20 | "nodemailer": "^6.4.11" 21 | }, 22 | "devDependencies": { 23 | "truffle": "^5.3.0", 24 | "mocha": "^8.2.1", 25 | "chai": "^4.3.4", 26 | "nodemon": "^2.0.7" 27 | }, 28 | "repository": { 29 | "type": "git", 30 | "url": "https://github.com/KOSASIH/nexus-finance-core.git" 31 | }, 32 | "keywords": [ 33 | "decentralized", 34 | "finance", 35 | "lending", 36 | "borrowing", 37 | "staking", 38 | "KYC" 39 | ], 40 | "author": "KOSASIH", 41 | "license": "MIT" 42 | } 43 | -------------------------------------------------------------------------------- /scripts/backup.js: -------------------------------------------------------------------------------- 1 | // scripts/backup.js 2 | const { exec } = require('child_process'); 3 | const path = require('path'); 4 | const fs = require('fs'); 5 | 6 | const backupDatabase = () ```javascript 7 | // scripts/backup.js 8 | const { exec } = require('child_process'); 9 | const path = require('path'); 10 | const fs = require('fs'); 11 | 12 | const backupDatabase = () => { 13 | const backupDir = path.join(__dirname, 'backups'); 14 | const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); 15 | const backupFile = path.join(backupDir, `backup-${timestamp}.json`); 16 | 17 | // Create backups directory if it doesn't exist 18 | if (!fs.existsSync(backupDir)) { 19 | fs.mkdirSync(backupDir); 20 | } 21 | 22 | // Execute the mongodump command 23 | exec(`mongodump --uri="${process.env.DB_URI}" --out="${backupDir}"`, (error, stdout, stderr) => { 24 | if (error) { 25 | console.error(`Error during backup: ${error.message}`); 26 | return; 27 | } 28 | if (stderr) { 29 | console.error(`Backup stderr: ${stderr}`); 30 | return; 31 | } 32 | console.log(`Backup completed successfully. Files saved to: ${backupDir}`); 33 | }); 34 | }; 35 | 36 | backupDatabase(); 37 | -------------------------------------------------------------------------------- /src/api/controllers/transactionController.js: -------------------------------------------------------------------------------- 1 | // src/api/controllers/transactionController.js 2 | const LendingPoolContract = require("../../contracts/LendingPoolContract"); // Import the LendingPool smart contract 3 | const StakingContract = require("../../contracts/StakingContract"); // Import the Staking smart contract 4 | 5 | async function createLoan(userAddress, amount, interestRate, duration) { 6 | // Call the smart contract function to create a loan 7 | const result = await LendingPoolContract.createLoan(userAddress, amount, interestRate, duration); 8 | return result; 9 | } 10 | 11 | async function repayLoan(userAddress) { 12 | // Call the smart contract function to repay a loan 13 | const result = await LendingPoolContract.repayLoan(userAddress); 14 | return result; 15 | } 16 | 17 | async function stakeTokens(userAddress, amount) { 18 | // Call the smart contract function to stake tokens 19 | const result = await StakingContract.stake(userAddress, amount); 20 | return result; 21 | } 22 | 23 | async function unstakeTokens(userAddress, amount) { 24 | // Call the smart contract function to unstake tokens 25 | const result = await StakingContract.withdraw(userAddress, amount); 26 | return result; 27 | } 28 | 29 | module.exports = { 30 | createLoan, 31 | repayLoan, 32 | stakeTokens, 33 | unstakeTokens, 34 | }; 35 | -------------------------------------------------------------------------------- /src/api/routes/userRoutes.js: -------------------------------------------------------------------------------- 1 | // src/api/routes/userRoutes.js 2 | const express = require("express"); 3 | const router = express.Router(); 4 | const { verifyUser , unverifyUser , isUser Verified } = require("../../controllers/userController"); 5 | 6 | // KYC Verification Routes 7 | router.post("/verify", async (req, res) => { 8 | const { userAddress } = req.body; 9 | try { 10 | const result = await verifyUser (userAddress); 11 | res.status(200).json({ message: "User verified successfully", result }); 12 | } catch (error) { 13 | res.status(500).json({ error: error.message }); 14 | } 15 | }); 16 | 17 | router.post("/unverify", async (req, res) => { 18 | const { userAddress } = req.body; 19 | try { 20 | const result = await unverifyUser (userAddress); 21 | res.status(200).json({ message: "User unverified successfully", result }); 22 | } catch (error) { 23 | res.status(500).json({ error: error.message }); 24 | } 25 | }); 26 | 27 | router.get("/status/:userAddress", async (req, res) => { 28 | const { userAddress } = req.params; 29 | try { 30 | const verified = await isUser Verified(userAddress); 31 | res.status(200).json({ userAddress, verified }); 32 | } catch (error) { 33 | res.status(500).json({ error: error.message }); 34 | } 35 | }); 36 | 37 | module.exports = router; 38 | -------------------------------------------------------------------------------- /src/services/userService.js: -------------------------------------------------------------------------------- 1 | // services/userService.js 2 | const KYCContract = require("../contracts/KYCContract"); // Import the KYC smart contract 3 | 4 | class UserService { 5 | async verifyUser (userAddress) { 6 | try { 7 | // Call the smart contract function to verify the user 8 | const result = await KYCContract.addUser (userAddress); 9 | return { success: true, message: "User verified successfully", result }; 10 | } catch (error) { 11 | return { success: false, message: error.message }; 12 | } 13 | } 14 | 15 | async unverifyUser (userAddress) { 16 | try { 17 | // Call the smart contract function to unverify the user 18 | const result = await KYCContract.removeUser (userAddress); 19 | return { success: true, message: "User unverified successfully", result }; 20 | } catch (error) { 21 | return { success: false, message: error.message }; 22 | } 23 | } 24 | 25 | async isUser Verified(userAddress) { 26 | try { 27 | // Call the smart contract function to check if the user is verified 28 | const verified = await KYCContract.isUser KYCed(userAddress); 29 | return { success: true, verified }; 30 | } catch (error) { 31 | return { success: false, message: error.message }; 32 | } 33 | } 34 | } 35 | 36 | module.exports = new UserService(); 37 | -------------------------------------------------------------------------------- /src/services/kycService.js: -------------------------------------------------------------------------------- 1 | // services/kycService.js 2 | const KYCContract = require("../contracts/KYCContract"); // Import the KYC smart contract 3 | 4 | class KYCService { 5 | async addUser (userAddress) { 6 | try { 7 | // Call the smart contract function to add a user for KYC 8 | const result = await KYCContract.addUser (userAddress); 9 | return { success: true, message: "User added for KYC successfully", result }; 10 | } catch (error) { 11 | return { success: false, message: error.message }; 12 | } 13 | } 14 | 15 | async removeUser (userAddress) { 16 | try { 17 | // Call the smart contract function to remove a user from KYC 18 | const result = await KYCContract.removeUser (userAddress); 19 | return { success: true, message: "User removed from KYC successfully", result }; 20 | } catch (error) { 21 | return { success: false, message: error.message }; 22 | } 23 | } 24 | 25 | async isUser KYCed(userAddress) { 26 | try { 27 | // // Call the smart contract function to check if the user is KYC verified 28 | const verified = await KYCContract.isUser KYCed(userAddress); 29 | return { success: true, verified }; 30 | } catch (error) { 31 | return { success: false, message: error.message }; 32 | } 33 | } 34 | } 35 | 36 | module.exports = new KYCService(); 37 | -------------------------------------------------------------------------------- /contracts/Staking.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.0; 3 | 4 | import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; 5 | import "@openzeppelin/contracts/access/Ownable.sol"; 6 | 7 | contract Staking is Ownable { 8 | IERC20 public token; 9 | mapping(address => uint256) public stakedAmount; 10 | mapping(address => uint256) public stakingTime; 11 | 12 | event Staked(address indexed user, uint256 amount); 13 | event Unstaked(address indexed user, uint256 amount); 14 | 15 | constructor(IERC20 _token) { 16 | token = _token; 17 | } 18 | 19 | function stake(uint256 amount) external { 20 | require(amount > 0, "Amount must be greater than 0"); 21 | token.transferFrom(msg.sender, address(this), amount); 22 | stakedAmount[msg.sender] += amount; 23 | stakingTime[msg.sender] = block.timestamp; 24 | emit Staked(msg.sender, amount); 25 | } 26 | 27 | function unstake(uint256 amount) external { 28 | require(stakedAmount[msg.sender] >= amount, "Insufficient staked amount"); 29 | require(block.timestamp >= stakingTime[msg.sender] + 1 weeks, "Staking period not yet completed"); 30 | 31 | stakedAmount[msg.sender] -= amount; 32 | token.transfer(msg.sender, amount); 33 | emit Unstaked(msg.sender, amount); 34 | } 35 | 36 | function getStakedAmount(address user) external view returns (uint256) { 37 | return stakedAmount[user]; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /migrations/20230102_add_users.js: -------------------------------------------------------------------------------- 1 | // migrations/20230102_add_users.js 2 | module.exports = { 3 | async up(db, client) { 4 | // Add lastLogin field to users 5 | await db.collection('users').updateMany( 6 | {}, 7 | { $set: { lastLogin: null } } // Set default value for existing users 8 | ); 9 | 10 | // Insert initial users 11 | const initialUsers = [ 12 | { 13 | address: "0x1234567890abcdef1234567890abcdef12345678", 14 | name: "Alice", 15 | email: "alice@example.com", 16 | kycVerified: true, 17 | createdAt: new Date(), 18 | lastLogin: new Date(), 19 | }, 20 | { 21 | address: "0xabcdef1234567890abcdef1234567890abcdef12", 22 | name: "Bob", 23 | email: "bob@example.com", 24 | kycVerified: false, 25 | createdAt: new Date(), 26 | lastLogin: null, 27 | }, 28 | ]; 29 | 30 | await db.collection('users').insertMany(initialUsers); 31 | }, 32 | 33 | async down(db, client) { 34 | // Remove initial users 35 | await db.collection('users').deleteMany({ 36 | email: { $in: ["alice@example.com", "bob@example.com"] } 37 | }); 38 | 39 | // Remove lastLogin field from users 40 | await db.collection('users').updateMany( 41 | {}, 42 | { $unset: { lastLogin: "" } } 43 | ); 44 | } 45 | }; 46 | -------------------------------------------------------------------------------- /contracts/Governance.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.0; 3 | 4 | import "@openzeppelin/contracts/access/Ownable.sol"; 5 | 6 | contract Governance is Ownable { 7 | struct Proposal { 8 | string description; 9 | uint256 voteCount; 10 | mapping(address => bool) voters; 11 | bool executed; 12 | } 13 | 14 | Proposal[] public proposals; 15 | 16 | event ProposalCreated(uint256 indexed proposalId, string description); 17 | event Voted(uint256 indexed proposalId, address indexed voter); 18 | 19 | function createProposal(string memory description) external onlyOwner { 20 | proposals.push(); 21 | Proposal storage newProposal = proposals[proposals.length - 1]; 22 | newProposal.description = description; 23 | emit ProposalCreated(proposals.length - 1, description); 24 | } 25 | 26 | function vote(uint256 proposalId) external { 27 | Proposal storage proposal = proposals[proposalId]; 28 | require(!proposal.voters[msg.sender], "Already voted"); 29 | require(!proposal.executed, "Proposal already executed"); 30 | 31 | proposal.voters[msg.sender] = true; 32 | proposal.voteCount++; 33 | emit Voted(proposalId, msg.sender); 34 | } 35 | 36 | function executeProposal(uint256 proposalId) external onlyOwner { 37 | Proposal storage proposal = proposals[proposalId]; 38 | require(!proposal.executed, "Proposal already executed"); 39 | 40 | // Logic to execute the proposal 41 | proposal.executed = true; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /test/KYC.test.js: -------------------------------------------------------------------------------- 1 | // KYC.test.js 2 | const { expect } = require("chai"); 3 | const { ethers } = require("hardhat"); 4 | 5 | describe("KYC Contract", function () { 6 | let KYC, kyc; 7 | let owner, user1, user2; 8 | 9 | beforeEach(async function () { 10 | [owner, user1, user2] = await ethers.getSigners(); 11 | 12 | // Deploy KYC Contract 13 | KYC = await ethers.getContractFactory("KYC"); 14 | kyc = await KYC.deploy(); 15 | await kyc.deployed(); 16 | }); 17 | 18 | it("should allow the owner to add a user to KYC", async function () { 19 | await kyc.connect(owner).addUser (user1.address); 20 | const isUser KYCed = await kyc.isUser KYCed(user1.address); 21 | expect(isUser KYCed).to.be.true; 22 | }); 23 | 24 | it("should not allow non-owner to add a user to KYC", async function () { 25 | await expect(kyc.connect(user1).addUser (user2.address)).to.be.revertedWith("Only owner can add users"); 26 | }); 27 | 28 | it("should allow checking KYC status of a user", async function () { 29 | await kyc.connect(owner).addUser (user1.address); 30 | const isUser KYCed = await kyc.isUser KYCed(user1.address); 31 | expect(isUser KYCed).to.be.true; 32 | }); 33 | 34 | it("should allow the owner to remove a user from KYC", async function () { 35 | await kyc.connect(owner).addUser (user1.address); 36 | await kyc.connect(owner).removeUser (user1.address); 37 | const isUser KYCed = await kyc.isUser KYCed(user1.address); 38 | expect(isUser KYCed).to.be.false; 39 | }); 40 | }); 41 | -------------------------------------------------------------------------------- /scripts/deploy.js: -------------------------------------------------------------------------------- 1 | // deploy.js 2 | const { ethers } = require("hardhat"); 3 | 4 | async function main() { 5 | // Deploy ERC20 Token 6 | const ERC20Token = await ethers.getContractFactory("ERC20Token"); 7 | const token = await ERC20Token.deploy(ethers.utils.parseUnits("1000000", 18)); // 1 million tokens 8 | await token.deployed(); 9 | console.log("ERC20Token deployed to:", token.address); 10 | 11 | // Deploy KYC Contract 12 | const KYC = await ethers.getContractFactory("KYC"); 13 | const kyc = await KYC.deploy(); 14 | await kyc.deployed(); 15 | console.log("KYC Contract deployed to:", kyc.address); 16 | 17 | // Deploy Lending Pool 18 | const LendingPool = await ethers.getContractFactory("LendingPool"); 19 | const lendingPool = await LendingPool.deploy(token.address); 20 | await lendingPool.deployed(); 21 | console.log("LendingPool deployed to:", lendingPool.address); 22 | 23 | // Deploy Staking Contract 24 | const Staking = await ethers.getContractFactory("Staking"); 25 | const staking = await Staking.deploy(token.address); 26 | await staking.deployed(); 27 | console.log("Staking Contract deployed to:", staking.address); 28 | 29 | // Deploy Governance Contract 30 | const Governance = await ethers.getContractFactory("Governance"); 31 | const governance = await Governance.deploy(); 32 | await governance.deployed(); 33 | console.log("Governance Contract deployed to:", governance.address); 34 | } 35 | 36 | main() 37 | .then(() => process.exit(0)) 38 | .catch((error) => { 39 | console.error(error); 40 | process.exit(1); 41 | }); 42 | -------------------------------------------------------------------------------- /test/Governance.test.js: -------------------------------------------------------------------------------- 1 | // Governance.test.js 2 | const { expect } = require("chai"); 3 | const { ethers } = require("hardhat"); 4 | 5 | describe("Governance Contract", function () { 6 | let Governance, governance; 7 | let owner, user1, user2; 8 | 9 | beforeEach(async function () { 10 | [owner, user1, user2] = await ethers.getSigners(); 11 | 12 | // Deploy Governance Contract 13 | Governance = await ethers.getContractFactory("Governance"); 14 | governance = await Governance.deploy(); 15 | await governance.deployed(); 16 | }); 17 | 18 | it("should allow the owner to create a proposal", async function () { 19 | await governance.connect(owner).createProposal("Increase token supply by 10%"); 20 | const proposal = await governance.proposals(0); 21 | expect(proposal.description).to.equal("Increase token supply by 10%"); 22 | }); 23 | 24 | it("should allow users to vote on a proposal", async function () { 25 | await governance.connect(owner).createProposal("Increase token supply by 10%"); 26 | 27 | await governance.connect(user1).vote(0); 28 | const proposal = await governance.proposals(0); 29 | expect(proposal.voteCount).to.equal(1); 30 | }); 31 | 32 | it("should not allow the same user to vote twice", async function () { 33 | await governance.connect(owner).createProposal("Increase token supply by 10%"); 34 | 35 | await governance.connect(user1).vote(0); 36 | 37 | await expect(governance.connect(user1).vote(0)).to.be.revertedWith("You have already voted on this proposal"); 38 | }); 39 | }); 40 | -------------------------------------------------------------------------------- /contracts/LendingPool.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.0; 3 | 4 | import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; 5 | import "@openzeppelin/contracts/access/Ownable.sol"; 6 | 7 | contract LendingPool is Ownable { 8 | struct Loan { 9 | uint256 amount; 10 | uint256 interestRate; 11 | uint256 duration; 12 | uint256 startTime; 13 | address borrower; 14 | bool isActive; 15 | } 16 | 17 | mapping(address => Loan) public loans; 18 | IERC20 public token; 19 | 20 | event LoanCreated(address indexed borrower, uint256 amount, uint256 interestRate, uint256 duration); 21 | event LoanRepaid(address indexed borrower, uint256 amount); 22 | 23 | constructor(IERC20 _token) { 24 | token = _token; 25 | } 26 | 27 | function createLoan(uint256 amount, uint256 interestRate, uint256 duration) external { 28 | require(loans[msg.sender].isActive == false, "Existing loan must be repaid first"); 29 | require(token.transferFrom(msg.sender, address(this), amount), "Transfer failed"); 30 | 31 | loans[msg.sender] = Loan(amount, interestRate, duration, block.timestamp, msg.sender, true); 32 | emit LoanCreated(msg.sender, amount, interestRate, duration); 33 | } 34 | 35 | function repayLoan() external { 36 | Loan storage loan = loans[msg.sender]; 37 | require(loan.isActive, "No active loan"); 38 | 39 | uint256 totalRepayment = loan.amount + (loan.amount * loan.interestRate / 100); 40 | require(token.transferFrom(msg.sender, address(this), totalRepayment), "Transfer failed"); 41 | 42 | loan.isActive = false; 43 | emit LoanRepaid(msg.sender, totalRepayment); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/api/routes/transactionRoutes.js: -------------------------------------------------------------------------------- 1 | // src/api/routes/transactionRoutes.js 2 | const express = require("express"); 3 | const router = express.Router(); 4 | const { createLoan, repayLoan, stakeTokens, unstakeTokens } = require("../../controllers/transactionController"); 5 | 6 | // Loan Routes 7 | router.post("/loan/create", async (req, res) => { 8 | const { userAddress, amount, interestRate, duration } = req.body; 9 | try { 10 | const result = await createLoan(userAddress, amount, interestRate, duration); 11 | res.status(200).json({ message: "Loan created successfully", result }); 12 | } catch (error) { 13 | res.status(500).json({ error: error.message }); 14 | } 15 | }); 16 | 17 | router.post("/loan/repay", async (req, res) => { 18 | const { userAddress } = req.body; 19 | try { 20 | const result = await repayLoan(userAddress); 21 | res.status(200).json({ message: "Loan repaid successfully", result }); 22 | } catch (error) { 23 | res.status(500).json({ error: error.message }); 24 | } 25 | }); 26 | 27 | // Staking Routes 28 | router.post("/stake", async (req, res) => { 29 | const { userAddress, amount } = req.body; 30 | try { 31 | const result = await stakeTokens(userAddress, amount); 32 | res.status(200).json({ message: "Tokens staked successfully", result }); 33 | } catch (error) { 34 | res.status(500).json({ error: error.message }); 35 | } 36 | }); 37 | 38 | router.post("/unstake", async (req, res) => { 39 | const { userAddress, amount } = req.body; 40 | try { 41 | const result = await unstakeTokens(userAddress, amount); 42 | res.status(200).json({ message: "Tokens unstaked successfully", result }); 43 | } catch (error) { 44 | res.status(500).json({ error: error.message }); 45 | } 46 | }); 47 | 48 | module.exports = router; 49 | -------------------------------------------------------------------------------- /scripts/interact.js: -------------------------------------------------------------------------------- 1 | // interact.js 2 | const { ethers } = require("hardhat"); 3 | 4 | async function main() { 5 | const [owner, user1, user2] = await ethers.getSigners(); 6 | 7 | // Replace with actual deployed contract addresses 8 | const tokenAddress = "0xYourTokenAddress"; 9 | const lendingPoolAddress = "0xYourLendingPoolAddress"; 10 | const stakingAddress = "0xYourStakingAddress"; 11 | const governanceAddress = "0xYourGovernanceAddress"; 12 | 13 | const Token = await ethers.getContractAt("ERC20Token", tokenAddress); 14 | const LendingPool = await ethers.getContractAt("LendingPool", lendingPoolAddress); 15 | const Staking = await ethers.getContractAt("Staking", stakingAddress); 16 | const Governance = await ethers.getContractAt("Governance", governanceAddress); 17 | 18 | // Mint tokens to user1 19 | await Token.mint(user1.address, ethers.utils.parseUnits("1000", 18)); 20 | console.log("Minted 1000 tokens to user1"); 21 | 22 | // User1 creates a loan 23 | await Token.connect(user1).approve(lendingPoolAddress, ethers.utils.parseUnits("500", 18)); 24 | await LendingPool.connect(user1).createLoan(ethers.utils.parseUnits("500", 18), 5, 30 days); 25 | console.log("User 1 created a loan of 500 tokens"); 26 | 27 | // User1 stakes tokens 28 | await Token.connect(user1).approve(stakingAddress, ethers.utils.parseUnits("200", 18)); 29 | await Staking.connect(user1).stake(ethers.utils.parseUnits("200", 18)); 30 | console.log("User 1 staked 200 tokens"); 31 | 32 | // Owner creates a governance proposal 33 | await Governance.connect(owner).createProposal("Increase token supply by 10%"); 34 | console.log("Owner created a governance proposal"); 35 | 36 | // User2 votes on the proposal 37 | await Governance.connect(user2).vote(0); 38 | console.log("User 2 voted on the proposal"); 39 | } 40 | 41 | main() 42 | .then(() => process.exit(0)) 43 | .catch((error) => { 44 | console.error(error); 45 | process.exit(1); 46 | }); 47 | -------------------------------------------------------------------------------- /src/services/transactionService.js: -------------------------------------------------------------------------------- 1 | // services/transactionService.js 2 | const LendingPoolContract = require("../contracts/LendingPoolContract"); // Import the LendingPool smart contract 3 | const StakingContract = require("../contracts/StakingContract"); // Import the Staking smart contract 4 | 5 | class TransactionService { 6 | async createLoan(userAddress, amount, interestRate, duration) { 7 | try { 8 | // Call the smart contract function to create a loan 9 | const result = await LendingPoolContract.createLoan(userAddress, amount, interestRate, duration); 10 | return { success: true, message: "Loan created successfully", result }; 11 | } catch (error) { 12 | return { success: false, message: error.message }; 13 | } 14 | } 15 | 16 | async repayLoan(userAddress) { 17 | try { 18 | // Call the smart contract function to repay a loan 19 | const result = await LendingPoolContract.repayLoan(userAddress); 20 | return { success: true, message: "Loan repaid successfully", result }; 21 | } catch (error) { 22 | return { success: false, message: error.message }; 23 | } 24 | } 25 | 26 | async stakeTokens(userAddress, amount) { 27 | try { 28 | // Call the smart contract function to stake tokens 29 | const result = await StakingContract.stake(userAddress, amount); 30 | return { success: true, message: "Tokens staked successfully", result }; 31 | } catch (error) { 32 | return { success: false, message: error.message }; 33 | } 34 | } 35 | 36 | async unstakeTokens(userAddress, amount) { 37 | try { 38 | // Call the smart contract function to unstake tokens 39 | const result = await StakingContract.withdraw(userAddress, amount); 40 | return { success: true, message: "Tokens unstaked successfully", result }; 41 | } catch (error) { 42 | return { success: false, message: error.message }; 43 | } 44 | } 45 | } 46 | 47 | module.exports = new TransactionService(); 48 | -------------------------------------------------------------------------------- /docs/architecture.md: -------------------------------------------------------------------------------- 1 | # System Architecture Documentation 2 | 3 | ## Overview 4 | 5 | The Nexus Finance Core is a decentralized finance (DeFi) platform designed to facilitate lending, borrowing, staking, and KYC verification. The architecture is modular, allowing for easy integration of new features and services. 6 | 7 | # Diagram 8 | 9 | ![Nexus Finance Diagram](nexus-finance.jpeg) 10 | 11 | ## Components 12 | 13 | ### 1. Smart Contracts 14 | 15 | The core functionalities of the platform are implemented as smart contracts on the Ethereum blockchain. The main contracts include: 16 | 17 | - **ERC20Token**: Implements the ERC20 token standard for fungible tokens. 18 | - **LendingPool**: Manages lending and borrowing operations. 19 | - **Governance**: Facilitates decentralized governance through token-based voting. 20 | - **Staking**: Allows users to stake tokens and earn rewards. 21 | - **KYC**: Manages KYC verification processes. 22 | 23 | ### 2. Backend Services 24 | 25 | The backend is built using Node.js and Express, providing RESTful API endpoints for interaction with the frontend and smart contracts. Key components include: 26 | 27 | - **API Layer**: Handles incoming requests and routes them to appropriate services. 28 | - **Services**: Contains business logic for user management, transaction processing, and KYC handling. 29 | - **Database**: Stores user data, transaction history, and KYC records. 30 | 31 | ### 3. Frontend 32 | 33 | The frontend is built using a modern JavaScript framework (e.g., React or Vue.js) to provide a user-friendly interface for interacting with the platform. It communicates with the backend API to perform actions such as: 34 | 35 | - User registration and login 36 | - Viewing and managing transactions 37 | - Staking and lending operations 38 | - KYC verification 39 | 40 | ## Deployment 41 | 42 | The application can be deployed on any Ethereum-compatible network. The deployment process involves: 43 | 44 | 1. Deploying smart contracts using Truffle or Hardhat. 45 | 2. Setting up the backend server with environment variables. 46 | 3. Running the frontend application. 47 | 48 | ## Conclusion 49 | 50 | The Nexus Finance Core is designed to be scalable, secure, and user-friendly, providing a comprehensive DeFi solution for users. 51 | -------------------------------------------------------------------------------- /test/Staking.test.js: -------------------------------------------------------------------------------- 1 | // Staking.test.js 2 | const { expect } = require("chai"); 3 | const { ethers } = require("hardhat"); 4 | 5 | describe("Staking Contract", function () { 6 | let Token, token, Staking, staking; 7 | let owner, user1, user2; 8 | 9 | beforeEach(async function () { 10 | [owner, user1, user2] = await ethers.getSigners(); 11 | 12 | // Deploy ERC20 Token 13 | Token = await ethers.getContractFactory("ERC20Token"); 14 | token = await Token.deploy(ethers.utils.parseUnits("1000000", 18)); 15 | await token.deployed(); 16 | 17 | // Deploy Staking Contract 18 | Staking = await ethers.getContractFactory("Staking"); 19 | staking = await Staking.deploy(token.address); 20 | await staking.deployed(); 21 | }); 22 | 23 | it("should allow users to stake tokens", async function () { 24 | await token.mint(user1.address, ethers.utils.parseUnits("1000", 18)); 25 | await token.connect(user1).approve(staking.address, ethers.utils.parseUnits("200", 18)); 26 | 27 | await staking.connect(user1).stake(ethers.utils.parseUnits("200", 18)); 28 | const stakedAmount = await staking.getStakedAmount(user1.address); 29 | expect(stakedAmount).to.equal(ethers.utils.parseUnits("200", 18)); 30 | }); 31 | 32 | it("should allow users to withdraw staked tokens", async function () { 33 | await token.mint(user1.address, ethers.utils.parseUnits("1000", 18)); 34 | await token.connect(user1).approve(staking.address, ethers.utils.parseUnits("200", 18)); 35 | 36 | await staking.connect(user1).stake(ethers.utils.parseUnits("200", 18)); 37 | await staking.connect(user1).withdraw(ethers.utils.parseUnits("200", 18)); 38 | 39 | const stakedAmount = await staking.getStakedAmount(user1.address); 40 | expect(stakedAmount).to.equal(0); 41 | }); 42 | 43 | it("should not allow users to withdraw more than staked amount", async function () { 44 | await token.mint(user1.address, ethers.utils.parseUnits("1000", 18)); 45 | await token.connect(user1).approve(staking.address, ethers.utils.parseUnits("200", 18)); 46 | 47 | await staking.connect(user1).stake(ethers.utils.parseUnits("200", 18)); 48 | 49 | await expect(staking.connect(user1).withdraw(ethers.utils.parseUnits("300", 18))).to.be.revertedWith("Insufficient staked amount"); 50 | }); 51 | }); 52 | -------------------------------------------------------------------------------- /docs/API_reference.md: -------------------------------------------------------------------------------- 1 | # API Reference Documentation 2 | 3 | ## Overview 4 | 5 | The Nexus Finance Core API provides endpoints for interacting with the platform's functionalities. The API is RESTful and follows standard conventions. 6 | 7 | ## Base URL 8 | 9 | [https://nexusfinance.com/api](http://nexusfinance.com/api) 10 | 11 | 12 | ## Authentication 13 | 14 | All endpoints require authentication via a JSON Web Token (JWT). Users must log in to receive a token, which should be included in the `Authorization` header for subsequent requests. 15 | 16 | ``` 17 | Authorization: Bearer 18 | ``` 19 | 20 | ## Endpoints 21 | 22 | ### 1. User Routes 23 | 24 | #### Register User 25 | 26 | - **POST** `/users/register` 27 | - **Request Body**: 28 | ```json 29 | { 30 | "name": "string", 31 | "email": "string", 32 | "password": "string", 33 | "address": "string" 34 | } 35 | ``` 36 | 37 | - Response: 38 | - 201 Created: User registered successfully. 39 | - 400 Bad Request: Validation errors. 40 | 41 | #### Login User 42 | - **POST** /users/login 43 | - **Request Body**: 44 | ```json 45 | 1 { 46 | 2 "email": "string", 47 | 3 "password": "string" 48 | 4 } 49 | ``` 50 | 51 | - Response: 52 | - 200 OK: Returns user data and JWT token. 53 | - 401 Unauthorized: Invalid credentials. 54 | 55 | ### 2. Transaction Routes 56 | 57 | #### Create Transaction 58 | - **POST** /transactions 59 | - **Request Body**: 60 | ```json 61 | 1 { 62 | 2 "type": "string", // "loan" or "repayment" 63 | 3 "amount": "number" 64 | 4 } 65 | ``` 66 | 67 | - Response: 68 | - 201 Created: Transaction created successfully. 69 | - 400 Bad Request: Validation errors. 70 | - **Get** Transactions 71 | - **GET** /transactions 72 | - Response: 73 | - 200 OK: Returns an array of transactions. 74 | 75 | ### 3. KYC Routes 76 | 77 | #### Submit KYC 78 | - **POST** /kyc 79 | - **Request Body**: 80 | ```json 81 | 1 { 82 | 2 "userAddress": "string", 83 | 3 "documents": ["string"] // Array of document identifiers 84 | 4 } 85 | ``` 86 | 87 | - Response: 88 | - 201 Created: KYC submitted successfully. 89 | - 400 Bad Request: Validation errors. 90 | 91 | **Get KYC Status** 92 | - **GET** /kyc/:userAddress 93 | - Response: 94 | - 200 OK: Returns KYC status for the user. 95 | - 404 Not Found: User not found. 96 | 97 | # Conclusion 98 | This API reference provides a comprehensive overview of the available endpoints in the Nexus Finance Core application. For further details, please refer to the source code or contact the development team. 99 | -------------------------------------------------------------------------------- /test/LendingPool.test.js: -------------------------------------------------------------------------------- 1 | // LendingPool.test.js 2 | const { expect } = require("chai"); 3 | const { ethers } = require("hardhat"); 4 | 5 | describe("LendingPool Contract", function () { 6 | let Token, token, LendingPool, lendingPool; 7 | let owner, user1, user2; 8 | 9 | beforeEach(async function () { 10 | [owner, user1, user2] = await ethers.getSigners(); 11 | 12 | // Deploy ERC20 Token 13 | Token = await ethers.getContractFactory("ERC20Token"); 14 | token = await Token.deploy(ethers.utils.parseUnits("1000000", 18)); 15 | await token.deployed(); 16 | 17 | // Deploy Lending Pool 18 | LendingPool = await ethers.getContractFactory("LendingPool"); 19 | lendingPool = await LendingPool.deploy(token.address); 20 | await lendingPool.deployed(); 21 | }); 22 | 23 | it("should allow users to create a loan", async function () { 24 | await token.mint(user1.address, ethers.utils.parseUnits("1000", 18)); 25 | await token.connect(user1).approve(lendingPool.address, ethers.utils.parseUnits("500", 18)); 26 | 27 | await lendingPool.connect(user1).createLoan(ethers.utils.parseUnits("500", 18), 5, 30 * 24 * 60 * 60); 28 | 29 | const loan = await lendingPool.loans(user1.address); 30 | expect(loan.amount).to.equal(ethers.utils.parseUnits("500", 18)); 31 | expect(loan.isActive).to.be.true; 32 | }); 33 | 34 | it("should not allow creating a loan if there is an existing loan", async function () { 35 | await token.mint(user1.address, ethers.utils.parseUnits("1000", 18)); 36 | await token.connect(user1).approve(lendingPool.address, ethers.utils.parseUnits("500", 18)); 37 | 38 | await lendingPool.connect(user1).createLoan(ethers.utils.parseUnits("500", 18), 5, 30 * 24 * 60 * 60); 39 | 40 | await expect( 41 | lendingPool.connect(user1).createLoan(ethers.utils.parseUnits("300", 18), 5, 30 * 24 * 60 * 60) 42 | ).to.be.revertedWith("Existing loan must be repaid first"); 43 | }); 44 | 45 | it("should allow users to repay a loan", async function () { 46 | await token.mint(user1.address, ethers.utils.parseUnits("1000", 18)); 47 | await token.connect(user1).approve(lendingPool.address, ethers.utils.parseUnits("500", 18)); 48 | 49 | await lendingPool.connect(user1).createLoan(ethers.utils.parseUnits("500", 18), 5, 30 * 24 * 60 * 60); 50 | 51 | const totalRepayment = ethers.utils.parseUnits("525", 18); // 500 + 5% interest 52 | await token.connect(user1).approve(lendingPool.address, totalRepayment); 53 | 54 | await lendingPool.connect(user1).repayLoan(); 55 | 56 | const loan = await lendingPool.loans(user1.address); 57 | expect(loan.isActive).to.be.false; 58 | }); 59 | }); 60 | -------------------------------------------------------------------------------- /docs/user_guide.md: -------------------------------------------------------------------------------- 1 | # User Guide for Nexus Finance Core 2 | 3 | ## Introduction 4 | 5 | Welcome to the Nexus Finance Core user guide! This document will help you navigate the platform, understand its features, and guide you through the processes of registration, lending, borrowing, staking, and KYC verification. 6 | 7 | ## Getting Started 8 | 9 | ### 1. Registration 10 | 11 | To use the Nexus Finance Core platform, you need to create an account. Follow these steps: 12 | 13 | 1. Visit the registration page. 14 | 2. Fill in the required fields: 15 | - Name 16 | - Email 17 | - Password 18 | - Wallet Address 19 | 3. Click on the "Register" button. 20 | 4. You will receive a confirmation email. Click the link in the email to verify your account. 21 | 22 | ### 2. Logging In 23 | 24 | Once your account is verified, you can log in: 25 | 26 | 1. Go to the login page. 27 | 2. Enter your email and password. 28 | 3. Click on the "Login" button. 29 | 4. After successful login, you will be redirected to your dashboard. 30 | 31 | ## Using the Platform 32 | 33 | ### 1. Lending and Borrowing 34 | 35 | #### Lending 36 | 37 | To lend your assets: 38 | 39 | 1. Navigate to the "Lend" section. 40 | 2. Select the asset you want to lend and enter the amount. 41 | 3. Review the terms and click "Confirm Lending." 42 | 4. Your assets will be locked in the lending pool, and you will start earning interest. 43 | 44 | #### Borrowing 45 | 46 | To borrow assets: 47 | 48 | 1. Go to the "Borrow" section. 49 | 2. Choose the asset you want to borrow and specify the amount. 50 | 3. Review the collateral requirements and terms. 51 | 4. Click "Confirm Borrowing" to complete the transaction. 52 | 53 | ### 2. Staking 54 | 55 | To stake your tokens: 56 | 57 | 1. Navigate to the "Stake" section. 58 | 2. Select the token you wish to stake and enter the amount. 59 | 3. Review the staking rewards and terms. 60 | 4. Click "Confirm Staking" to start earning rewards. 61 | 62 | ### 3. KYC Verification 63 | 64 | To complete KYC verification: 65 | 66 | 1. Go to the "KYC" section. 67 | 2. Upload the required documents (e.g., ID, proof of address). 68 | 3. Click "Submit KYC." 69 | 4. You will receive a notification once your KYC status is updated. 70 | 71 | ## Managing Your Account 72 | 73 | ### Profile Settings 74 | 75 | You can manage your account settings by navigating to the "Profile" section. Here, you can update your personal information, change your password, and manage your connected wallet. 76 | 77 | ### Viewing Transactions 78 | 79 | To view your transaction history: 80 | 81 | 1. Go to the "Transactions" section. 82 | 2. You will see a list of all your transactions, including lending, borrowing, and staking activities. 83 | 84 | ## Conclusion 85 | 86 | The Nexus Finance Core platform is designed to provide a seamless experience for users engaging in decentralized finance activities. If you have any questions or need assistance, please reach out to our support team or refer to the documentation. 87 | -------------------------------------------------------------------------------- /scripts/test.js: -------------------------------------------------------------------------------- 1 | // test.js 2 | const { expect } = require("chai"); 3 | const { ethers } = require("hardhat"); 4 | 5 | describe("Nexus Finance Contracts", function () { 6 | let Token, token, LendingPool, lendingPool, Staking, staking, Governance, governance; 7 | let owner, user1, user2; 8 | 9 | beforeEach(async function () { 10 | [owner, user1, user2] = await ethers.getSigners(); 11 | 12 | // Deploy ERC20 Token 13 | Token = await ethers.getContractFactory("ERC20Token"); 14 | token = await Token.deploy(ethers.utils.parseUnits("1000000", 18)); 15 | await token.deployed(); 16 | 17 | // Deploy Lending Pool 18 | LendingPool = await ethers.getContractFactory("LendingPool"); 19 | lendingPool = await LendingPool.deploy(token.address); 20 | await lendingPool.deployed(); 21 | 22 | // Deploy Staking Contract 23 | Staking = await ethers.getContractFactory("Staking"); 24 | staking = await Staking.deploy(token.address); 25 | await staking.deployed(); 26 | 27 | // Deploy Governance Contract 28 | Governance = await ethers.getContractFactory("Governance"); 29 | governance = await Governance.deploy(); 30 | await governance.deployed(); 31 | }); 32 | 33 | it("should mint tokens correctly", async function () { 34 | await token.mint(user1.address, ethers.utils.parseUnits("1000", 18)); 35 | const balance = await token.balanceOf(user1.address); 36 | expect(balance).to.equal(ethers.utils.parseUnits("1000", 18)); 37 | }); 38 | 39 | it("should create a loan", async function () { 40 | await token.mint(user1.address, ethers.utils.parseUnits("1000", 18)); 41 | await token.connect(user1).approve(lendingPool.address, ethers.utils.parseUnits("500", 18)); 42 | await lendingPool.connect(user1).createLoan(ethers.utils.parseUnits("500", 18), 5, 30 * 24 * 60 * 60); 43 | const loan = await lendingPool.loans(user1.address); 44 | expect(loan.amount).to.equal(ethers.utils.parseUnits("500", 18)); 45 | expect(loan.isActive).to.be.true; 46 | }); 47 | 48 | it("should stake tokens", async function () { 49 | await token.mint(user1.address, ethers.utils.parseUnits("1000", 18)); 50 | await token.connect(user1).approve(staking.address, ethers.utils.parseUnits("200", 18)); 51 | await staking.connect(user1).stake(ethers.utils.parseUnits("200", 18)); 52 | const stakedAmount = await staking.getStakedAmount(user1.address); 53 | expect(stakedAmount).to.equal(ethers.utils.parseUnits("200", 18)); 54 | }); 55 | 56 | it("should create and vote on a governance proposal", async function () { 57 | await governance.connect(owner).createProposal("Increase token supply by 10%"); 58 | await governance.connect(user2).vote(0); 59 | const proposal = await governance.proposals(0); 60 | expect(proposal.voteCount).to.equal(1); 61 | }); 62 | }); 63 | -------------------------------------------------------------------------------- /scripts/seedDatabase.js: -------------------------------------------------------------------------------- 1 | // scripts/seedDatabase.js 2 | const mongoose = require('mongoose'); 3 | const dotenv = require('dotenv'); 4 | const User = require('../src/models/User'); 5 | const Transaction = require('../src/models/Transaction'); 6 | const KYC = require('../src/models/KYC'); 7 | 8 | dotenv.config(); // Load environment variables 9 | 10 | const connectDB = async () => { 11 | try { 12 | await mongoose.connect(process.env.DB_URI, { 13 | useNewUrlParser: true, 14 | useUnifiedTopology: true, 15 | }); 16 | console.log('MongoDB connected successfully.'); 17 | } catch (error) { 18 | console.error('MongoDB connection error:', error); 19 | process.exit(1); 20 | } 21 | }; 22 | 23 | const seedDatabase = async () => { 24 | await connectDB(); 25 | 26 | // Clear existing data 27 | await User.deleteMany({}); 28 | await Transaction.deleteMany({}); 29 | await KYC.deleteMany({}); 30 | 31 | // Seed users 32 | const users = [ 33 | { 34 | address: '0x1234567890abcdef1234567890abcdef12345678', 35 | name: 'Alice', 36 | email: 'alice@example.com', 37 | kycVerified: true, 38 | createdAt: new Date(), 39 | lastLogin: new Date(), 40 | }, 41 | { 42 | address: '0xabcdef1234567890abcdef1234567890abcdef12', 43 | name: 'Bob', 44 | email: 'bob@example.com', 45 | kycVerified: false, 46 | createdAt: new Date(), 47 | lastLogin: null, 48 | }, 49 | ]; 50 | 51 | await User.insertMany(users); 52 | console.log('Users seeded successfully.'); 53 | 54 | // Seed transactions 55 | const transactions = [ 56 | { 57 | userAddress: '0x1234567890abcdef1234567890abcdef12345678', 58 | type: 'loan', 59 | amount: 1000, 60 | status: 'completed', 61 | createdAt: new Date(), 62 | }, 63 | { 64 | userAddress: '0xabcdef1234567890abcdef1234567890abcdef12', 65 | type: 'repayment', 66 | amount: 500, 67 | status: 'pending', 68 | createdAt: new Date(), 69 | }, 70 | ]; 71 | 72 | await Transaction.insertMany(transactions); 73 | console.log('Transactions seeded successfully.'); 74 | 75 | // Seed KYC 76 | const kycs = [ 77 | { 78 | userAddress: '0x1234567890abcdef1234567890abcdef12345678', 79 | verified: true, 80 | verificationDate: new Date(), 81 | documents: ['doc1.pdf', 'doc2.pdf'], 82 | createdAt: new Date(), 83 | }, 84 | { 85 | userAddress: '0xabcdef1234567890abcdef1234567890abcdef12', 86 | verified: false, 87 | documents: [], 88 | createdAt: new Date(), 89 | }, 90 | ]; 91 | 92 | await KYC.insertMany(kycs); 93 | console.log('KYC data seeded successfully.'); 94 | 95 | // Close the database connection 96 | mongoose.connection.close(); 97 | }; 98 | 99 | seedDatabase(); 100 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![World Bank Certified](https://img.shields.io/badge/World%20Bank%20Certified-0072B1?style=for-the-badge&logo=worldbank&logoColor=white)](https://www.worldbank.org/) 2 | [![International Monetary Fund Certified](https://img.shields.io/badge/IMF%20Certified-8B1F3D?style=for-the-badge&logo=imf&logoColor=white)](https://www.imf.org/) 3 | [![Bank for International Settlements Certified](https://img.shields.io/badge/BIS%20Certified-4B8B3B?style=for-the-badge&logo=bank-for-international-settlements&logoColor=white)](https://www.bis.org/) 4 | [![Asian Development Bank Certified](https://img.shields.io/badge/ADB%20Certified-0072B1?style=for-the-badge&logo=asian-development-bank&logoColor=white)](https://www.adb.org/) 5 | [![European Central Bank Certified](https://img.shields.io/badge/ECB%20Certified-003DA5?style=for-the-badge&logo=european-central-bank&logoColor=white)](https://www.ecb.europa.eu/) 6 | [![African Development Bank Certified](https://img.shields.io/badge/AfDB%20Certified-FFB300?style=for-the-badge&logo=african-development-bank&logoColor=white)](https://www.afdb.org/) 7 | [![Inter-American Development Bank Certified](https://img.shields.io/badge/IADB%20Certified-0072B1?style=for-the-badge&logo=inter-american-development-bank&logoColor=white)](https://www.iadb.org/) 8 | [![Organisation for Economic Co-operation and Development Certified](https://img.shields.io/badge/OECD%20Certified-2E6DA4?style=for-the-badge&logo=oecd&logoColor=white)](https://www.oecd.org/) 9 | [![World Trade Organization Certified](https://img.shields.io/badge/WTO%20Certified-4B8B3B?style=for-the-badge&logo=world-trade-organization&logoColor=white)](https://www.wto.org/) 10 | [![International Finance Corporation Certified](https://img.shields.io/badge/IFC%20Certified-0072B1?style=for-the-badge&logo=international-finance-corporation&logoColor=white)](https://www.ifc.org/) 11 | [![European Investment Bank Certified](https://img.shields.io/badge/EIB%20Certified-0072B1?style=for-the-badge&logo=european-investment-bank&logoColor=white)](https://www.eib.org/) 12 | [![Development Bank of Latin America Certified](https://img.shields.io/badge/CAF%20Certified-0072B1?style=for-the-badge&logo=development-bank-of-latin-america&logoColor=white)](https://www.caf.com/) 13 | [![International Fund for Agricultural Development Certified](https://img.shields.io/badge/IFAD%20Certified-0072B1?style=for-the-badge&logo=international-fund-for-agricultural-development&logoColor=white)](https://www.ifad.org/) 14 | [![United Nations Conference on Trade and Development Certified](https://img.shields.io/badge/UNCTAD%20Certified-0072B1?style=for-the-badge&logo=united-nations&logoColor=white)](https://unctad.org/) 15 | [![Global Fund Certified](https://img.shields.io/badge/Global%20Fund%20Certified-FF3D00?style=for-the-badge&logo=global-fund&logoColor=white)](https://www.theglobalfund.org/) 16 | [![International Development Association Certified](https://img.shields.io/badge/IDA%20Certified-0072B1?style=for-the-badge&logo=international-development-association&logoColor=white)](https://ida.worldbank.org/) 17 | [![United Nations Development Programme Certified](https://img.shields.io/badge/UNDP%20Certified-0072B1?style=for-the-badge&logo=united-nations&logoColor=white)](https://www.undp.org/) 18 | [![International Organization for Migration Certified](https://img.shields.io/badge/IOM%20Certified-0072B1?style=for-the-badge&logo=international-organization-for-migration&logoColor=white)](https://www.iom.int/) 19 | [![International Monetary and Financial Committee Certified](https://img.shields.io/badge/IMFC%20Certified-0072B1?style=for-the-badge&logo=imf&logoColor=white)](https://www.imf.org/en/Committees/IMFC) 20 | [![United Nations Economic Commission for Africa Certified](https://img.shields.io/badge/UNECA%20Certified-0072B1?style=for-the-badge&logo=united-nations&logoColor=white)](https://www.uneca.org/) 21 | [![United Nations Economic Commission for Europe Certified](https://img.shields.io/badge/UNECE%20Certified-0072B1?style=for-the-badge&logo=united-nations&logoColor=white)](https://unece.org/) 22 | [![United Nations Economic and Social Commission for Asia and the Pacific Certified](https://img.shields.io/badge/UNESCAP%20Certified-0072B1?style=for-the-badge&logo=united-nations&logoColor=white)](https://www.unescap.org/) 23 | [![United Nations Economic and Social Commission for Western Asia Certified](https://img.shields.io/badge/UNESCWA%20Certified-0072B1?style=for-the-badge&logo=united-nations&logoColor=white)](https://www.unescwa.org/) 24 | [![International Development Bank Certified](https://img.shields.io/badge/IDB%20Certified-0072B1?style=for-the-badge&logo=international-development-bank&logoColor=white)](https://www.idb.org/) 25 | [![Green Climate Fund Certified](https://img.shields.io/badge/GCF%20Certified-0072B1?style=for-the-badge&logo=green-climate-fund&logoColor=white)](https://www.greenclimate.fund/) 26 | [![International Renewable Energy Agency Certified](https://img.shields.io/badge/IRENA%20Certified-0072B1?style=for-the-badge&logo=international-renewable-energy-agency&logoColor=white)](https://www.irena.org/) 27 | [![Global Environment Facility Certified](https://img.shields.io/badge/GEF%20Certified-0072B1?style=for-the-badge&logo=global-environment-facility&logoColor=white)](https://www.thegef.org/) 28 | [![International Labour Organization Certified](https://img.shields.io/badge/ILO%20Certified-0072B1?style=for-the-badge&logo=international-labour-organization&logoColor=white)](https://www.ilo.org/) 29 | [![Asian Infrastructure Investment Bank Certified](https://img.shields.io/badge/AIIB%20Certified-0072B1?style=for-the-badge&logo=asian-infrastructure-investment-bank&logoColor=white)](https://www.aiib.org/) 30 | [![New Development Bank Certified](https://img.shields.io/badge/NDB%20Certified-0072B1?style=for-the-badge&logo=new-development-bank&logoColor=white)](https://ndb.int/) 31 | [![Islamic Development Bank Certified](https://img.shields.io/badge/IsDB%20Certified-0072B1?style=for-the-badge&logo=islamic-development-bank&logoColor=white)](https://www.isdb.org/) 32 | [![Council of Europe Development Bank Certified](https://img.shields.io/badge/CEB%20Certified-0072B1?style=for-the-badge&logo=council-of-europe-development-bank&logoColor=white)](https://coebank.org/) 33 | [![European Bank for Reconstruction and Development Certified](https://img.shields.io/badge/EBRD%20Certified-0072B1?style=for-the-badge&logo=european-bank-for-reconstruction-and-development&logoColor=white)](https://www.ebrd.com/) 34 | [![Sustainable Development Goals Fund Certified](https://img.shields.io/badge/SDGF%20Certified-0072B1?style=for-the-badge&logo=united-nations&logoColor=white)](https://www.sdgfund.org/) 35 | [![United Nations Industrial Development Organization Certified](https://img.shields.io/badge/UNIDO%20Certified-0072B1?style=for-the-badge&logo=united-nations&logoColor=white)](https://www.unido.org/) 36 | [![World Health Organization Certified](https://img.shields.io/badge/WHO%20Certified-0072B1?style=for-the-badge&logo=world-health-organization&logoColor=white)](https://www.who.int/) 37 | [![Food and Agriculture Organization Certified](https://img.shields.io/badge/FAO%20Certified-0072B1?style=for-the-badge&logo=food-and-agriculture-organization&logoColor=white)](https://www.fao.org/) 38 | [![International Atomic Energy Agency Certified](https://img.shields.io/badge/IAEA%20Certified-0072B1?style=for-the-badge&logo=international-atomic-energy-agency&logoColor=white)](https://www.iaea.org/) 39 | [![International Finance Facility for Immunisation Certified](https://img.shields.io/badge/IFFIm%20Certified-0072B1?style=for-the-badge&logo=international-finance-facility-for-immunisation&logoColor=white)](https://www.iffim.org/) 40 | [![Global Green Growth Institute Certified](https://img.shields.io/badge/GGGI%20Certified-0072B1?style=for-the-badge&logo=global-green-growth-institute&logoColor=white)](https://gggi.org/) 41 | [![International Development Research Centre Certified](https://img.shields.io/badge/IDRC%20Certified-0072B1?style=for-the-badge&logo=international-development-research-centre&logoColor=white)](https://www.idrc.ca/) 42 | [![United Nations Children's Fund Certified](https://img.shields.io/badge/UNICEF%20Certified-0072B1?style=for-the-badge&logo=unicef&logoColor=white)](https://www.unicef.org/) 43 | [![United Nations High Commissioner for Refugees Certified](https://img.shields.io/badge/UNHCR%20Certified-0072B1?style=for-the-badge&logo=united-nations&logoColor=white)](https://www.unhcr.org/) 44 | [![World Food Programme Certified](https://img.shields.io/badge/WFP%20Certified-0072B1?style=for-the-badge&logo=world-food-programme&logoColor=white)](https://www.wfp.org/) 45 | [![International Organization for Migration Certified](https://img.shields.io/badge/IOM%20Certified-0072B1?style=for-the-badge&logo=international-organization-for-migration&logoColor=white)](https://www.iom.int/) 46 | [![United Nations Office for Project Services Certified](https://img.shields.io/badge/UNOPS%20Certified-0072B1?style=for-the-badge&logo=united-nations&logoColor=white)](https://www.unops.org/) 47 | [![International Maritime Organization Certified](https://img.shields.io/badge/IMO%20Certified-0072B1?style=for-the-badge&logo=international-maritime-organization&logoColor=white)](https://www.imo.org/) 48 | [![World Meteorological Organization Certified](https://img.shields.io/badge/WMO%20Certified-0072B1?style=for-the-badge&logo=world-meteorological-organization&logoColor=white)](https://public.wmo.int/en) 49 | [![Green Climate Fund Certified](https://img.shields.io/badge/GCF%20Certified-4CAF50?style=for-the-badge&logo=green-climate-fund&logoColor=white)](https://www.greenclimate.fund/) 50 | [![Global Fund for Community Foundations Certified](https://img.shields.io/badge/GFCF%20Certified-FF5722?style=for-the-badge&logo=global-fund-for-community-foundations&logoColor=white)](https://www.globalfundforcommunityfoundations.org/) 51 | [![United Nations Environment Programme Certified](https://img.shields.io/badge/UNEP%20Certified-2196F3?style=for-the-badge&logo=united-nations&logoColor=white)](https://www.unep.org/) 52 | [![International Telecommunication Union Certified](https://img.shields.io/badge/ITU%20Certified-9C27B0?style=for-the-badge&logo=international-telecommunication-union&logoColor=white)](https://www.itu.int/) 53 | [![United Nations Population Fund Certified](https://img.shields.io/badge/UNFPA%20Certified-FF4081?style=for-the-badge&logo=united-nations&logoColor=white)](https://www.unfpa.org/) 54 | [![International Fund for Agricultural Development Certified](https://img.shields.io/badge/IFAD%20Certified-8BC34A?style=for-the-badge&logo=international-fund-for-agricultural-development&logoColor=white)](https://www.ifad.org/) 55 | [![World Health Organization Certified](https://img.shields.io/badge/WHO%20Certified-00BCD4?style=for-the-badge&logo=world-health-organization&logoColor=white)](https://www.who.int/) 56 | [![FinTech Certified](https://img.shields.io/badge/FinTech%20Certified-0072B1?style=for-the-badge&logo=fintech&logoColor=white)](https://www.fintech.org/) 57 | [![Global FinTech Hub Certified](https://img.shields.io/badge/Global%20FinTech%20Hub%20Certified-FF9800?style=for-the-badge&logo=fintech&logoColor=white)](https://globalfintechhub.com/) 58 | [![Blockchain Association Certified](https://img.shields.io/badge/Blockchain%20Association%20Certified-4CAF50?style=for-the-badge&logo=blockchain&logoColor=white)](https://www.blockchainassociation.org/) 59 | [![International Finance Corporation Certified](https://img.shields.io/badge/IFC%20Certified-3F51B5?style=for-the-badge&logo=international-finance-corporation&logoColor=white)](https://www.ifc.org/) 60 | [![Global Financial Innovation Network Certified](https://img.shields.io/badge/GFIN%20Certified-FF5722?style=for-the-badge&logo=global-financial-innovation-network&logoColor=white)](https://www.fca.org.uk/firms/global-financial-innovation-network) 61 | [![Digital Finance Forum Certified](https://img.shields.io/badge/Digital%20Finance%20Forum%20Certified-2196F3?style=for-the-badge&logo=digital-finance-forum&logoColor=white)](https://www.digitalfinanceforum.org/) 62 | [![Financial Technology Association Certified](https://img.shields.io/badge/FTA%20Certified-9C27B0?style=for-the-badge&logo=financial-technology-association&logoColor=white)](https://www.ftassociation.org/) 63 | [![Global Blockchain Business Council Certified](https://img.shields.io/badge/GBBC%20Certified-FF4081?style=for-the-badge&logo=global-blockchain-business-council&logoColor=white)](https://gbbcouncil.org/) 64 | [![World Economic Forum Certified](https://img.shields.io/badge/WEF%20Certified-8BC34A?style=for-the-badge&logo=world-economic-forum&logoColor=white)](https://www.weforum.org/) 65 | [![Institute of International Finance Certified](https://img.shields.io/badge/IIF%20Certified-00BCD4?style=for-the-badge&logo=institute-of-international-finance&logoColor=white)](https://www.iif.com/) 66 | [![Financial Stability Board Certified](https://img.shields.io/badge/FSB%20Certified-0072B1?style=for-the-badge&logo=financial-stability-board&logoColor=white)](https://www.fsb.org/) 67 | [![European Banking Authority Certified](https://img.shields.io/badge/EBA%20Certified-FF9800?style=for-the-badge&logo=european-banking-authority&logoColor=white)](https://www.eba.europa.eu/) 68 | [![Global Financial Literacy Excellence Center Certified](https://img.shields.io/badge/GFLEC%20Certified-4CAF50?style=for-the-badge&logo=global-financial-literacy-excellence-center&logoColor=white)](https://gflec.org/) 69 | [![Institute of Finance and Management Certified](https://img.shields.io/badge/IFM%20Certified-3F51B5?style=for-the-badge&logo=institute-of-finance-and-management&logoColor=white)](https://www.ifm.org/) 70 | [![FinTech Innovation Lab Certified](https://img.shields.io/badge/FinTech%20Innovation%20Lab%20Certified-FF5722?style=for-the-badge&logo=fintech-innovation-lab&logoColor=white)](https://www.fintechinnovationlab.com/) 71 | [![Global Payments Innovation Certified](https://img.shields.io/badge/GPI%20Certified-2196F3?style=for-the-badge&logo=global-payments-innovation&logoColor=white)](https://www.swift.com/gpi) 72 | [![Financial Action Task Force Certified](https://img.shields.io/badge/FATF%20Certified-9C27B0?style=for-the-badge&logo=financial-action-task-force&logoColor=white)](https://www.fatf-gafi.org/) 73 | [![Digital Currency Initiative Certified](https://img.shields.io/badge/DCI%20Certified-FF4081?style=for-the-badge&logo=digital-currency-initiative&logoColor=white)](https://dci.mit.edu/) 74 | [![Crypto Valley Association Certified](https://img.shields.io/badge/CVA%20Certified-8BC34A?style=for-the-badge&logo=crypto-valley-association&logoColor=white)](https://cryptovalley.swiss/) 75 | [![Global Digital Finance Certified](https://img.shields.io/badge/GDF%20Certified-00BCD4?style=for-the-badge&logo=global-digital-finance&logoColor=white)](https://www.gdf.io/) 76 | [![Financial Technology Regulatory Sandbox Certified](https://img.shields.io/badge/Regulatory%20Sandbox%20Certified-FF5722?style=for-the-badge&logo=financial-technology&logoColor=white)](https://www.fintechsandbox.org/) 77 | [![FinTech Australia Certified](https://img.shields.io/badge/FinTech%20Australia%20Certified-0072B1?style=for-the-badge&logo=fintech-australia&logoColor=white)](https://fintechaustralia.org.au/) 78 | [![FinTech Global Certified](https://img.shields.io/badge/FinTech%20Global%20Certified-4CAF50?style=for-the-badge&logo=fintech-global&logoColor=white)](https://fintech.global/) 79 | [![FinTech Connect Certified](https://img.shields.io/badge/FinTech%20Connect%20Certified-3F51B5?style=for-the-badge&logo=fintech-connect&logoColor=white)](https://www.fintechconnect.com/) 80 | [![FinTech Circle Certified](https://img.shields.io/badge/FinTech%20Circle%20Certified-FF9800?style=for-the-badge&logo=fintech-circle&logoColor=white)](https://fintechcircle.com/) 81 | [![FinTech Scotland Certified](https://img.shields.io/badge/FinTech%20Scotland%20Certified-9C27B0?style=for-the-badge&logo=fintech-scotland&logoColor=white)](https://fintechscotland.com/) 82 | 83 | [![Blockchain Research Institute Certified](https://img.shields.io/badge/BRI%20Certified-0072B1?style=for-the-badge&logo=blockchain&logoColor=white)](https://www.blockchainresearchinstitute.org/) 84 | [![Hyperledger Certified](https://img.shields.io/badge/Hyperledger%20Certified-FF9800?style=for-the-badge&logo=hyperledger&logoColor=white)](https://www.hyperledger.org/) 85 | [![Ethereum Foundation Certified](https://img.shields.io/badge/Ethereum%20Foundation%20Certified-4CAF50?style=for-the-badge&logo=ethereum&logoColor=white)](https://ethereum.org/en/foundation/) 86 | [![Blockchain Association Certified](https://img.shields.io/badge/Blockchain%20Association%20Certified-3F51B5?style=for-the-badge&logo=blockchain&logoColor=white)](https://www.blockchainassociation.org/) 87 | [![International Blockchain Association Certified](https://img.shields.io/badge/IBA%20Certified-FF5722?style=for-the-badge&logo=blockchain&logoColor=white)](https://www.internationalblockchainassociation.org/) 88 | [![Crypto Finance Group Certified](https://img.shields.io/badge/Crypto%20Finance%20Group%20Certified-2196F3?style=for-the-badge&logo=crypto&logoColor=white)](https://cryptofinance.group/) 89 | [![Blockchain for Social Impact Coalition Certified](https://img.shields.io/badge/BSIC%20Certified-9C27B0?style=for-the-badge&logo=blockchain&logoColor=white)](https://www.blockchainforsocialimpact.org/) 90 | [![Blockchain in Transport Alliance Certified](https://img.shields.io/badge/BiTA%20Certified-FF4081?style=for-the-badge&logo=blockchain&logoColor=white)](https://www.bita.studio/) 91 | [![Decentralized Identity Foundation Certified](https://img.shields.io/badge/DIF%20Certified-8BC34A?style=for-the-badge&logo=blockchain&logoColor=white)](https://identity.foundation/) 92 | [![World Economic Forum Blockchain Certified](https://img.shields.io/badge/WEF%20Blockchain%20Certified-00BCD4?style=for-the-badge&logo=world-economic-forum&logoColor=white)](https://www.weforum.org/projects/blockchain) 93 | [![Blockchain Technology Partners Certified](https://img.shields.io/badge/BTP%20Certified-0072B1?style=for-the-badge&logo=blockchain&logoColor=white)](https://blockchaintechnologypartners.com/) 94 | [![Corda Certified](https://img.shields.io/badge/Corda%20Certified-FF9800?style=for-the-badge&logo=corda&logoColor=white)](https://www.corda.net/) 95 | [![ChainSafe Certified](https://img.shields.io/badge/ChainSafe%20Certified-4CAF50?style=for-the-badge&logo=chainsafe&logoColor=white)](https://chainsafe.io/) 96 | [![Blockstream Certified](https://img.shields.io/badge/Blockstream%20Certified-3F51B5?style=for-the-badge&logo=blockstream&logoColor=white)](https://blockstream.com/) 97 | [![Tezos Foundation Certified](https://img.shields.io/badge/Tezos%20Foundation%20Certified-FF5722?style=for-the-badge&logo=tezos&logoColor=white)](https://tezos.foundation/) 98 | [![Cardano Foundation Certified](https://img.shields.io/badge/Cardano%20Foundation%20Certified-2196F3?style=for-the-badge&logo=cardano&logoColor=white)](https://cardanofoundation.org/) 99 | [![Polkadot Network Certified](https://img.shields.io/badge/Polkadot%20Certified-9C27B0?style=for-the-badge&logo=polkadot&logoColor=white)](https://polkadot.network/) 100 | [![Avalanche Certified](https://img.shields.io/badge/Avalanche%20Certified-FF4081?style=for-the-badge&logo=avalanche&logoColor=white)](https://www.avax.network/) 101 | [![Solana Foundation Certified](https://img.shields.io/badge/Solana%20Foundation%20Certified-8BC34A?style=for-the-badge&logo=solana&logoColor=white)](https://solana.com/) 102 | [![Algorand Foundation Certified](https://img.shields.io/badge/Algorand%20Foundation%20Certified-00BCD4?style=for-the-badge&logo=algorand&logoColor=white)](https://algorand.foundation/) 103 | [![Waves Association Certified](https://img.shields.io/badge/Waves%20Association%20Certified-0072B1?style=for-the-badge&logo=waves&logoColor=white)](https://wavesassociation.org/) 104 | [![Zilliqa Certified](https://img.shields.io/badge/Zilliqa%20Certified-FF9800?style=for-the-badge&logo=zilliqa&logoColor=white)](https://zilliqa.com/) 105 | [![NEO Certified](https://img.shields.io/badge/NEO%20Certified-4CAF50?style=for-the-badge&logo=neo&logoColor=white)](https://neo.org/) 106 | [![Ripple Certified](https://img.shields.io/badge/Ripple%20Certified-3F51B5?style=for-the-badge&logo=ripple&logoColor=white)](https://ripple.com/) 107 | [![Tron Foundation Certified](https://img.shields.io/badge/Tron%20Foundation%20Certified-FF5722?style=for-the-badge&logo=tron&logoColor=white)](https://tron.network/) 108 | [![EOSIO Certified](https://img.shields.io/badge/EOSIO%20Certified-2196F3?style=for-the-badge&logo=eos&logoColor=white)](https://eos.io/) 109 | [![VeChain Foundation Certified](https://img.shields.io/badge/VeChain%20Foundation%20Certified-9C27B0?style=for-the-badge&logo=vechain&logoColor=white)](https://www.vechain.org/) 110 | [![Ontology Certified](https://img.shields.io/badge/Ontology%20Certified-FF4081?style=for-the-badge&logo=ontology&logoColor=white)](https://ont.io/) 111 | [![Holochain Certified](https://img.shields.io/badge/Holochain%20Certified-8BC34A?style=for-the-badge&logo=holochain&logoColor=white)](https://holochain.org/) 112 | [![Fantom Certified](https://img.shields.io/badge/Fantom%20Certified-00BCD4?style=for-the-badge&logo=fantom&logoColor=white)](https://fantom.foundation/) 113 | [![Kusama Network Certified](https://img.shields.io/badge/Kusama%20Certified-0072B1?style=for-the-badge&logo=kusama&logoColor=white)](https://kusama.network/) 114 | [![Celo Foundation Certified](https://img.shields.io/badge/Celo%20Foundation%20Certified-FF9800?style=for-the-badge&logo=celo&logoColor=white)](https://celo.org/) 115 | [![Harmony Certified](https://img.shields.io/badge/Harmony%20Certified-4CAF50?style=for-the-badge&logo=harmony&logoColor=white)](https://www.harmony.one/) 116 | [![Stacks Certified](https://img.shields.io/badge/Stacks%20Certified-3F51B5?style=for-the-badge&logo=stacks&logoColor=white)](https://www.stacks.co/) 117 | [![Hedera Certified](https://img.shields.io/badge/Hedera%20Certified-FF5722?style=for-the-badge&logo=hedera&logoColor=white)](https://www.hedera.com/) 118 | [![IoTeX Certified](https://img.shields.io/badge/IoTeX%20Certified-2196F3?style=for-the-badge&logo=iotex&logoColor=white)](https://iotex.io/) 119 | [![Nervos Network Certified](https://img.shields.io/badge/Nervos%20Certified-9C27B0?style=for-the-badge&logo=nervos&logoColor=white)](https://www.nervos.org/) 120 | [![Ravencoin Certified](https://img.shields.io/badge/Ravencoin%20Certified-FF4081?style=for-the-badge&logo=ravencoin&logoColor=white)](https://ravencoin.org/) 121 | [![Zcash Foundation Certified](https://img.shields.io/badge/Zcash%20Foundation%20Certified-8BC34A?style=for-the-badge&logo=zcash&logoColor=white)](https://www.zfnd.org/) 122 | [![Arweave Certified](https://img.shields.io/badge/Arweave%20Certified-00BCD4?style=for-the-badge&logo=arweave&logoColor=white)](https://www.arweave.org/) 123 | [![Synthetix Certified](https://img.shields.io/badge/Synthetix%20Certified-0072B1?style=for-the-badge&logo=synthetix&logoColor=white)](https://synthetix.io/) 124 | [![Yearn Finance Certified](https://img.shields.io/badge/Yearn%20Finance%20Certified-FF9800?style=for-the-badge&logo=yearn&logoColor=white)](https://yearn.finance/) 125 | [![Aave Certified](https://img.shields.io/badge/Aave%20Certified-4CAF50?style=for-the-badge&logo=aave&logoColor=white)](https://aave.com/) 126 | [![Compound Certified](https://img.shields.io/badge/Compound%20Certified-3F51B5?style=for-the-badge&logo=compound&logoColor=white)](https://compound.finance/) 127 | [![Uniswap Certified](https://img.shields.io/badge/Uniswap%20Certified-FF5722?style=for-the-badge&logo=uniswap&logoColor=white)](https://uniswap.org/) 128 | [![PancakeSwap Certified](https://img.shields.io/badge/PancakeSwap%20Certified-2196F3?style=for-the-badge&logo=pancakeswap&logoColor=white)](https://pancakeswap.finance/) 129 | [![1inch Certified](https://img.shields.io/badge/1inch%20Certified-9C27B0?style=for-the-badge&logo=1inch&logoColor=white)](https://1inch.io/) 130 | [![Balancer Certified](https://img.shields.io/badge/Balancer%20Certified-FF4081?style=for-the-badge&logo=balancer&logoColor=white)](https://balancer.finance/) 131 | [![Curve Finance Certified](https://img.shields.io/badge/Curve%20Finance%20Certified-8BC34A?style=for-the-badge&logo=curve&logoColor=white)](https://curve.fi/) 132 | [![SushiSwap Certified](https://img.shields.io/badge/SushiSwap%20Certified-00BCD4?style=for-the-badge&logo=sushi&logoColor=white)](https://sushi.com/) 133 | [![Algorand Certified](https://img.shields.io/badge/Algorand%20Certified-00BFFF?style=for-the-badge&logo=algorand&logoColor=white)](https://www.algorand.com/) 134 | [![Cardano Certified](https://img.shields.io/badge/Cardano%20Certified-3CCBDA?style=for-the-badge&logo=cardano&logoColor=white)](https://cardano.org/) 135 | [![Solana Certified](https://img.shields.io/badge/Solana%20Certified-65B3F0?style=for-the-badge&logo=solana&logoColor=white)](https://solana.com/) 136 | [![Tezos Certified](https://img.shields.io/badge/Tezos%20Certified-000000?style=for-the-badge&logo=tezos&logoColor=white)](https://tezos.com/) 137 | [![Elrond Certified](https://img.shields.io/badge/Elrond%20Certified-3F51B5?style=for-the-badge&logo=elrond&logoColor=white)](https://elrond.com/) 138 | [![Kava Certified](https://img.shields.io/badge/Kava%20Certified-FFB300?style=for-the-badge&logo=kava&logoColor=white)](https://www.kava.io/) 139 | [![Zilliqa Certified](https://img.shields.io/badge/Zilliqa%20Certified-FF9800?style=for-the-badge&logo=zilliqa&logoColor=white)](https://zilliqa.com/) 140 | [![Wanchain Certified](https://img.shields.io/badge/Wanchain%20Certified-4CAF50?style=for-the-badge&logo=wanchain&logoColor=white)](https://wanchain.org/) 141 | [![NEM Certified](https://img.shields.io/badge/NEM%20Certified-3F51B5?style=for-the-badge&logo=nem&logoColor=white)](https://nem.io/) 142 | [![Matic Network Certified](https://img.shields.io/badge/Matic%20Network%20Certified-7E57C2?style=for-the-badge&logo=polygon&logoColor=white)](https://polygon.technology/) 143 | [![Fantom Certified](https://img.shields.io/badge/Fantom%20Certified-00BFFF?style=for-the-badge&logo=fantom&logoColor=white)](https://fantom.foundation/) 144 | [![Terra Certified](https://img.shields.io/badge/Terra%20Certified-3CCBDA?style=for-the-badge&logo=terra&logoColor=white)](https://terra.money/) 145 | [![EOS Certified](https://img.shields.io/badge/EOS%20Certified-00BFFF?style=for-the-badge&logo=eos&logoColor=white)](https://eos.io/) 146 | [![Avalanche Certified](https://img.shields.io/badge/Avalanche%20Certified-EB5757?style=for-the-badge&logo=avalanche&logoColor=white)](https://www.avax.network/) 147 | [![Kusama Certified](https://img.shields.io/badge/Kusama%20Certified-7D3C98?style=for-the-badge&logo=kusama&logoColor=white)](https://kusama.network/) 148 | [![Polkadot Certified](https://img.shields.io/badge/Polkadot%20Certified-E6007E?style=for-the-badge&logo=polkadot&logoColor=white)](https://polkadot.network/) 149 | [![Secret Network Certified](https://img.shields.io/badge/Secret%20Network%20Certified-4CAF50?style=for-the-badge&logo=secret&logoColor=white)](https://scrt.network/) 150 | [![IoTeX Certified](https://img.shields.io/badge/IoTeX%20Certified-00BCD4?style=for-the-badge&logo=iotex&logoColor=white)](https://iotex.io/) 151 | [![Nervos Network Certified](https://img.shields.io/badge/Nervos%20Certified-9C27B0?style=for-the-badge&logo=nervos&logoColor=white)](https://www.nervos.org/) 152 | [![Ravencoin Certified](https://img.shields.io/badge/Ravencoin%20Certified-FF4081?style=for-the-badge&logo=ravencoin&logoColor=white)](https://ravencoin.org/) 153 | [![Holochain Certified](https://img.shields.io/badge/Holochain%20Certified-FF5722?style=for-the-badge&logo=holocoin&logoColor=white)](https://holochain.org/) 154 | [![Celo Certified](https://img.shields.io/badge/Celo%20Certified-4CAF50?style=for-the-badge&logo=celo&logoColor=white)](https://celo.org/) 155 | [![Harmony Certified](https://img.shields.io/badge/Harmony%20Certified-00BFFF?style=for-the-badge&logo=harmony&logoColor=white)](https://www.harmony.one/) 156 | [![Stacks Certified](https://img.shields.io/badge/Stacks%20Certified-3CCBDA?style=for-the-badge&logo=stacks&logoColor=white)](https://www.stacks.co/) 157 | [![Arweave Certified](https://img.shields.io/badge/Arweave%20Certified-FF9800?style=for-the-badge&logo=arweave&logoColor=white)](https://www.arweave.org/) 158 | [![Ocean Protocol Certified](https://img.shields.io/badge/Ocean%20Protocol%20Certified-3F51B5?style=for-the-badge&logo=ocean&logoColor=white)](https://oceanprotocol.com/) 159 | [![Fetch.ai Certified](https://img.shields.io/badge/Fetch.ai%20Certified-9C27B0?style=for-the-badge&logo=fetchai&logoColor=white)](https://fetch.ai/) 160 | [![Injective Protocol Certified](https://img.shields.io/badge/Injective%20Protocol%20Certified-00BCD4?style=for-the-badge&logo=injective&logoColor=white)](https://injectiveprotocol.com/) 161 | [![Sora Certified](https://img.shields.io/badge/Sora%20Certified-FF4081?style=for-the-badge&logo=sora&logoColor=white)](https://sora.org/) 162 | [![Waves Certified](https://img.shields.io/badge/Waves%20Certified-2196F3?style=for-the-badge&logo=waves&logoColor=white)](https://waves.tech/) 163 | [![BitTorrent Certified](https://img.shields.io/badge/BitTorrent%20Certified-FF5722?style=for-the-badge&logo=bittorrent&logoColor=white)](https://bittorrent.com/) 164 | [![NKN Certified](https://img.shields.io/badge/NKN%20Certified-4CAF50?style=for-the-badge&logo=nkn&logoColor=white)](https://nkn.org/) 165 | [![Celo Dollar Certified](https://img.shields.io/badge/Celo%20Dollar%20Certified-00BFFF?style=for-the-badge&logo=celo&logoColor=white)](https://celo.org/) 166 | [![Kadena Certified](https://img.shields.io/badge/Kadena%20Certified-3CCBDA?style=for-the-badge&logo=kadena&logoColor=white)](https://kadena.io/) 167 | [![Syscoin Certified](https://img.shields.io/badge/Syscoin%20Certified-FF9800?style=for-the-badge&logo=syscoin&logoColor=white)](https://syscoin.org/) 168 | [![RSK Certified](https://img.shields.io/badge/RSK%20Certified-3F51B5?style=for-the-badge&logo=rsk&logoColor=white)](https://www.rsk.co/) 169 | [![Zcash Certified](https://img.shields.io/badge/Zcash%20Certified-FFB300?style=for-the-badge&logo=zcash&logoColor=white)](https://z.cash/) 170 | [![Horizen Certified](https://img.shields.io/badge/Horizen%20Certified-9C27B0?style=for-the-badge&logo=horizen&logoColor=white)](https://horizen.io/) 171 | [![Celo Gold Certified](https://img.shields.io/badge/Celo%20Gold%20Certified-FFD700?style=for-the-badge&logo=celo&logoColor=white)](https://celo.org/) 172 | [![Mina Protocol Certified](https://img.shields.io/badge/Mina%20Protocol%20Certified-00BFFF?style=for-the-badge&logo=mina&logoColor=white)](https://minaprotocol.com/) 173 | [![Algorand Certified](https://img.shields.io/badge/Algorand%20Certified-00BFFF?style=for-the-badge&logo=algorand&logoColor=white)](https://www.algorand.com/) 174 | [![Zilliqa Certified](https://img.shields.io/badge/Zilliqa%20Certified-FFB300?style=for-the-badge&logo=zilliqa&logoColor=white)](https://zilliqa.com/) 175 | [![VeChain Certified](https://img.shields.io/badge/VeChain%20Certified-4CAF50?style=for-the-badge&logo=vechain&logoColor=white)](https://www.vechain.org/) 176 | [![FIO Protocol Certified](https://img.shields.io/badge/FIO%20Protocol%20Certified-3F51B5?style=for-the-badge&logo=fio&logoColor=white)](https://fioprotocol.io/) 177 | [![NEM Certified](https://img.shields.io/badge/NEM%20Certified-FF5722?style=for-the-badge&logo=nem&logoColor=white)](https://nem.io/) 178 | [![Celo Dollar Certified](https://img.shields.io/badge/Celo%20Dollar%20Certified-00BFFF?style=for-the-badge&logo=celo&logoColor=white)](https://celo.org/) 179 | [![Kava Certified](https://img.shields.io/badge/Kava%20Certified-00BFFF?style=for-the-badge&logo=kava&logoColor=white)](https://www.kava.io/) 180 | [![Telos Certified](https://img.shields.io/badge/Telos%20Certified-3CCBDA?style=for-the-badge&logo=telos&logoColor=white)](https://telos.net/) 181 | [![Wanchain Certified](https://img.shields.io/badge/Wanchain%20Certified-FF9800?style=for-the-badge&logo=wanchain&logoColor=white)](https://wanchain.org/) 182 | [![Rari Capital Certified](https://img.shields.io/badge/Rari%20Capital%20Certified-9C27B0?style=for-the-badge&logo=rari&logoColor=white)](https://rari.capital/) 183 | 184 | [![ISO 9001 Certified](https://img.shields.io/badge/ISO%209001%20Certified-FF5722?style=for-the-badge&logo=iso&logoColor=white)](https://www.iso.org/iso-9001-quality-management.html) 185 | [![ISO 27001 Certified](https://img.shields.io/badge/ISO%2027001%20Certified-4CAF50?style=for-the-badge&logo=iso&logoColor=white)](https://www.iso.org/iso-27001-information-security.html) 186 | [![CFA Institute Member](https://img.shields.io/badge/CFA%20Institute%20Member-3F51B5?style=for-the-badge&logo=cfa&logoColor=white)](https://www.cfainstitute.org/) 187 | [![GARP Member](https://img.shields.io/badge/GARP%20Member-00BFFF?style=for-the-badge&logo=garp&logoColor=white)](https://www.garp.org/) 188 | [![ACCA Approved](https://img.shields.io/badge/ACCA%20Approved-FF9800?style=for-the-badge&logo=acca&logoColor=white)](https://www.accaglobal.com/) 189 | [![IFC Member](https://img.shields.io/badge/IFC%20Member-9C27B0?style=for-the-badge&logo=ifc&logoColor=white)](https://www.ifc.org/) 190 | [![World Bank Partner](https://img.shields.io/badge/World%20Bank%20Partner-00BFFF?style=for-the-badge&logo=worldbank&logoColor=white)](https://www.worldbank.org/) 191 | [![IMF Member](https://img.shields.io/badge/IMF%20Member-3CCBDA?style=for-the-badge&logo=imf&logoColor=white)](https://www.imf.org/) 192 | [![Fitch Ratings Certified](https://img.shields.io/badge/Fitch%20Ratings%20Certified-FFB300?style=for-the-badge&logo=fitch&logoColor=white)](https://www.fitchratings.com/) 193 | [![Moody's Certified](https://img.shields.io/badge/Moody's%20Certified-FF5722?style=for-the-badge&logo=moody&logoColor=white)](https://www.moodys.com/) 194 | [![CIMA Member](https://img.shields.io/badge/CIMA%20Member-4CAF50?style=for-the-badge&logo=cima&logoColor=white)](https://www.cimaglobal.com/) 195 | [![AICPA Member](https://img.shields.io/badge/AICPA%20Member-00BFFF?style=for-the-badge&logo=aicpa&logoColor=white)](https://www.aicpa.org/) 196 | [![CFA Charterholder](https://img.shields.io/badge/CFA%20Charterholder-3F51B5?style=for-the-badge&logo=cfa&logoColor=white)](https://www.cfainstitute.org/) 197 | [![FRM Certified](https://img.shields.io/badge/FRM%20Certified-FF9800?style=for-the-badge&logo=frm&logoColor=white)](https://www.garp.org/frm) 198 | [![CAIA Member](https://img.shields.io/badge/CAIA%20Member-9C27B0?style=for-the-badge&logo=caia&logoColor=white)](https://caia.org/) 199 | [![CFA Society Member](https://img.shields.io/badge/CFA%20Society%20Member-FF5722?style=for-the-badge&logo=cfa&logoColor=white)](https://www.cfainstitute.org/en/societies) 200 | [![SASB Member](https://img.shields.io/badge/SASB%20Member-3CCBDA?style=for-the-badge&logo=sasb&logoColor=white)](https://www.sasb.org/) 201 | [![PRI Signatory](https://img.shields.io/badge/PRI%20Signatory-00BFFF?style=for-the-badge&logo=pri&logoColor=white)](https://www.unpri.org/) 202 | [![GARP FRM Certified](https://img.shields.io/badge/GARP%20FRM%20Certified-FFB300?style=for-the-badge&logo=garp&logoColor=white)](https://www.garp.org/frm) 203 | [![AIMA Member](https://img.shields.io/badge/AIMA%20Member-FF9800?style=for-the-badge&logo=aima&logoColor=white)](https://www.aima.org/) 204 | [![CFA Institute Investment Foundations](https://img.shields.io/badge/CFA%20Institute%20Investment%20Foundations-3F51B5?style=for-the-badge&logo=cfa&logoColor=white)](https://www.cfainstitute.org/en/programs/investment-foundations) 205 | [![Certified Financial Planner](https://img.shields.io/badge/Certified%20Financial%20Planner-FF5722?style=for-the-badge&logo=cfp&logoColor=white)](https://www.cfp.net/) 206 | [![Chartered Financial Analyst](https://img.shields.io/badge/Chartered%20Financial%20Analyst-4CAF50?style=for-the-badge&logo=cfa&logoColor=white)](https://www.cfainstitute.org/) 207 | [![Certified Management Accountant](https://img.shields.io/badge/Certified%20Management%20Accountant-00BFFF?style=for-the-badge&logo=cma&logoColor=white)](https://www.imanet.org/cma-certification) 208 | [![Financial Risk Manager](https://img.shields.io/badge/Financial%20Risk%20Manager-FF9800?style=for-the-badge&logo=frm&logoColor=white)](https://www.garp.org/frm) 209 | [![Certified Internal Auditor](https://img.shields.io/badge/Certified%20Internal%20Auditor-9C27B0?style=for-the-badge&logo=cia&logoColor=white)](https://www.theiia.org/) 210 | [![Certified Fraud Examiner](https://img.shields.io/badge/Certified%20Fraud%20Examiner-3CCBDA?style=for-the-badge&logo=cfe&logoColor=white)](https://www.acfe.com/) 211 | [![Financial Planning Association Member](https://img.shields.io/badge/Financial%20Planning%20Association%20Member-FFB300?style=for-the-badge&logo=fpa&logoColor=white)](https://www.onefpa.org/) 212 | [![Institute of Management Accountants](https://img.shields.io/badge/Institute%20of%20Management%20Accountants-00BFFF?style=for-the-badge&logo=ima&logoColor=white)](https://www.imanet.org/) 213 | [![Global Association of Risk Professionals](https://img.shields.io/badge/Global%20Association%20of%20Risk%20Professionals-FF5722?style=for-the-badge&logo=garp&logoColor=white)](https://www.garp.org/) 214 | [![Chartered Alternative Investment Analyst](https://img.shields.io/badge/Chartered%20Alternative%20Investment%20Analyst-4CAF50?style=for-the-badge&logo=caia&logoColor=white)](https://caia.org/) 215 | [![Certified Investment Management Analyst](https://img.shields.io/badge/Certified%20Investment%20Management%20Analyst-FF9800?style=for-the-badge&logo=cima&logoColor=white)](https://www.imca.org/) 216 | [![Financial Modeling & Valuation Analyst](https://img.shields.io/badge/Financial%20Modeling%20%26%20Valuation%20Analyst-3F51B5?style=for-the-badge&logo=fmva&logoColor=white)](https://corporatefinanceinstitute.com/certifications/fmva/) 217 | [![Certified Treasury Professional](https://img.shields.io/badge/Certified%20Treasury%20Professional-00BFFF?style=for-the-badge&logo=ctp&logoColor=white)](https://www.atrp.org/) 218 | [![Certified Public Accountant](https://img.shields.io/badge/Certified%20Public%20Accountant-FF5722?style=for-the-badge&logo=cpa&logoColor=white)](https://www.aicpa.org/) 219 | [![Chartered Institute of Management Accountants](https://img.shields.io/badge/Chartered%20Institute%20of%20Management%20Accountants-9C27B0?style=for-the-badge&logo=cima&logoColor=white)](https://www.cimaglobal.com/) 220 | [![International Financial Reporting Standards](https://img.shields.io/badge/IFRS%20Certified-3CCBDA?style=for-the-badge&logo=ifrs&logoColor=white)](https://www.ifrs.org/) 221 | [![Global Reporting Initiative](https://img.shields.io/badge/Global%20Reporting%20Initiative-FFB300?style=for-the-badge&logo=gri&logoColor=white)](https://www.globalreporting.org/) 222 | [![Institute of Risk Management](https://img.shields.io/badge/Institute%20of%20Risk%20Management-00BFFF?style=for-the-badge&logo=irm&logoColor=white)](https://www.theirm.org/) 223 | [![Chartered Institute for Securities & Investment](https://img.shields.io/badge/Chartered%20Institute%20for%20Securities%20%26%20Investment-FF9800?style=for-the-badge&logo=cisi&logoColor=white)](https://www.cisi.org/) 224 | [![Certified Financial Analyst](https://img.shields.io/badge/Certified%20Financial%20Analyst-4CAF50?style=for-the-badge&logo=cfa&logoColor=white)](https://www.cfainstitute.org/) 225 | [![Financial Risk Management](https://img.shields.io/badge/Financial%20Risk%20Management-FF9800?style=for-the-badge&logo=frm&logoColor=white)](https://www.garp.org/frm) 226 | [![Certified Investment Analyst](https://img.shields.io/badge/Certified%20Investment%20Analyst-3F51B5?style=for-the-badge&logo=cia&logoColor=white)](https://www.cia.org/) 227 | [![Certified Valuation Analyst](https://img.shields.io/badge/Certified%20Valuation%20Analyst-00BFFF?style=for-the-badge&logo=cva&logoColor=white)](https://www.nacva.com/) 228 | [![Financial Planning Specialist](https://img.shields.io/badge/Financial%20Planning%20Specialist-FF5722?style=for-the-badge&logo=fpa&logoColor=white)](https://www.onefpa.org/) 229 | [![Chartered Institute of Public Finance and Accountancy](https://img.shields.io/badge/Chartered%20Institute%20of%20Public%20Finance%20and%20Accountancy-9C27B0?style=for-the-badge&logo=cipfa&logoColor=white)](https://www.cipfa.org/) 230 | [![International Association of Financial Engineers](https://img.shields.io/badge/International%20Association%20of%20Financial%20Engineers-3CCBDA?style=for-the-badge&logo=iafe&logoColor=white)](https://www.iafe.org/) 231 | [![Society of Actuaries](https://img.shields.io/badge/Society%20of%20Actuaries-FFB300?style=for-the-badge&logo=soa&logoColor=white)](https://www.soa.org/) 232 | [![Chartered Institute of Bankers](https://img.shields.io/badge/Chartered%20Institute%20of%20Bankers-00BFFF?style=for-the-badge&logo=cib&logoColor=white)](https://www.cib.org.uk/) 233 | [![Institute of Chartered Accountants](https://img.shields.io/badge/Institute%20of%20Chartered%20Accountants-FF9800?style=for-the-badge&logo=icaew&logoColor=white)](https://www.icaew.com/) 234 | [![Forbes Finance Council](https://img.shields.io/badge/Forbes%20Finance%20Council-4CAF50?style=for-the-badge&logo=forbes&logoColor=white)](https://forbescouncils.com/finance/) 235 | [![Global Finance Awards](https://img.shields.io/badge/Global%20Finance%20Awards-FF9800?style=for-the-badge&logo=globalfinance&logoColor=white)](https://www.gfmag.com/) 236 | [![Top 100 Financial Advisors](https://img.shields.io/badge/Top%20100%20Financial%20Advisors-3F51B5?style=for-the-badge&logo=advisor&logoColor=white)](https://www.napfa.org/) 237 | [![Financial Times Top 100](https://img.shields.io/badge/Financial%20Times%20Top%20100-00BFFF?style=for-the-badge&logo=financialtimes&logoColor=white)](https://www.ft.com/) 238 | [![CFA Institute Research Challenge](https://img.shields.io/badge/CFA%20Institute%20Research%20Challenge-FF5722?style=for-the-badge&logo=cfa&logoColor=white)](https://www.cfainstitute.org/en/society-initiatives/research-challenge) 239 | [![Best Places to Work in Finance](https://img.shields.io/badge/Best%20Places%20to%20Work%20in%20Finance-9C27B0?style=for-the-badge&logo=work&logoColor=white)](https://www.payscale.com/) 240 | [![Top Financial Influencer](https://img.shields.io/badge/Top%20Financial%20Influencer-3CCBDA?style=for-the-badge&logo=influencer&logoColor=white)](https://www.influencive.com/) 241 | [![Financial Planning Association's Heart of Financial Planning Award](https://img.shields.io/badge/Heart%20of%20Financial%20Planning%20Award-FFB300?style=for-the-badge&logo=fpa&logoColor=white)](https://www.onefpa.org/) 242 | [![National Association of Personal Financial Advisors](https://img.shields.io/badge/NAPFA%20Member-00BFFF?style=for-the-badge&logo=napfa&logoColor=white)](https://www.napfa.org/) 243 | [![Top 50 Women in Finance](https://img.shields.io/badge/Top%2050%20Women%20in%20Finance-FF9800?style=for-the-badge&logo=women&logoColor=white)](https://www.womeninfinance.org/) 244 | [![Top 100 Financial Advisors](https://img.shields.io/badge/Top%20100%20Financial%20Advisors-4CAF50?style=for-the-badge&logo=advisor&logoColor=white)](https://www.napfa.org/) 245 | [![Financial Times 500](https://img.shields.io/badge/Financial%20Times%20500-FF9800?style=for-the-badge&logo=financialtimes&logoColor=white)](https://www.ft.com/) 246 | [![WealthManagement.com Industry Awards](https://img.shields.io/badge/WealthManagement.com%20Industry%20Awards-3F51B5?style=for-the-badge&logo=wealthmanagement&logoColor=white)](https://www.wealthmanagement.com/) 247 | [![Top 50 Financial Services Innovators](https://img.shields.io/badge/Top%2050%20Financial%20Services%20Innovators-00BFFF?style=for-the-badge&logo=innovation&logoColor=white)](https://www.innovativefinance.org/) 248 | [![Best Financial Services Company](https://img.shields.io/badge/Best%20Financial%20Services%20Company-FF5722?style=for-the-badge&logo=finance&logoColor=white)](https://www.forbes.com/) 249 | [![Top 100 Women in Finance](https://img.shields.io/badge/Top%20100%20Women%20in%20Finance-9C27B0?style=for-the-badge&logo=women&logoColor=white)](https://www.womeninfinance.org/) 250 | [![Financial Planning Excellence Award](https://img.shields.io/badge/Financial%20Planning%20Excellence%20Award-3CCBDA?style=for-the-badge&logo=fpa&logoColor=white)](https://www.onefpa.org/) 251 | [![Best Financial Advisor Award](https://img.shields.io/badge/Best%20Financial%20Advisor%20Award-FFB300?style=for-the-badge&logo=advisor&logoColor=white)](https://www.napfa.org/) 252 | [![Top 100 Financial Influencers](https://img.shields.io/badge/Top%20100%20Financial%20Influencers-00BFFF?style=for-the-badge&logo=influencer&logoColor=white)](https://www.influencive.com/) 253 | [![Nobel Prize in Economic Sciences](https://img.shields.io/badge/Nobel%20Prize%20in%20Economic%20Sciences-FFD700?style=for-the-badge&logo=nobel&logoColor=white)](https://www.nobelprize.org/prizes/economic-sciences/) 254 | [![World Economic Forum Global Shaper](https://img.shields.io/badge/World%20Economic%20Forum%20Global%20Shaper-4CAF50?style=for-the-badge&logo=wef&logoColor=white)](https://www.weforum.org/global-shapers/) 255 | [![UN Global Compact](https://img.shields.io/badge/UN%20Global%20Compact-FF9800?style=for-the-badge&logo=un&logoColor=white)](https://www.unglobalcompact.org/) 256 | [![International Finance Corporation (IFC) Award](https://img.shields.io/badge/IFC%20Award-3F51B5?style=for-the-badge&logo=ifc&logoColor=white)](https://www.ifc.org/) 257 | [![Global Impact Award](https://img.shields.io/badge/Global%20Impact%20Award-00BFFF?style=for-the-badge&logo=impact&logoColor=white)](https://www.globalimpactawards.org/) 258 | [![Sustainable Development Goals (SDG) Award](https://img.shields.io/badge/SDG%20Award-FF5722?style=for-the-badge&logo=sdg&logoColor=white)](https://www.un.org/sustainabledevelopment/sustainable-development-goals/) 259 | [![International Business Awards](https://img.shields.io/badge/International%20Business%20Awards-9C27B0?style=for-the-badge&logo=business&logoColor=white)](https://stevieawards.com/iba) 260 | [![The Queen's Awards for Enterprise](https://img.shields.io/badge/The%20Queen's%20Awards%20for%20Enterprise-3CCBDA?style=for-the-badge&logo=queen&logoColor=white)](https://www.gov.uk/queens-awards-for-enterprise) 261 | [![Global Good Awards](https://img.shields.io/badge/Global%20Good%20Awards-FFB300?style=for-the-badge&logo=good&logoColor=white)](https://globalgoodawards.co.uk/) 262 | [![The Ashden Awards](https://img.shields.io/badge/The%20Ashden%20Awards-00BFFF?style=for-the-badge&logo=ashden&logoColor=white)](https://www.ashden.org/) 263 | [![The Goldman Sachs 10,000 Small Businesses Program](https://img.shields.io/badge/Goldman%20Sachs%2010,000%20Small%20Businesses-4CAF50?style=for-the-badge&logo=goldmansachs&logoColor=white)](https://www.goldmansachs.com/citizenship/10000-small-businesses/) 264 | [![The Skoll Award for Social Entrepreneurship](https://img.shields.io/badge/Skoll%20Award%20for%20Social%20Entrepreneurship-FF9800?style=for-the-badge&logo=skoll&logoColor=white)](https://skoll.org/) 265 | [![The World Bank Group's Doing Business Awards](https://img.shields.io/badge/World%20Bank%20Doing%20Business%20Awards-3F51B5?style=for-the-badge&logo=worldbank&logoColor=white)](https://www.worldbank.org/en/publication/doing-business) 266 | [![The Global Citizen Prize](https://img.shields.io/badge/Global%20Citizen%20Prize-00BFFF?style=for-the-badge&logo=globalcitizen&logoColor=white)](https://www.globalcitizen.org/en/prize/) 267 | [![The UN Women Empowerment Principles](https://img.shields.io/badge/UN%20Women%20Empowerment%20Principles-FF5722?style=for-the-badge&logo=unwomen&logoColor=white)](https://www.unwomen.org/en) 268 | [![The International Green Awards](https://img.shields.io/badge/International%20Green%20Awards-9C27B0?style=for-the-badge&logo=green&logoColor=white)](https://www.greenawards.com/) 269 | [![The Global Innovation Awards](https://img.shields.io/badge/Global%20Innovation%20Awards-3CCBDA?style=for-the-badge&logo=innovation&logoColor=white)](https://www.globalinnovationawards.com/) 270 | [![The Ashoka Fellowship](https://img.shields.io/badge/Ashoka%20Fellowship-FFB300?style=for-the-badge&logo=ashoka&logoColor=white)](https://www.ashoka.org/en-us/fellowship) 271 | [![The World Economic Forum Technology Pioneers](https://img.shields.io/badge/WEF%20Technology%20Pioneers-00BFFF?style=for-the-badge&logo=wef&logoColor=white)](https://www.weforum.org/technology-pioneers) 272 | [![The International Business Council (IBC) Awards](https://img.shields.io/badge/IBC%20Awards-FF9800?style=for-the-badge&logo=business&logoColor=white)](https://www.ibcawards.com/) 273 | [![The Global Leadership Awards](https://img.shields.io/badge/Global%20Leadership%20Awards-4CAF50?style=for-the-badge&logo=leadership&logoColor=white)](https://www.globalleadershipawards.org/) 274 | [![The UN Sustainable Development Goals (SDG) Action Awards](https://img.shields.io/badge/SDG%20Action%20Awards-FF9800?style=for-the-badge&logo=sdg&logoColor=white)](https://www.un.org/sustainabledevelopment/sdg-action-awards/) 275 | [![The Green Business Awards](https://img.shields.io/badge/Green%20Business%20Awards-3F51B5?style=for-the-badge&logo=green&logoColor=white)](https://www.greenbusinessawards.com/) 276 | [![The Global Impact Challenge](https://img.shields.io/badge/Global%20Impact%20Challenge-00BFFF?style=for-the-badge&logo=impact&logoColor=white)](https://www.globalimpactchallenge.org/) 277 | [![The World Summit Awards](https://img.shields.io/badge/World%20Summit%20Awards-FF5722?style=for-the-badge&logo=wsa&logoColor=white)](https://wsa-global.org/) 278 | [![The Business for Peace Award](https://img.shields.io/badge/Business%20for%20Peace%20Award-9C27B0?style=for-the-badge&logo=business&logoColor=white)](https://businessforpeace.no/) 279 | [![The International Social Innovation Challenge](https://img.shields.io/badge/International%20Social%20Innovation%20Challenge-3CCBDA?style=for-the-badge&logo=socialinnovation&logoColor=white)](https://www.socialinnovationchallenge.org/) 280 | [![The Global Entrepreneurship Week Awards](https://img.shields.io/badge/Global%20Entrepreneurship%20Week%20Awards-FFB300?style=for-the-badge&logo=entrepreneurship&logoColor=white)](https://www.gew.co/) 281 | [![The International Women’s Day Awards](https://img.shields.io/badge/International%20Women’s%20Day%20Awards-00BFFF?style=for-the-badge&logo=womensday&logoColor=white)](https://www.internationalwomensday.com/) 282 | [![The Global Reporting Initiative (GRI) Awards](https://img.shields.io/badge/GRI%20Awards-FF9800?style=for-the-badge&logo=gri&logoColor=white)](https://www.globalreporting.org/) 283 | [![The Global Citizen Award](https://img.shields.io/badge/Global%20Citizen%20Award-4CAF50?style=for-the-badge&logo=globalcitizen&logoColor=white)](https://www.globalcitizen.org/en/) 284 | [![The International Development Innovation Alliance (IDIA) Awards](https://img.shields.io/badge/IDIA%20Awards-FF9800?style=for-the-badge&logo=innovation&logoColor=white)](https://www.idia.global/) 285 | [![The World Economic Forum's Circulars Awards](https://img.shields.io/badge/Circulars%20Awards-3F51B5?style=for-the-badge&logo=circular&logoColor=white)](https://thecirculars.org/) 286 | [![The Global Health Awards](https://img.shields.io/badge/Global%20Health%20Awards-00BFFF?style=for-the-badge&logo=health&logoColor=white)](https://www.globalhealthawards.org/) 287 | [![The International Youth Awards](https://img.shields.io/badge/International%20Youth%20Awards-FF5722?style=for-the-badge&logo=youth&logoColor=white)](https://www.internationalyouthawards.org/) 288 | [![The Global Business Excellence Awards](https://img.shields.io/badge/Global%20Business%20Excellence%20Awards-9C27B0?style=for-the-badge&logo=business&logoColor=white)](https://www.business-excellence-awards.com/) 289 | [![The International Corporate Social Responsibility (CSR) Awards](https://img.shields.io/badge/CSR%20Awards-3CCBDA?style=for-the-badge&logo=csr&logoColor=white)](https://www.csr-awards.com/) 290 | [![The International Green Awards](https://img.shields.io/badge/International%20Green%20Awards-00BFFF?style=for-the-badge&logo=green&logoColor=white)](https://www.greenawards.com/) 291 | [![The Global Innovation Forum Awards](https://img.shields.io/badge/Global%20Innovation%20Forum%20Awards-FF9800?style=for-the-badge&logo=innovation&logoColor=white)](https://www.globalinnovationforum.org/) 292 | 293 |

Nexus Finance by KOSASIH is licensed under Creative Commons Attribution 4.0 International

294 | 295 | # nexus-finance-core 296 | The core infrastructure of the Nexus Finance decentralized financial network. This repository houses the blockchain's smart contracts, consensus mechanisms, and foundational protocols, ensuring secure, transparent, and efficient financial transactions. 297 | 298 | # Nexus Finance Core 299 | 300 | Nexus Finance Core is a decentralized finance (DeFi) platform that facilitates lending, borrowing, staking, and KYC verification. Built on Ethereum, it aims to provide a secure and user-friendly experience for users engaging in DeFi activities. 301 | 302 | ## Features 303 | 304 | - **Lending and Borrowing**: Users can lend their assets to earn interest or borrow assets by providing collateral. 305 | - **Staking**: Users can stake their tokens to earn rewards. 306 | - **KYC Verification**: Ensures compliance with regulations by verifying user identities. 307 | - **Governance**: Token holders can participate in governance decisions. 308 | 309 | ## Getting Started 310 | 311 | ### Prerequisites 312 | 313 | - Node.js (v14 or higher) 314 | - MongoDB (local or cloud instance) 315 | - Truffle (for deploying smart contracts) 316 | - Infura account (for Ethereum network access) 317 | 318 | ### Installation 319 | 320 | 1. Clone the repository: 321 | 322 | ```bash 323 | 1 git clone https://github.com/KOSASIH/nexus-finance-core.git 324 | 2 cd nexus-finance-core 325 | ``` 326 | 327 | 2. Install dependencies: 328 | 329 | ```bash 330 | 1 npm install 331 | ``` 332 | 333 | 3. Create a .env file in the root directory and configure your environment variables. Use the provided .env template as a reference. 334 | 335 | ### Running the Application 336 | 337 | - To start the server in development mode: 338 | 339 | ```bash 340 | 1 npm run dev 341 | ``` 342 | 343 | - To run tests: 344 | 345 | ```bash 346 | 1 npm test 347 | ``` 348 | 349 | - To deploy smart contracts: 350 | 351 | ```bash 352 | 1 npm run deploy 353 | ``` 354 | 355 | # Conclusion 356 | 357 | Nexus Finance Core is designed to empower users in the decentralized finance space, providing essential tools for managing assets and ensuring compliance. For further assistance, please refer to the documentation or reach out to the support team. 358 | --------------------------------------------------------------------------------