Functional Props (Take 2)
New text has been highlighted
for easier differentiation between this prop and Prop 238.
TLDR
This is a resubmission of Prop 238, with a better explainer of the pros taking into account feedback, including two additional deliverables (and a bit higher ask for this reason).
- Finish development, testing and deploy a generalized NFT random distributor which enables any proposer to propose distribution of current or future NFTs in our Treasury. The distributor makes use of new tech I call “functional props”; meaning the prop itself determines how many NFTs to distribute at execution time as a function of the prop’s vote counts.
Now includes a Pull Request into the nouns.wtf front-end to allow for a better UX when proposing NFT distributions.
- Develop, test, audit and deploy a contract that enables proposers to ask for functional funding. Functional funding allows proposers to suggest a funding range within which they are willing to execute a prop. The actual funding amount received is determined by the prop’s vote counts.
Now includes a Pull Request into the nouns.wtf front-end to allow for better UX when proposing range or milestone funding.
Why Functional Props?
Cool tech, cool experiment. But how is it useful?
Historically, all DAO proposals have had binary outcomes (pass or fail). The time has come to invent tooling for DAOs to allow for non-binary outcomes on votes, and for Nouns to lead the way on this.
Take Prop 239 (comic book purchase) as an example. The DAO could be in agreement that it makes sense to purchase comic books, but not necessarily 5,000 of them. If the prop’s voting outcome were non-binary, the DAO would have had a way to simultaneously decide if it makes sense, and also how many comic books to print. Maybe the prop wouldn’t have had to be canceled.
For both NFT distribution and funding it’s a more efficient way of achieving “middle ground”; a form of consensus.
Think about it as a way of taking an on-chain average of all opinions.
The current alternative is an attention-deprived off-chain back and forth between proponent and community to arrive at a proposal price point or distribution number.
Past props where functional props would have been useful
Prop 236: Wizard’s Hat — determine the mint price of our NFT together at vote time, from a range.
Prop 223: House of Nouns — Implement milestones instead of all or nothing. Milestones are mapped to voting tiers. The more popular the prop is at vote time, more funding is sent and more features get implemented.
Prop 217: Stake an additional 5,000 ETH in LIDO — instead stake between 1,000-5,000 depending on the level of support for the prop.
Prop 206: Nouns on the Ground 2023 — Do tiered funding (5, 10, or 15 IRL events) instead of all or nothing.
Prop 202: nouns.eth set reverse record — in addition to executing, do we also send 1 ETH to Jacob? Depending on the popularity of the prop, we send between 0-1ETH.
Prop 184: Nouns funding ZachXBT — fund within range 50-100 ETH, instead of all or nothing.
Prop 167: Nouns Builder — seed the Builder treasury within a range (e.g. 500-1,000 ETH).
Prop 125: 8/8 anniversary art — only change existing traits if the vote is unanimous.*
Answers to common doubts on functional funding
What if a proposer that is willing to do work for 30 ETH proposes a range of 30-50 ETH to squeeze out more from the DAO?
A proposer is disincentivized to do so, as it increases the likelihood of the prop being defeated. It could also be argued conversely, that if functional funding wasn’t possible, the proposer could have proposed an all-or-nothing 50 ETH instead of a range where the DAO could save money if the prop passes, but barely. We can’t be certain if functional funding will make overall payouts larger or smaller, but we can be sure that funds will be allocated more efficiently as more granularity allows for concentrating capital where it needs to be.
If I support a proposal getting the lower part of the range, but not the upper part, how am I supposed to decide how to vote before the very last second?
Granted that this is a tricky aspect of functional funding. I give a two-part answer:
1. The question doesn’t apply to all props where functional funding could be useful. For example, take the hypothetical use for Prop 217 (staking in LIDO). If you are OK with staking 5,000 ETH, you are OK with staking 1,000. In this case, you it doesn’t really matter to you if you vote early or later. If you aren’t comfortable with staking up to 5,000 ETH, you vote against. You would have voted against Prop 217 in its non-functional funding incarnation anyway.
2. Granted that those who vote later have more information than those who vote earlier. However, those that vote earlier likely are OK with the entire range. Those that vote later will have more influence over the outcome. This is a net positive: a. those who are OK with the entire range are happy. b. those who want to control the range, can do so by voting later.
Even though the tech is innovative, I don’t see it being widely adopted
Refer to the section above where I highlight some use cases that make Nouns a more agile decision-making DAO.
The main mechanics of the DAO should stick to the KISS principle
The concern is that it should be made as simple as possible for Nouners to vote. I agree that simpler is better. Most props will not make use of functional funding and will stick to KISS. However, for those that it makes sense to make outcomes functional, if it’s more efficient for the DAO, it’s worth the marginal complexity.
Phase 1: Generalized NFT Distributor
Before functional funding comes functional NFT distribution.
I am the dev and proposer behind Prop 199 which passed 226 : 9. Prop 199 was a successful experiment to distribute 50 Nouns Vision Glasses from our Treasury to Nouners at random.
I have developed (inspect code here) a generalized version of the Nouns Vision Glasses distributor that allows for any proposer to propose random distribution of any ERC-721 in our Treasury to Nouners. This included development of a generalized version of the BatchTransfer contract 9999.⌐◨-◨ deployed for Prop 185.
As this deployment is not a one-off and meant to be a primitive the DAO can leverage at any time, plus the code is more complex, it requires more extensive testing. In addition, it requires a more complex custom front-end for the distribution claims.
Why do we need a generalized NFT distributor?
The Nouns DAO treasury continues to hoard NFTs as subDAOs such as Lil Nouns and Nouns Builder are “paying backwards” in the form of governance tokens.
It is likely that as the Nouns meme proliferates, more and more subDAOs will continue to do the same.
Historically, we haven’t used these NFTs to govern these subDAOs and to this date haven’t reached consensus as to whether it’s something we are interested in doing as a DAO.
There is no point in having NFTs in our treasury that we don’t plan on using. If we are to go down the alternate path, who better than Nouners to receive them and participate in subDAO governance in an individual, more decentralized manner.
Functional Distribution
The generalized NFT distributor has a new distribution mechanism baked in that allows the proposer to set the maximum number of NFTs to distribute. Then, if the prop passes, at execution time, the distribution contract calculates the number of NFTs to randomly distribute as a function of the vote (for, against, abstain) counts.
The proposer also selects the distribution amount calculation mechanism. This code extract shows the possible distribution rules the proposer can select from:
Proposer can select among the following distribution rules: Total turnout per Noun, Total Turnout minus abstain per Noun, For Votes, For Votes per Noun, For minus Against Votes, For minus Against Votes per Noun.
For example, the proposer might want to propose a distribution of some LilNouns in the treasury. The proposer is unsure of how many LilNouns the DAO is willing to distribute so he/she selects VotesFor as the distribution mechanism. Thus, the higher “For Vote” turnout (the more popular the prop was), the more LilNouns will be distributed.
Prop Execution
Here’s how proposing and execution works:

Phase 2: Functional Funding
I call “functional props” proposals that are self-referential at prop execution time. Initially I’m interested in exploring props that use vote counts (i.e., how many for/against/abstain) as inputs and take actions as a function of those inputs. We could imagine going beyond that to enable props that pull from a larger voter input-space such as vote reasons*.
Functional funding is a subset of functional props that enables an efficient way for the DAO to price proposals. The mechanism works as follows:
- Proposer writes a prop where he/she proposes to do some work for Nouns DAO.
- The proposer sets the prop transaction to call the FunctionalFunding contract and selects a funding range (e.g. 30-50 ETH) and distribution rule. This signals to the DAO that he/she is willing to do the work for a minimum of 30 ETH, but if the DAO as a whole signals that it values the work being done greatly (via strong FOR support), the proposer will get funded more than 30 ETH, up to 50 ETH.
- If the prop passes, when it executes it references itself, reading its vote counts to determine the funding amount according to the distribution rule.
- FunctionalFunding contract sends the calculated amount of ETH.
What does this solve?
For Proposers:
- Allows the proposer to do an all-in-one price discovery by “polling” all voters on-chain
- Lower probability of good proposals being rejected due to mere price → avoids going back, adjusting price and resubmitting
For Voters:
- Decision is less stressful as it’s less binary. You can be OK with the prop content and range and “delegate” decision of the price point to the rest of the voters
For Nouns DAO:
- All-in-one prop voting and efficient price discovery
- Proposals are more likely to be funded closer to “fair price” than the current binary funding mechanism
For the first time, allows the DAO to vote on proposals that need to pass unanimously to execute
Deliverables
- Trustless, immutable primitive contract-set that allow Nouners to propose random distribution of NFTs, where the final number of NFTs distributed is a function of proposal popularity.
- Front-end for claiming NFTs of said distribution rounds. Allows for multiple distribution rounds per NFT collection.
- Trustless, immutable primitive contract that allow Nouners to create proposals that are funded within a range as a function of proposal popularity.
UI on [nouns.wtf](http://nouns.wtf) similar to the USDC converter, that allows proposers to select and input parameters for functional NFT distributions or funding.
Positive feedback on Prop 238
The innovative approach to Human Organization presented here is a promising addition to the Nouns toolkit, which continues to lead the way with innovative public goods. I support the continued exploration of fresh governance approaches, such as the "Function Props" concept, which can leverage the benefits of large group decision-making.
I'm in favor of experimenting to find better mechanisms we can use to reach non-binary outcomes for proposals and for that reason I'm voting in favor. Even if this isn't used much or is used and we discover what the shortcoming is, that would be a plus in my book.
I think that it is important for the DAO to continue to explore new ways to use governance to resolve conflict, and I see "Function Props" as a promising direction here. They could offer a way to take advantage of the concave decision making advantage of large groups: where any point along the spectrum from 0 to 1 is higher value than either a 0 or 1 outcome.
innovative price discovery
Great way to put the NFTs in the treasury to work!
Sounds like this can be implemented, so I'm in full support. More than reasonable cost.
Digitaloil is demonstrably dedicated, creative and aligned with Nouns long term and wants to try and build a useful Nounish primitive. Let's see how he impresses.
i think the cost is fair, and it could also lead to new ideas to improve or offer alternatives to the current proposal constraints.
Nounish dev building nounish things - hopefully having funding methods like this save the dao money in the long term
nounishly positive
The range funding is the killer app here imo. Gives proposers with that flexibility the option to potentially get more vote support than a fixed rate.
Ask
38
ETH sent to me, DigitalOil.
If only I could propose a functional funding range 🤷♂️.
Funding breakdown
- 15 ETH — finish testing of NFT Distributor contracts. Develop generalized claim front-end.
- 20 ETH — Develop functional funding contract, including contract audit.
3 ETH — Pull requests into [nouns.wtf](http://nouns.wtf) front-end for a better UX and reduce friction when proposers choose to submit a functional prop instead of a binary prop.
*Note that using vote reasons as inputs to functional props would require a change to the governance contract as vote reasons are currently not introspectable at execution time.