---
# System prepended metadata

title: Funding Dapp

---

# Funding Dapp

### Structure

### Contract


Contract state:
- Contract name
- Contract owner (possibly multiple admins later on?)
- Funding pool (how to store this, do we support multiple coins?)
- Proposer address whitelist
- Voter address whitelist
- Proposal period
- Voting period
- Min proposal period
- Min Voting period
- Funding formula (bonus)
- Proposals list
	- Proposal ID
	- Recipient address
	- Description
	- Structured meta-data (optional)
- Votes list
	- Sender address
	- Coins sent
	- Proposal ID



Contract

- Constructor()
	- Coins for funding pool
	- Proposer address whitelist
	- Voter address whitelist
	- Proposal period
	- Voting period
	- Proposal start datetime
	- Proposal end datetime
	- Voting start datetime
	- Voting end datetime
	- Min proposal period
	- Min Voting period
	- Funding formula (bonus)
- Start proposal period()
- End proposal period()
- Start voting period()
- End voting period()
- Distribute funds(): collate state.votes by voter address, then apply quadratic funding

### Proposal

Proposal
- Constructor
	- Proposal description
	- Recipient address
	- Structured metadata (bonus)
- Do we need Edit and Delete methods?

### Vote

Vote
- Constructor
	- Coins for vote
	- Proposal ID
- Can a voter modify their vote once it's been cast? => No





## Messages

- Init
    - contract name
    - funding_coins
    - proposer_list
    - voter_list
    - proposal_start
    - proposal_end
    - vote_start
    - vote_end
- CreateVote
- CreateProposal
- GetContractStatus (? or could just dump contract state)
- DistributeFunds
- RefundFunds (?)
- GetProposalById (bonus)
- StartProposalRound
- EndProposalRound
- StartVotingRound
- EndVotingRound