Abstract

This document specifies the changes included in the Builder Protocol upgrade named "Bali."

Specification

  1. Token Reserve: Reserve n tokens for claiming when a DAO is created. Used for DAOs that want to offer reserved token claims via minters.
  2. Merkle Reserve Minter: Allow reserved token claiming via merkle proofs. Used for DAOs that want to include a preset list of members to claim tokens.
  3. L2 Migration Deployer: Helper contract that lets L1 DAOs deploy and seed a DAO on L2.
  4. Alternate Metadata Renderers: Allow current DAOs to set a new metadata renderer. Allow new deployments to choose an alternate renderer.
  5. Protocol Rewards: Rewards taken as a percent of protocol auctions distributed to bid referrals, DAO founders and BuilderDAO

Token Reserve

Allows DAO deployers to reserve n tokens for claiming via minters. Useful for deployers that want to use allowlists, presales or other claim systems.

Spec

Token.initialize

  • A DAO creator can choose to reserve the first n tokens for claimants using TokenParams.reservedUntilTokenId. When unpaused auction will start at the given tokenId

Token.mintFromReserve

  • Allows a minter to mint a token from the reserve to a given address

UI

  • Change token artwork display to show a placeholder for claimed tokens that have not been minted yet (these will have no artwork).

Merkle Reserve Minter

DAO deployers want to seed DAOs with specific members. Deployers can use MerkleReserveMinter.sol to set a merkle root with a list of users to claim and optionally set a cost to claim. Users can claim reserved tokens using merkle proofs.

Spec

setMintSettings

  • Allows the current DAO owner to set a merkle root, token price and start / end time.

mintFromReserve

  • Allows a caller to mint from the token reserve if they provide a valid merkle proof and msg.value.
  • Merkle leaf format: keccak256(abi.encode(claim.mintTo, claim.tokenId)))

L2 Migration Deployer

Users want to migrate DAOs from L1 onto L2. We are supporting DAOs moving from L1 to a set of OP stack L2s (optimism, base, zora) via this helper contract. This contract uses the Optimism CrossDomainMessenger.sol contract to get the L1 caller. The caller must set the L2MigrationDeployer.sol contract as the first founder (with 0 allocation) so it can manage setup. this ownership can be renounced once setup is complete. DAOs deployed via this contract will require a proposal to unpause auctions after renounceOwnership is called.

Spec

deploy

  • Deploys a DAO with the given paramters on L2
  • sets the merkle minter to allow L1 holders to claim
  • stores a mapping of the L1 caller => L2 DAO

resetDeployment

  • Resets the deployment mapping if a caller want to redeploy.

callMetadataRenderer

  • Allows the caller to make generic calls to its deployed metadata renderer.
  • This is a helper function so DAOs can deploy and set properties in one call.
  • This function uses generic calls to support custom metadata renderers.

depositToTreasury

  • Allows the caller to send value to it's deployed L2 treasury.

renounceOwnership

  • Transfers ownership of owned contracts (Auction / Toekn) to the Treasury

Custom Metadata Renderers

Users feel that the dynamic artwork system can be challenging to work with at times, so we're adding support for custom metadata renderers. New DAOs can pass in a renderer address on deployment and current DAOs can replace their renderer.

Spec

Manager.deploy

  • Allow users to pass in a custom metadata renderer using TokenParams.metadataRenderer

Manager.setMetadataRenderer

  • Allow the Token contract owner to change the DAOs metadata renderer.

Token.setMetadataRenderer

  • Allow the manager to change the tokens metadata renderer.

UI

  • Add support for new media types when rendering token artwork..
  • Change subgraph to work with generic metadata renderers.

Protocol Rewards

Builder Protocol Rewards is a rendition of the Zora Protocol Rewards model. This feature composes with the ProtocolRewards.sol contract from ourzora/zora-protocol/protocol-rewards repository. The final auction amount will be split three ways.

  1. BuilderDAO Rewards (Static %)
  2. Referral rewards (Static %)
  3. Founder rewards (Variable 0% - 30%)
  4. DAO Treasury (Remaining auction amount)

Manager.sol

  • BuilderDAO reward recipient is set as an imutable on contract deployment
  • Builder recipient is set here so it can be globally changed in future upgrades if needed.

Auctions.sol

  • BuilderDAO and Referral reward percentages set as an immutable on contract deployment so DAOs can opt in to new reward percentages.
  • A DAO founder can set a founder reward percentage and recipent in the initialization() call
  • clients can call createBidWithReferral() to set an address as a referral when placing a bid
  • _settleAuction() must payout rewards to ProtocolRewards.sol

UI

  • Add an explanation on protocol fees to the docs, create DAO page, Upgrade notes, and bid flow for upgraded/new DAOs.
  • Display a users available rewards on dashboard when wallet is connected
Select a repo