📝

Decent x Allo Project Spec

Goals
  • Macro: create new funding model for creators to reward their contributions to the initiatives of matching pool sponsors (e.g., Optimism, Music, Crossmint)
  • Macro: create a more positive sum alternative than traditional advertising models (e.g., spend $10K sponsoring a grant pool that will drive direct contributions vs. that money going to Google or Facebook)
  • Decent: increate the number of transactions on our platform
  • Gitcoin: demonstrate an exciting implementation of the Allo Protocol
Requirements
Front End:
  • Replace Decent spotlighted release with cards for active funding rounds
  • can click into each card to view:
    • Matching pool fund amount + sponsor logos
    • current leaderboard (ranked by payout amount if grant round were to end)
      • NEW PAGE TO HQ
    • can click on each project from leaderboard to go to their Decent collection page (or wherever the project’s main page is)
notion image
 
  • Opt into grants on contract creation page (valid for Editions, Series + Rentable contracts):
    • register in project registry & then apply — these are separate txns: expectation for contract is they’re first in the project registry
    • each application to a round requires a separate txn — how we’re doing admin page where they’d have to confirm multiple txns potentially
notion image
 
  • withdraw grant proceeds:
    • one tricky part is we have Splits enabled in our contracts; would ideally like to be able to split grant proceeds as well between accounts that are listed on the splits contract for the NFT
notion image
Back End:
  • Deploying a new program
    • Creating a perpetual round within the program: if we want to distribute matching funds monthly, do we need a new round each month?
      • Would like as little manual setup / involvement as possible. Want grant recipients to be able to withdraw at the end of each month + sponsors refill the matching pools; cleanest to do as separate rounds though? What if recipient doesn’t withdraw right away?
      • Should all submissions go live for a round at the same start date? What if someone opts into a round mid-month? Automatically included in the next month’s cycle?
  • Submitting an application:
    • Want this to just be a checkbox on a create contract page; requires no additional information or effort beyond deploying an NFT and opting into a certain round
      • we can display what rounds are currently taking applications
Allo Roles:
  • Program operators: just Decent
  • Program: thinking just 1?
  • Rounds: thinking divide by sponsor groups, each 1 month long
  • Voter: minters / NFT collectors
 
Voting Strategy:
  • voting token = NFTs minted (lmk if this makes sense?)
  • Gitcoin style quadratic voting; however, will interpret the NFT txn value as the “amount”
  • voter address = collector address
  • round address = round address
  • project Id = NFT contract address (+ chainId)
Payout Strategy:
  • is the round operator the only one that can initiate a payout? would ideally like this to be more like a withdraw function that calc’s amt’s each project ID owner can claim
  • QF on distribution of funds to match voting strategy
Voter Qualification / Sybil Resistance:
  • Do not particularly care whether it is real people or bots minting NFTs / voting but do recognize it could then be easy to game the sytem
  • (doing more research / might not be possible but…) Acceptable sybil resistance for us = real users minting is always a higher EV strategy than spam wallets
Out of Scope
  • Management dashboard
    • Decent & sponsors don’t really need to know what’s going on or manage the funding rounds beyond what is described above
    • ONLY thing that would be useful would be ability to delete projects from funding rounds if someone errantly uploads a contract or something
    •  
4/7 - Notes:
  • Start with 1 round at a time — just one anchor sponsor
  • Round operator = just us to start
    • eventually open up so anyone can create a round & those people can then be operators
  • for the project registry:
    • need to establish an address to which the grant should be paid out: can have this be the creator address or splits address (that’s good)
    • opting in should happen on admin page to work better w. that flow
  • acceptance:
    • there’s a couple of periods in the round timeline that relies on the acceptance:
      • there’s a voting period, acceptance period, then round contributions start // voting starts
      • Zakk asking w. product team if we can just automatically add all NFTs that opt in to
  • voting / payouts:
    • right now QF is really just transferring DAI
    • first DAI goes to voting strategy contract & then can withdraw from the voting strategy contract
    • minting = calling “vote” (Zakk to spec this out a little more)
      • mint to yourself
      • sign txn: calls vote method on the round, which then calc’s the vote & the voting strategy
      • instead of transferring that $ to the recipient we’ll send this money into the
      • vote method on the voting strategy calls the mint method on the contract
    • voting strat doesn’t receive funds from the matching pool — just calcs payouts
    • payout strat can use what they do — just a matter of recording the events & calc-ing distribution
      • you then pass distribution calcs as a merkle root to the voting strategy contract
    • round holds matching pool; when round finishes, transfers fund from round to the voting strategy ⇒ protocol assumes matching pool funds start in the round contract & 2 you use a different voting strategy contract with each round
      • voting strategy & round contracts are not recyclable — new one each time
  • Eng Work:
    • Will need to write voting strat contract (200 lines solidity)
    • Frontend:
      • opt into round & get into registry
        • new tab on admin page
      • approve for round
      • update mint method if NFT is in round to call voting strat vs. mint method directly
    • Management:
      • rounds have application period & voting period (4 week application period + 4 week voting period so that there’s always a round applying to)
        • can use some bot wallets to just deploy a new round every month (otherwise can just do manually)
        • then have to integrate these new rounds into FE
 
  • for management, we’ll just use their Grant Stack manager dashboard
  • will require custom voting strategy contract
    • not too heavy of a lift
    • will be fair amount of frontend
  • launch this in mid-June
    • can figure out firm launch date & strategy as it gets closer
    • this timeline sounds good to them → block off middle-week of June as Decent x Allo launch week & can work backwards from there
  • we’ll try to finish the brief & design work & OP grant ahead of time
  • for next Friday:
    • have first draft of feedback & finish the product spec
 
📝

Decent x Allo Project Spec

Goals
  • Macro: create new funding model for creators to reward their contributions to the initiatives of matching pool sponsors (e.g., Optimism, Music, Crossmint)
  • Macro: create a more positive sum alternative than traditional advertising models (e.g., spend $10K sponsoring a grant pool that will drive direct contributions vs. that money going to Google or Facebook)
  • Decent: increate the number of transactions on our platform
  • Gitcoin: demonstrate an exciting implementation of the Allo Protocol
Requirements
Front End:
  • Replace Decent spotlighted release with cards for active funding rounds
  • can click into each card to view:
    • Matching pool fund amount + sponsor logos
    • current leaderboard (ranked by payout amount if grant round were to end)
      • NEW PAGE TO HQ
    • can click on each project from leaderboard to go to their Decent collection page (or wherever the project’s main page is)
notion image
 
  • Opt into grants on contract creation page (valid for Editions, Series + Rentable contracts):
    • register in project registry & then apply — these are separate txns: expectation for contract is they’re first in the project registry
    • each application to a round requires a separate txn — how we’re doing admin page where they’d have to confirm multiple txns potentially
notion image
 
  • withdraw grant proceeds:
    • one tricky part is we have Splits enabled in our contracts; would ideally like to be able to split grant proceeds as well between accounts that are listed on the splits contract for the NFT
notion image
Back End:
  • Deploying a new program
    • Creating a perpetual round within the program: if we want to distribute matching funds monthly, do we need a new round each month?
      • Would like as little manual setup / involvement as possible. Want grant recipients to be able to withdraw at the end of each month + sponsors refill the matching pools; cleanest to do as separate rounds though? What if recipient doesn’t withdraw right away?
      • Should all submissions go live for a round at the same start date? What if someone opts into a round mid-month? Automatically included in the next month’s cycle?
  • Submitting an application:
    • Want this to just be a checkbox on a create contract page; requires no additional information or effort beyond deploying an NFT and opting into a certain round
      • we can display what rounds are currently taking applications
Allo Roles:
  • Program operators: just Decent
  • Program: thinking just 1?
  • Rounds: thinking divide by sponsor groups, each 1 month long
  • Voter: minters / NFT collectors
 
Voting Strategy:
  • voting token = NFTs minted (lmk if this makes sense?)
  • Gitcoin style quadratic voting; however, will interpret the NFT txn value as the “amount”
  • voter address = collector address
  • round address = round address
  • project Id = NFT contract address (+ chainId)
Payout Strategy:
  • is the round operator the only one that can initiate a payout? would ideally like this to be more like a withdraw function that calc’s amt’s each project ID owner can claim
  • QF on distribution of funds to match voting strategy
Voter Qualification / Sybil Resistance:
  • Do not particularly care whether it is real people or bots minting NFTs / voting but do recognize it could then be easy to game the sytem
  • (doing more research / might not be possible but…) Acceptable sybil resistance for us = real users minting is always a higher EV strategy than spam wallets
Out of Scope
  • Management dashboard
    • Decent & sponsors don’t really need to know what’s going on or manage the funding rounds beyond what is described above
    • ONLY thing that would be useful would be ability to delete projects from funding rounds if someone errantly uploads a contract or something
    •  
4/7 - Notes:
  • Start with 1 round at a time — just one anchor sponsor
  • Round operator = just us to start
    • eventually open up so anyone can create a round & those people can then be operators
  • for the project registry:
    • need to establish an address to which the grant should be paid out: can have this be the creator address or splits address (that’s good)
    • opting in should happen on admin page to work better w. that flow
  • acceptance:
    • there’s a couple of periods in the round timeline that relies on the acceptance:
      • there’s a voting period, acceptance period, then round contributions start // voting starts
      • Zakk asking w. product team if we can just automatically add all NFTs that opt in to
  • voting / payouts:
    • right now QF is really just transferring DAI
    • first DAI goes to voting strategy contract & then can withdraw from the voting strategy contract
    • minting = calling “vote” (Zakk to spec this out a little more)
      • mint to yourself
      • sign txn: calls vote method on the round, which then calc’s the vote & the voting strategy
      • instead of transferring that $ to the recipient we’ll send this money into the
      • vote method on the voting strategy calls the mint method on the contract
    • voting strat doesn’t receive funds from the matching pool — just calcs payouts
    • payout strat can use what they do — just a matter of recording the events & calc-ing distribution
      • you then pass distribution calcs as a merkle root to the voting strategy contract
    • round holds matching pool; when round finishes, transfers fund from round to the voting strategy ⇒ protocol assumes matching pool funds start in the round contract & 2 you use a different voting strategy contract with each round
      • voting strategy & round contracts are not recyclable — new one each time
  • Eng Work:
    • Will need to write voting strat contract (200 lines solidity)
    • Frontend:
      • opt into round & get into registry
        • new tab on admin page
      • approve for round
      • update mint method if NFT is in round to call voting strat vs. mint method directly
    • Management:
      • rounds have application period & voting period (4 week application period + 4 week voting period so that there’s always a round applying to)
        • can use some bot wallets to just deploy a new round every month (otherwise can just do manually)
        • then have to integrate these new rounds into FE
 
  • for management, we’ll just use their Grant Stack manager dashboard
  • will require custom voting strategy contract
    • not too heavy of a lift
    • will be fair amount of frontend
  • launch this in mid-June
    • can figure out firm launch date & strategy as it gets closer
    • this timeline sounds good to them → block off middle-week of June as Decent x Allo launch week & can work backwards from there
  • we’ll try to finish the brief & design work & OP grant ahead of time
  • for next Friday:
    • have first draft of feedback & finish the product spec
Â