FeedProjects
Developers
Settings
🎉 A new chapter begins: Boardroom has joined Agora
Learn more
protocol logo
Explore / Projects
Nouns DAO

Proposals

Members

Information

Create Proposal

Nouns DAO

ProposalsMembersInformation
ProposalExecutable Code
Back to Proposals
executedEnded 2 years ago Â·  Onchain

🔥 The Burn: audit funding

By 0xffAF...908d99

We are planning to propose an upgrade that implements The Burn. The goals for the burn are described in the blog post above by wilson.

This is a first draft of the proposal candidate through which we will ask the DAO to fund one or two audits of the implementation. We are putting it up even before we have quotes from auditors, in order to raise awareness among voters, stimulate the conversation, and listen to feedback.

Technical spec

We plan to deploy a new contract, with a single function that lets burn excess ETH from the timelock.

How much will be burned?

Excess ETH is defined as the difference between the treasury value denominated in ETH, and: adjusted_total_supply * trailing_N_day_mean_auction_price.

adjusted_total_supply is the number of minted nouns, excluding nouns held by the treasury or in the escrow contract.

In order to calculate the treasury value in ETH, the contract will consider only ETH, stETH, rETH & WETH. All other assets are ignored.

The number of auctions looked at when calculating the mean price is a configurable parameter; we suggest starting with 90.

Example based on numbers close to actuals:

Treasury has 2857 ETH, 10830 stETH, 228 rETH. Adjusted total supply: 394. Mean price of last 90 auctions: 30 ETH. Treasury value in ETH: 2857 + 10830 + 247 (228 worth of rETH) = 13,934 ETH. Excess ETH: 13,934 - 30 * 394 = 2114 ETH.

What is burned?

Only ETH is burned. If the Nouns runs out of ETH, it will need to swap other assets (e.g. stETH) into ETH to allow for more burn.

When can it be called?

The goal is for the burn to happen at predictable times. One parameter will define what will be the first noun id at which the first burn can happen. Another parameter will define how many noun ids need to be minted before the next burn can happen.

Example:

Suppose the first noun id is set to 1000, and the number of nouns between burns is set to 100. The first burn will be possible once a noun with id 1000 is minted. The next burn would be possible once a noun with id 1100 is minted.

Even if the first burn actually occurs when noun 1002 is auctioned, the next burn will still be possible starting id 1100.

Timelock upgrade

The timelock will be upgraded to a new version which will allow the burner contract to call it an burn ETH.

The timelock will only allow the burner contract to call it.

The address of the burner contract is a configurable param. Setting it to the zero address is effectively turning off the burn mechanism.

Audit costs

Our plan is to undergo a deep code review with solimander, and an audit with Sherlock. In a bit more detail:

  1. Soli review (+ verbs fix things)
  2. Sherlock audit
  3. Verbs fix things + soli reviews fixes
  4. Sherlock mitigation review

We are asking for 30K USDC to be sent to the Tech Grants Pod multisig to pay for the audit.

Next steps

Funding the audit will let us know the DAO wants the burn to be deployed. Once funded we will finalize the code, undergo the audit, and follow up with a proposal to upgrade the auction house contract and the treasury contract.

The upgrade will leave the burn disabled, since it seems best to separate the deployment of the mechanism from reaching consensus on its parameters. We will of course support any voters who will want to follow up with a proposal to set the burn parameters.

It’s also worthwhile for voters to consider converting stETH into ETH ahead of the burn, since as mentioned above this simple design only burns native ETH.

Appendix: pseudocode

ExcessETHBurner:


// configurable params:

uint numPastAuctions;

uint nextBurnNounId;

uint mintsBetweenBurns;

function burnExcessETH() {

    if (auction().nounId < nextBurnNounId) revert('Not yet');

    

    allowedTreasuryInETH = adjustTotalSupply() * meanAuctionPrice();

    excessETH = treasuryValueInETH() - allowedTreasuryInETH;

    amountToBurn = min(excessETH, timelock.balance);

    

    nextBurnNounId += mintsBetweenBurns;

    

    timelock.burnETH(amountToBurn);

}

function treasuryValueInETH() {

    return timelock.balance + stETH.balanceOf(timelock) + 

        wETH.balanceOf(timelock) + rETH.getEthValue(rETH.balanceOf(timelock));

}

function meanAuctionPrice() {

    return mean(auctionHouse.prices(numPastAuctions));

}

Appendix: current asset breakdown

At the time of writing this text, according to Etherscan:

  • Total treasury value is roughly $23.15M.
  • Its two main assets are:
    • ETH at $4.391M (2631.493 ETH).
    • stETH at $18.061M (10830.768 stETH).
  • These two assets alone make up over 96.7% of the total treasury value.
  • USDC is roughly 1.1% of the treasury, and we’re comfortable ignoring it for the sake of code simplicity.
  • wstETH is roughly 0.11% and is ignored as well.
Continue Reading
Connect Wallet to Add Note
0
Votes 48
VoterCast PowerVote & Rationale
0xf6B6...A9C863
22

AGAINST

0xFC21...976214
20

FOR

0x83fC...5045B9
19

FOR

0xDCb4...555E5e
16

AGAINST

0x008c...86A7e4
9

AGAINST

SHOW MORE
VOTE POWER
0
Connect Wallet
Proposal Status
  • Wed October 04 2023, 06:07 pmPublished Onchain 0xffAF...908d99
  • Sat October 07 2023, 06:36 pmVoting Period Starts
  • Wed October 11 2023, 07:20 pmEnd Voting Period
  • Wed October 11 2023, 07:23 pmQueue Proposal
  • Fri October 13 2023, 09:31 pmExecute Proposal
Current Results

1-FOR

80

53.69%

2-AGAINST

66

44.3%

3-ABSTAIN

3

2.01%
Quorum 149/39
DocumentationBrandingContact Us
Home
This Project is Currently Disabled

If you would like to enable it, please checkout below.

Boardroom Subscription

Sign up for an individual subscription (access all projects on the platform)

Subscribe
Enable Project

Enable the entire project for every user

Enable Project
Contact Us