{"id":16432922,"url":"https://github.com/nour-karoui/fund-me","last_synced_at":"2026-04-27T16:31:24.470Z","repository":{"id":71359850,"uuid":"585678531","full_name":"nour-karoui/fund-me","owner":"nour-karoui","description":"A crowdfunding platform that allows users to send funds in the form of RVL, a customized ERC20 tokens and an RVL Faucet that allows users to receive RVL to be able to participate in crowdfunding projects","archived":false,"fork":false,"pushed_at":"2023-01-07T20:47:18.000Z","size":35663,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-08-11T18:41:57.988Z","etag":null,"topics":["erc20","erc20-tokens","ethereum","etherscan","ethersjs","ganache-cli","goerli-network","react","smart-contracts","solidity","truffle"],"latest_commit_sha":null,"homepage":"http://rvl-crowdfund-me.s3-website-us-east-1.amazonaws.com/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nour-karoui.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"License","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-01-05T19:41:58.000Z","updated_at":"2023-01-09T11:36:10.000Z","dependencies_parsed_at":null,"dependency_job_id":"9997b999-9958-4f0a-93ed-c898f97c356e","html_url":"https://github.com/nour-karoui/fund-me","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nour-karoui/fund-me","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nour-karoui%2Ffund-me","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nour-karoui%2Ffund-me/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nour-karoui%2Ffund-me/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nour-karoui%2Ffund-me/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nour-karoui","download_url":"https://codeload.github.com/nour-karoui/fund-me/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nour-karoui%2Ffund-me/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32345802,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"online","status_checked_at":"2026-04-27T02:00:06.769Z","response_time":128,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["erc20","erc20-tokens","ethereum","etherscan","ethersjs","ganache-cli","goerli-network","react","smart-contracts","solidity","truffle"],"created_at":"2024-10-11T08:44:40.898Z","updated_at":"2026-04-27T16:31:24.455Z","avatar_url":"https://github.com/nour-karoui.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"HELLO \u003cimg src=\"https://raw.githubusercontent.com/MartinHeinz/MartinHeinz/master/wave.gif\" width=\"30px\"\u003e This is RVL Faucet \u0026 RVL Crowdfunding\n---\n## 💰 What is RVL?\n\nIt is an **ERC20 Token** hosted on **Goerli Testnet**.  \n***RVL Token*** on **Goerli** address is: **0x858bdC45260c796C22f6E43765e79B6DDbfF5a2D**\n\n## ✂️ How is this project divided?\nThe project is divided into 3 main sections:\n1. ***Truffle-Crowdfunding:*** The truffle project, containing all the smart contracts used for this project and their deployments configurations.\n2. ***Crowdfund:*** The Dapp that allows users to interact with our smart contracts, create and fund projects. [*Visit Crowd Fund Me*](http://rvl-crowdfund-me.s3-website-us-east-1.amazonaws.com/)\n3. ***RVL-Faucet:*** The faucet that allows users to receive some RVL.\n[*Visit RVL-Faucet*](http://rvl-faucet.s3-website-us-east-1.amazonaws.com/)\n\n## 🙌 What is RVL Crowdfunding?\nIt is a **decentralized crowdfunding app** hosted on **Goerli Testnet** built with ***Truffle Framework***, ***ReactJs*** and ***ethers.js*** library.\n1. Any user can create a funding project and specify a budget.\n2. Any user can fund the project with **RVL Token** as long as the budget is not reached yet.\n3. Any user can request refunds as long as the budget is not reached.\n4. A project admin (creator) can update the project budget.\n5. An event listener is listening to when the project budget is reached.\n\n## 🎰 What is RVL Faucet?\nIn order to be able to fund projects, a user needs to **pocess some RVL**, that's why we created a ***faucet*** with ***ReactJs*** and ***ethers.js*** library, deployed on **Goerli Testnet** to fund any user with some RVL.\n\n## 🎯 Running and Testing the project\n\u003e **In order to just run the DApp, you can skip this section since the smart contracts are already deployed. This section is for those who want to run, modify and test the smart contracts whether locally or in a testnet**  \n\nAfter cloning this repo, we will start with running and testing the blockchain part.\n### 📒 The blockchain part\n\n---  \t\n\n#### In order to test the app locally, you need ***Ganache-cli***.  \n\u003e To deploy and test smart contracts locally, open a terminal and run this command.  \n```shell\n    ganache-cli\n```\n\n\u003e Deploying the contract on a Testnet takes more time than deploying it locally so be patient.  \n\nMake sure to create .env file following the **.env.example** file\n\nRun this command to install dependencies:\n```shell\n    cd truffle-crowdfunding\n    npm install truffle\n```\n\n**These are the main commands that would help you interact with our smart contracts:**  \n1. Compiling the contracts (this will generate a JSON file for each contract found in build/contracts)\n    ```shell\n        truffle compile\n    ```\n2. Deploying the contracts\n    ```shell\n        truffle migrate --network \u003cNETWORK_NAME\u003e\n        truffle run verify \u003cCONTRACT_NAME\u003e\n    ```\n3. Running unit tests\n    ```shell\n        truffle test --network \u003cnetwork-name\u003e\n    ```\n4. Interacting with the contracts\n    ```shell\n        truffle console --network \u003cnetwork-name\u003e\n    ```  \n    1. Instanciating the deployed contracts\n        ```shell\n        const rvlFacuet = await RVLFaucet.deployed()\n        const rvlToken = await RVLToken.deployed()\n        const projectsFactory = await ProjectsFactory.deployed()\n        const accounts = await web3.eth.getAccounts()\n        ```     \n    2. Funding the RVLFaucet\n        ```shell\n        # give access to rvlFaucet to transfer from accounts[0]\n        await rvlToken.approve(rvlFaucet.address, web3.utils.toWei('10', 'ether'), {from: accounts[0]})\n        await rvlFaucet.fundFaucet(web3.utils.toWei('10', 'ether'), {from: accounts[0]})\n        ```    \n    3. Using the faucet to fund accounts[1]\n        ```shell\n        await rvlFaucet.fundFaucet(accounts[1], {from: accounts[1]})\n        const balance = await rvlToken.balanceOf(accounts[1])\n        ```    \n    4. Create a new project\n        ```shell\n        await projectsFactory.createNewProject('test project', web3.utils.toWei('10', 'ether'), rvlToken.address, {from: accounts[1]})\n        const testProjectAddress = await projectsFactory.getProjectAddress('test project')\n        const testProject = await ProjectFunding.at(testProjectAddress)\n        ```    \n    5. Fund project\n        ```shell\n        await rvlToken.approve(testProject.address, web3.utils.toWei('1', 'ether'), {from: accounts[1]})\n        await testProject.fundProject(web3.utils.toWei('1', 'ether'), {from: accounts[1]})\n        ``` \n    6. Request refunds\n         ```shell\n        await testProject.refund(web3.utils.toWei('1', 'ether'))\n        ``` \n    6. Update project budget\n         ```shell\n         # throws an error because sender is not the owner of the transaction\n        await testProject.updateBudget(web3.utils.toWei('15', 'ether'), {from: accounts[0]})\n        # updates project budget successfully\n        await testProject.updateBudget(web3.utils.toWei('15', 'ether'), {from: accounts[1]})\n        ``` \n\n### 🚀 Running The Crowdfunding \u0026 Faucet DApp\n\n---  \t\n\n\u003e **The run the Faucet and Crowdfund you need both a Metamask wallet attached to your Browser, also you need some Goerli Ether**  \n\n\u003e You can get some Goerli ETH on [This Faucet](https://goerlifaucet.com/).\n\n\u003cimg width=\"358\" alt=\"image\" src=\"https://user-images.githubusercontent.com/47257753/211004734-9d0b3b93-606f-4270-9791-22ec10397e1b.png\"\u003e\n\n#### Running the DApps\nTo get some RVL Tokens.\n```shell\n    cd rvl-faucet\n    PORT=3001 npm start\n```\nTo interact with the crowdfunding app\n```shell\n    cd crowdfund\n    npm start\n```\n## 🔨 Areas of Improvements\n* Frontend improvements: automatic updates of UI Components whithout the need to refresh the page.\n* Make the smart contracts upgradable.\n* Implement the possibility to add and update project settings (description, ...).\n* Automate smart contract deployment and integration with the front (ABI, address).\n* Create unit the RVL Faucet.\n* Provide multiple ERC20 token options to fund projects.\n* Add more events to be emitted from solidity (CreateNewProject Event, FundProject Event, UpdateProjectBudget Event, ...).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnour-karoui%2Ffund-me","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnour-karoui%2Ffund-me","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnour-karoui%2Ffund-me/lists"}