Pandemic Response Fund Contract
What it does:
Pools funds to support pandemic response efforts such as vaccine distribution, medical supplies, and emergency healthcare services.
Why it matters:
Enables rapid, transparent allocation of resources during health crises, ensures funds reach verified responders, and reduces administrative delays.
How it works:
-
Donors contribute funds to the pandemic response pool
-
Authorized agencies or hospitals register for fund access
-
Agencies submit requests with purpose and required amount
-
DAO members or admin approve fund disbursement
-
Smart contract releases funds automatically once approved
-
Spending and milestones are tracked on-chain
-
Unused funds can be returned to the pool or reallocated
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
/**
* @title PandemicResponseFund
* @author Nam
* @notice Emergency fund management for pandemic response
*/
contract PandemicResponseFund {
// -------------------- ROLES --------------------
address public admin;
uint256 public requestCount;
// -------------------- STRUCTS --------------------
struct FundRequest {
address agency;
string purpose;
uint256 amount;
bool approved;
bool executed;
}
// -------------------- STORAGE --------------------
mapping(uint256 => FundRequest) public requests;
// -------------------- EVENTS --------------------
event Funded(address indexed donor, uint256 amount);
event RequestSubmitted(uint256 indexed requestId, address indexed agency, string purpose, uint256 amount);
event RequestApproved(uint256 indexed requestId);
event FundsDisbursed(uint256 indexed requestId, uint256 amount);
// -------------------- MODIFIERS --------------------
modifier onlyAdmin() {
require(msg.sender == admin, "Not admin");
_;
}
// -------------------- CONSTRUCTOR --------------------
constructor() {
admin = msg.sender;
}
// -------------------- FUNDING --------------------
/**
* @notice Donate to the pandemic fund
*/
function donate() external payable {
require(msg.value > 0, "No funds sent");
emit Funded(msg.sender, msg.value);
}
// -------------------- FUND REQUESTS --------------------
/**
* @notice Submit a fund request
*/
function submitRequest(string calldata _purpose, uint256 _amount) external {
require(_amount > 0, "Invalid amount");
requestCount += 1;
requests[requestCount] = FundRequest({
agency: msg.sender,
purpose: _purpose,
amount: _amount,
approved: false,
executed: false
});
emit RequestSubmitted(requestCount, msg.sender, _purpose, _amount);
}
/**
* @notice Approve a fund request
*/
function approveRequest(uint256 _requestId) external onlyAdmin {
FundRequest storage r = requests[_requestId];
require(!r.approved, "Already approved");
r.approved = true;
emit RequestApproved(_requestId);
}
/**
* @notice Disburse funds for an approved request
*/
function disburseFunds(uint256 _requestId) external onlyAdmin {
FundRequest storage r = requests[_requestId];
require(r.approved, "Not approved");
require(!r.executed, "Already executed");
require(address(this).balance >= r.amount, "Insufficient balance");
r.executed = true;
payable(r.agency).transfer(r.amount);
emit FundsDisbursed(_requestId, r.amount);
}
// -------------------- FUNDING RECEIVED --------------------
receive() external payable {}
}