How to create a proposal - TheDAO/DAO-1.0 GitHub Wiki

DAO Wiki - Reliable

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:

  • recipient The 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 recipient is 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 recipient in 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 recipient is 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 (= 604800 seconds). 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 true or false. This is true in the case this is a proposal for a new Curator, false otherwise.

  • Send ETHER: For a regular proposal there is a minimum Proposal Deposit required, which can be read from the contract using the proposalDeposit function 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).

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.

Warning:

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.