Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
How to create a proposal
A Proposal is used to propose a DAO transaction or to propose a split of the DAO (by choosing a new Curator).
This is done by calling the
NewProposal function, which has 6 parameters that need to be set:
recipientThe recipient of the transaction. This is an address, which can only be the address of the DAO itself, the Curator or an address on the whitelist
allowedRecipients. Any other address will throw an exception, blocking you from creating a new proposal. The whitelist is curated by the Curator, and only they can add/remove addresses to/from that list. There is an exception to this rule. When making a proposal for a new Curator, the
recipientis the address of the proposed Curator (typically a multisignature account of trusted people, or in the case a user is splitting to form their own personal DAO, their own account address).
amount: The amount of wei (
1 = 10^-18 ether) to be sent from the DAO to the
recipientin the proposed transaction.
description: A short plain text description of the proposal.
transactionData: The data of the proposed transaction. This is used to call functions in the case the
recipientis a smart contract, and optionally to provide the function parameters of this smart contract to the DAO itself.
debatingPeriod: The amount of time (in seconds!) to debate and vote on the proposal. Unless this is a proposal for a new Curator, this has to be at least 2 weeks (
= 1209600seconds). For a new Curator proposal the minimum is 1 week. It is suggested to have a longer debating and voting period for controversial proposals or when a high amount of ether is proposed to be transferred. The maximum debating period is 8 weeks (
newCurator: This is a bool which can only be
false. This is
truein the case this is a proposal for a new Curator,
Send ETHER: For a regular proposal there is a minimum Proposal Deposit required, which can be read from the contract using the
proposalDepositfunction and is input using the base units of the DAO token (
1 = 10^-16 DAO tokens). The sender of the transaction can choose to pay a higher deposit. The GUI for the DAO (work in progress) will sort the Proposals, ordering them by the Proposal Deposit amount. Therefore increasing the deposit amount can be used to advertise or prioritize certain Proposals. The Proposal Deposit is paid back when the Proposal gets executed and the quorum is met. Depending on the proposed amount of ETH to be transferred, this is between 20% and 53.33% of all tokens (see Eq. (1) in the whitepaper). NOTE: For childDAOs there is no minimum Proposal Deposit required.
If any of these parameters are set incorrectly, the transaction will fail because the function will throw an exception. This is to protect the user from losing their Proposal Deposit.
The sender of the transaction needs to be a DAO Token Holder. In the case this is a new curator proposal, the
transactionData should be empty and the
amount as well as the amount of ether sent sent with the transaction calling the
NewProposal function should be zero.
It is always best to test any smart contract fully on a testnet before including it as a Proposal.
Do not propose transactions which may throw exceptions when they get executed. This will lead to you losing your deposit to the DAO. Such Proposals will be closed after a short grace period.
Also make sure that the sender is not a smart contract with a fallback function needing more than
9000 gas to get executed. This will make it impossible to pay back the Proposal Deposit and the Proposal will not be executed.