Donations
Donations
1
pragma solidity ^0.8.9;
import "./MultiSigWallet.sol";
import "./ProfileManager.sol"; // Assuming ProfileManager is a separate contract that manages profiles
contract Donation {
struct Campaign {
address owner;
string title;
string description;
uint256 target;
uint256 amountCollected;
uint256 totalWithdrawn;
string[] fundUtilization;
address[] donators;
MultiSigWallet multiSigWallet; // Separate MultiSig wallet for each campaign
}
constructor(address _profileManagerAddress) {
profileManager = ProfileManager(_profileManagerAddress);
donationContractAddress = address(this);
profileManager.setDonationsContract(donationContractAddress);
}
campaignCount++;
Campaign storage campaign = campaigns[campaignCount];
campaign.title = _title;
campaign.description = _description;
campaign.target = _target;
campaign.amountCollected = 0;
campaign.totalWithdrawn = 0;
campaign.owner = msg.sender;
campaignExists[campaignCount] = true;
}
donations[_campaignId][msg.sender] += msg.value;
campaigns[_campaignId].amountCollected += msg.value;
campaigns[_campaignId].donators.push(msg.sender);
// Use the specific campaign's MultiSig wallet for this withdrawal request
campaigns[_campaignId].multiSigWallet.createTransaction(_to, _amount);
}
campaigns[_campaignId].fundUtilization.push(_utilizationDescription);
}