Working with Proposals
Staking tokens in the DAO pool gives you governance rights to create and vote on proposals.
To create a proposal, you must not have created a proposal in the last seven days and you must hold at least 0.1% of the total staked tokens in the pool. This required percentage, as well as other DAO parameters, can be adjusted by the DAO as described in Dashboard Attributes upon acceptance using a proposal. To view the percentage of staked tokens in the pool for an address, visit the DAO Tracker wallets page.
You can vote on all proposals regardless of the percentage of staked tokens in the pool you own. See How to Vote for instructions. Alternatively, you can delegate your voting power to someone else. See the delegation pitch section of the API3 forum for posts by community members offering to act as delegates or to post your own delegate pitch.
Proposals and History
The Governance page displays a list of active proposals and the History page displays proposals that have been executed or rejected. Watch the Deposit and Withdraw video.
Navigate to the Governance page.
Here you can browse and create proposals, view the treasury, and delegate your votes. The Active Proposals box lists all proposals open for voting.
There are two types of proposals, primary and secondary. Primary proposals require an absolute majority vote, while secondary proposals require a 15% vote to pass. For each proposal in the list you can see the title, proposal type, vote deadline, and vote status.
To view additional details click on the desired proposal. The detail view shows your vote delegation status and a Summary section with the details of the proposal.
To view previous governance proposals, navigate to the History page.
The Past Proposals box shows proposals that have either been executed or rejected.
Proposal Creation
Proposals are an important part of DAO governance, and can be used to fund DAO projects or ratify DAO level decisions like updating the stake target. Following is a short list of requirements a DAO member must meet to create proposals.
- You haven't created a proposal in the last 7 days. checked
- You need at least 0.1% of the total vote representation to create a proposal.
Promote
Creating a proposal is a process and is highly recommended, and to some extent expected, for your proposal to succeed.
- Promote your idea and gather feedback on the API3 forum using a sentiment check post. Generally, ideas receiving community engagement on the forum are more likely to pass once crafted as official proposals.
- Create an official proposal post on the API3 forum. This should contain a link to the proposal description on IPFS.
- After receiving feedback from the above steps, create a formal proposal using the DAO dashboard as described below.
Public Address and ENS Names
For public addresses use the checksum version of the address where some alphabetical characters are capitalized. Copy your address to etherscan to get its checksum value. ENS names are allowed. See the Using ENS Names section below.
USDC Precision
USDC uses 6 decimal places of precision as opposed to 18 that many other ERC20 tokens use. Add 6 zeros after the amount you are asking for.
Create
Watch the Create a Proposal video. To create a new proposal using the DAO dashboard:
Click the New Proposal button on the Governance page.
Select the Proposal Type on the proposal form.
Proposals can be submitted to either the Primary or Secondary voting types. These two types have access to separate treasuries, have different voting settings, and have different permissions to change contract settings. For a technical breakdown of the different permissions granted to the DAO's proposal types (and corresponding Agents) see this README.
Enter a descriptive Title.
The title will appear on the Governance page and is used to identify the proposal. A good descriptive title will help others navigate the proposal list.
Enter a Description that details the proposal.
A description can be typed text but consider using a PDF hosted on IPFS. See the Using IPFS for Proposals section below. Also consider adding a link back to the forum where you posted your proposal for discussion.
Enter the Target Contract address.
This is the address of the contract to call. For example the commonly used target contract for USDC is
0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
.Enter the Contract Target Signature.
Defines the signature of the function to call within the target contract. For the target contract USDC mentioned above use
transfer(address,uint256)
. Do not use any spaces in the signature: leading, trailing or otherwise.Enter an ETH Value.
You can use zero if the target function is not
payable
.Enter Parameters which are the arguments that will be used to satisfy the signature of the target contract function in step #6.
In the case of step #5 above, the address
0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
is for the USDC contract. You will be calling itstransfer
function, as indicated in step #6, should the proposal pass.The arguments must be provided in JSON array format where the values are stringified.
["0xF4EB52Cf9D31a...d1663d78ddDEE9","499999000000"]
In the example directly above, the respective Agent (primary or secondary ) would be calling the USDC contract (
0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
) to transfer 499,999 USDC to0xF4EB52Cf9D31a...d1663d78ddDEE9
. Note that sincetransfer(address,uint256)
function transfers funds from the sender to the specified address, the USDC is asked to be supplied from the Agent's balance.USDC uses 6 decimal places of precision as opposed to 18 that many other ERC20 tokens use. Consequently, multiply the desired $USD by 10^6 to get the USDC amount to enter.
When you are ready, click the Create button at the bottom of the page.
The proposal is then added to the proposal list and can be voted on.
Return to the API3 forum and add a comment to your post with a link to your newly created proposal. This will help and encourage community members to vote.
Proposal Execution
A proposal is ready for execution if:
- The proposal hasn't already been executed, and
- the proposal's voting period has ended, and
- the total "yes" vote exceeds the "no" vote, and
- (for Secondary type proposals) at least 15% of all voting power has voted "yes" on the proposal.
Primary type proposals require 50% of all voting power to have voted "yes" on the proposal. Both primary and secondary type proposals execute immediately once 50% of all voting power has voted "yes" on them.
Using ENS Names
You are encouraged to use the ENS app to register a name and associate it with an Ethereum account. Then, while entering your proposal parameters, you can use this ENS name instead of the account address. Before making the transaction that will create the proposal, the DAO dashboard will look up the address that the ENS name is pointing to and use the raw address in the proposal. Therefore, changing the address that the ENS name is pointing to after this look up operation WILL NOT have an effect on the proposal.
For voters to see your ENS name instead of the raw address on the proposal details page, you will have to use the ENS app to set a reverse record pointing to your ENS name (i.e., you need to have your raw address point to the ENS name). If your proposal will make a transfer(address,uint256)
call to an ERC20 token contract where address
is the address of a multisig wallet, you can set a reverse record with the multisig to your ENS name. See Parameters in this proposal for an example.
Using IPFS for Proposals
Consider this use case: You posted on the API3 forum about a potential proposal. You received positive feedback and decide to formally create a proposal using the DAO dashboard. In the proposal's description field you provide a link back to the forum so people can again see the proposal details. How does the voter know that it's the exact same proposal they had read earlier in the forum? IPFS addressing content by its hash is convenient here, because any change you'll make to your proposal will change its hash.
There are hosting services for IPFS such as Pinata and Fleek to name a few. To host a proposal description on Pinata's IPFS site:
- Create a PDF version of the proposal.
- Upload the PDF to Pinata or your preferred IPFS hosting provider. To do so using Pinata, select the Files menu from the sidebar on your personal Pinata dashboard, then select the Add Files button. Drag the desired file into the upload dialog.
- After the file is uploaded, Pinata will create a URL with the IPFS hash for the PDF. Simply click on the file's link to display the PDF and copy its URL from the browser URL bar.
- Add the URL to your forum posting and later to the description field of your DAO dashboard proposal.
Remember that the URL the voter sees in the DAO dashboard proposal description field is final and should match the URL on the forum.
Updating a PDF
You can update your PDF if needed before creating a formal proposal using the DAO dashboard. First, upload the new version to your IPFS provider; since the content has changed, it will get a new hash. Next, update the link in your forum posting. Lastly, create the proposal using the DAO dashboard. Since the proposal contains the IPFS hashed link in the description field, the PDF should be considered final and changing the hashed link in the forum at this point would caution the voter.
FLEX_END_TAG