Skip to content

Instantly share code, notes, and snippets.

@alex-damjanovic
Created November 21, 2021 20:34
Show Gist options
  • Select an option

  • Save alex-damjanovic/ce3bf987c719a23d7ea3a8b370546846 to your computer and use it in GitHub Desktop.

Select an option

Save alex-damjanovic/ce3bf987c719a23d7ea3a8b370546846 to your computer and use it in GitHub Desktop.
Created using remix-ide: Realtime Ethereum Contract Compiler and Runtime. Load this file by pasting this gists URL or ID at https://remix.ethereum.org/#version=soljson-v0.8.7+commit.e28d00a7.js&optimize=false&runs=200&gist=
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/// @title DonationPlatform
/// @author Aleks
/// @dev So far didnt spot any errors
import "@openzeppelin/contracts/access/Ownable.sol";
contract DonationPlatform is Ownable {
// creating campaign attributes
struct Campaign {
string name;
string description;
uint256 goal;
uint256 deadline;
uint256 raised;
bool isComplete;
}
event CampaignCreated(uint Id, Campaign);
event DonationSent(uint Id, uint value);
// address containing nft tokekn's address
uint256 campaignCount = 0;
mapping (uint => Campaign) public campaigns;
function addCampaign(
string memory _name, string memory _description,
uint _goal, uint _deadline
)
public onlyOwner {
campaignCount +=1;
campaigns[campaignCount] = Campaign(_name, _description, _goal, _deadline + block.timestamp,0, false );
emit CampaignCreated(campaignCount, campaigns[campaignCount]);
}
function donate(uint id) payable public {
require(block.timestamp < campaigns[id].deadline, "Campaign is over!");
require(!(campaigns[id].isComplete), "The goal was already achieved!");
campaigns[id].raised += msg.value;
if (campaigns[id].raised + msg.value > campaigns[id].goal) {
uint _amount = campaigns[id].raised - campaigns[id].goal;
campaigns[id].raised -= _amount;
campaigns[id].isComplete = true;
(bool success, ) = msg.sender.call{value:_amount}("");
require(success, "Transfer failed.");
} else if (campaigns[id].raised == campaigns[id].goal) campaigns[id].isComplete = true;
emit DonationSent(id, msg.value);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment