The Ethereum FAO
Here is a proposal to create an optimizer that is fully autonomous, and that optimizes the price of WETH/DAI.
Core Futarchy Contracts
- FutarchyOracle
- Creates and manages a “Condition” with two outcomes: pass or fail.
- Uses Uniswap V3 pools for both outcomes to check price signals.
- If liquidity is less than a defined minimum value at any given moment, the proposal instantly fails.
- After a minimum window, computes a TWAP (Time-Weighted Average Price).
- If the “pass” outcome trades at least at a certain threshold above the “fail” outcome, the pass check succeeds. Otherwise, the proposal fails.
- Optionally applies a random “failure” check (via FutarchyRandomFailure) even if the price check passes, to ensure a minimum cost to manipulating the “fail” price.
- Reports final resolution back to the Gnosis Conditional Tokens framework.
- FutarchyGovernor
- Creates, tracks, and executes proposals.
- Each proposal references one conditionId in the Gnosis Conditional Tokens system, which must be resolved by the FutarchyOracle.
- Once a proposal is resolved (pass or fail), it can be executed if it has passed (i.e., the “pass” outcome is 1 in the conditional tokens’ payout vector).
- Applies the outcomes by calling target contract methods with specified data.
- FutarchyProposerGuard
- Sits in front of the FutarchyGovernor to ensure proposals come from the authorized proposer address, and meet certain criteria (e.g., correct setup of conditional tokens, correct Uniswap V3 pools, correct minimum liquidity, etc.).
- Verifies that the FutarchyOracle and its associated pass/fail pools are valid for the given condition ID.
- If valid, it forwards the proposal creation request to FutarchyGovernor.
Create Your Futarchy
To create your own futarchy, you need to specify two token addresses, TOKEN and CURRENCY, alongside a few other parameters (minimum liquidity, TWAP window, random failure chance). You also need to specify the proposer address which is allowed to create proposals (e.g. an instance of the ProposalManager listed at the end). The FAO will optimize for the TOKEN/CURRENCY ratio.
You are now ready to transfer powers to your FutarchyGovernor. For example you may give it:
- Control of some treasury
- Control over protocol parameters
- Veto power in some governance decisions (e.g. over token minting)
Additional Contracts
- ProposalManager
- Performs dutch auctions of numbered NFTs representing the right to make proposals in a given futarchy.
- Ensures each NFT can only be used once, and targets a given number of unused NFTs.
- Invalidates NFTs whose owners do not submit proposals on a timely manner.
- FutarchyRewardManager
- Controls a reward pool that will be distributed to those responsible for impactful proposals.
- Reward is proportional to the proportional gain in the
TOKEN/CURRENCY ratio, as evaluated by the FutarchyOracle.
- Reward is paid to the owner of the NFT associated with the proposal.
- Optionally, reward is only paid if proposal is later considered successful, as determined by a separate oracle.
- FutarchyLiquidityManager
- Manages protocol-owned liquidity for FAOs and other conditional market applications.
- Authorized proposers can submit a condition for liquidity splitting; on such call, the contract withdraws liquidity from “base pool” and splits it into a “yes pool” and a “no pool”.
- Once the condition is settled, any caller can trigger the redemption all conditional tokens from the conditional pools and their secure merger back into the base pool, allowing for a new split for a new condition.
Possibilities for proposals
- Using X% of the treasury to create a liquidity pool, and depositing the LP tokens into the FutarchyLiquidityManager to provide liquidity to conditional pools for all future proposals.
- Allocating tokens for the FutarchyRewardManager, We recommend generous rewards on the order of 10%+ of the total increase in market cap from a proposal (e.g. 1% of FAO supply as a reward for a proposal increasing FAO price by 10%).
- Funding for a development team (e.g. minimum of 500 ETH, 20% of total raise) for development of tools useful for Futarch