Skip to content

Alike001/CrowdfundingDapp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

CrowdFund DApp (Solidity Project 1)

The CrowdFund DApp is a simple crowdfunding smart contract built with Solidity. It allows users to:

Create fundraising campaigns with a goal and description

Fund campaigns by sending ETH

Withdraw funds when the goal is reached

This project was part of my early journey in learning Solidity and blockchain development — focusing on understanding mappings, structs, functions, and ETH transfers.

Features

Create new campaigns with title, description, and funding goal

Fund existing campaigns using ETH

Automatically mark campaigns as completed when goals are reached

Withdraw funds safely once a campaign is completed

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract CrowdFund {
struct Campaign {
address owner;
string title;
string description;   
uint goal;
 uint amountRaised;
 bool completed;
    }
mapping (uint => Campaign) public campaigns;
uint public campaignCount = 0;

function createCampaign(string memory _title, string memory _description, uint _goal) public {
    campaigns[campaignCount] = Campaign({
        owner: msg.sender,
        title: _title,
        description: _description,
        goal: _goal,
        amountRaised: 0,
        completed: false
    });
    campaignCount++;
}

function fundCampaign(uint _id) public payable {
    Campaign storage campaign = campaigns[_id];
    require(_id < campaignCount, "Campaign does not exist");
    require(!campaign.completed, "Campaign already completed");
    require(msg.value > 0, "You must send some ETH");

    campaign.amountRaised += msg.value;
    if (campaign.amountRaised >= campaign.goal) {
        campaign.completed = true;
    }
}

function withdraw(uint _id) public {
    Campaign storage campaign = campaigns[_id];
    require(msg.sender == campaign.owner, "Not campaign owner");
    require(campaign.amountRaised > 0, "No funds to withdraw");

    uint amount = campaign.amountRaised;
    campaign.amountRaised = 0;

    (bool success, ) = campaign.owner.call{value: amount}("");
    require(success, "Transfer failed");
}
 }

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors