YIP-1 (on DAO v2) / - Follow up on YIP-0

Author: Markus @m.laeng Florin @florin
First publication date: 2024/05/17

Summary

After YIP-4 did propose the new DAO to become admin on these youves contracts which only accept one admin, the DAO contract needs to now to call acceptAdminProposal on these contracts. This was tried with YIP-0 on the DAO v2, but unfortunately the quorum was not met. We propose the following changes:

  • We will decrease the lower quorum cap via Multisig to 550k on DAO v2. The reasoning behind this is to enable lower value for quorum as it seems that our assumptions on the migration were optimistic.
  • We will vote again on the same topic in the hope that the quorum will be reached (and even if not, the quorum will be lowered).

For this point forward, this post is describing the same facts as YIP 0. If the YIP passes we will set the new DAO as admin to all flat curves.

Rationale

With YIP-4, which sucessfully concluded, the youves community agreed to propose the new DAO contract KT1T3BFEu9WSQyRuV9Fyd7SqTU4rW3ptJ3NN as an administrator to those youves flat curve swaps, which only accept one administrator. This is a necessary step to install the new Commitment Pool KT1ENJfVK98HTRfxjFKPqu1R7tFwXVjmLAo2 as the one and only voting_contract.

YIP-4 did propose the new DAO as admin to those flat curve contracts, which only allow one admin and which have a propose/accept process for replacing admins. YIP-4 did propose the admin change. Now this proposal has to be accepted by the new DAO (the proposed admin).

Therefor this YIP is proposed which will only accept the new DAO as admin on all the contracts where it was proposed in YIP-4.

For all other engines and contracts which can have multiple admins, the youves keyholders will set the new DAO as admin, due to practical reasons. Due to the amount of contracts, the whole process would take several YIPs. Assuming that the acceptance of YIP-4 and YIP-5 signals a general consent on the replacement of DAO and Commitment Pool (aka YOU Staking Pool), such an intervention by the youves keyholders seems to be legitimate.

Methodology

In order to accept the administrator role, the new DAO needs to accept it, by calling acceptAdminProposal on all the contracts which can only have one administrator and where the new DAO is already a proposed Administrator (through YIP-4). These are mainly all the flat curve swap pools plus the Checker contract for CCHF.

This will also remove the old DAO KT1C3T98TqCm38cHPauZ4SopkQ4torCsxgab from being admin on these contracts (as they can only have one administrator at a time).

Proposal

In the table below you can see what effect this proposal will have on youves contracts.

Contract Name Contract Address Entrypoint called Effect
uUSD/USDt flat curve KT1UJBvm4hv11Uvu6r4c8zE5K2EfmwiRVgsm acceptAdminProposal Set the new DAO as admin
USDC.e/uUSD flat curve KT1NgbaaYhtXh3MwJoYYxrrKUwG3RX5LYVL6 acceptAdminProposal Set the new DAO as admin
wUSDC/uUSD flat curve KT1JeWiS8j1kic4PHx7aTnEr9p4xVtJNzk5b acceptAdminProposal Set the new DAO as admin
uBTC/uUSD flat curve KT1STLQKxiRtAh1e7DZhu1xUTAJ7KLpV9Rru acceptAdminProposal Set the new DAO as admin
tzBTC/wwBTC flat curve KT1T974a8qau4xP3RAAWPYCZM9xtwU9FLjPS acceptAdminProposal Set the new DAO as admin
tzBTC/uBTC flat curve KT1XvH5f2ja2jzdDbv6rxPmecZFU7s3obquN acceptAdminProposal Set the new DAO as admin
wBTC.e/uBTC flat curve KT1CkpDuwCFrnoqTam6upYiPBiFNsSEVbBei acceptAdminProposal Set the new DAO as admin
kUSD/uUSD flat curve KT1AVbWyM8E7DptyBCu4B5J5B7Nswkq7Skc6 acceptAdminProposal Set the new DAO as admin
USDtz/uUSD flat curve KT1Xbx9pykNd38zag4yZvnmdSNBknmCETvQV acceptAdminProposal Set the new DAO as admin
uXTZ/xtz flat curve KT1SPUvH5khHtirTEVeECiKrnh4FFXxWZ6ui acceptAdminProposal Set the new DAO as admin
uXTZ/xtz legacy flat curve KT1WgguedKZWucrdRKQXaRECEPMZennaVPck acceptAdminProposal Set the new DAO as admin
uUSD/uXAU flat curve KT1Ad5yJzoiRRdMJPvhJiPJ7Cq8WbJnCS7bg acceptAdminProposal Set the new DAO as admin
uXTZ/xtz legacy flat curve KT1BFXgczFte2zftCTg7tL6Qk2capsFg6UFS acceptAdminProposal Set the new DAO as admin
USDT/xtz KT1PkygK9CqgNLyuJ9iMFcgx1651BrTjN1Q9 acceptAdminProposal Set the new DAO as admin

Code

Source code in SmartPy

GitHub repo with the source code

import smartpy as sp

def execute_accept_administrator_proposal(administrable_address):
    administrable_contract = sp.contract(
        sp.TUnit, administrable_address, entry_point="acceptAdminProposal"
    ).open_some()
    return sp.transfer_operation(sp.unit, sp.mutez(0), administrable_contract)

def YIP5(unit):
    sp.set_type(unit, sp.TUnit)

    sp.result(sp.list([
        execute_accept_administrator_proposal(sp.address("KT1UJBvm4hv11Uvu6r4c8zE5K2EfmwiRVgsm")), # UUSD/USDT
        execute_accept_administrator_proposal(sp.address("KT1NgbaaYhtXh3MwJoYYxrrKUwG3RX5LYVL6")), # USDCE/UUSD
        execute_accept_administrator_proposal(sp.address("KT1JeWiS8j1kic4PHx7aTnEr9p4xVtJNzk5b")), # WUSDC/UUSD
        execute_accept_administrator_proposal(sp.address("KT1STLQKxiRtAh1e7DZhu1xUTAJ7KLpV9Rru")), # UUSD/UBTC
        execute_accept_administrator_proposal(sp.address("KT1T974a8qau4xP3RAAWPYCZM9xtwU9FLjPS")), # tzbtc/wwbtc
        execute_accept_administrator_proposal(sp.address("KT1XvH5f2ja2jzdDbv6rxPmecZFU7s3obquN")), # tzbtc/ubtc
        execute_accept_administrator_proposal(sp.address("KT1CkpDuwCFrnoqTam6upYiPBiFNsSEVbBei")), # wbtc.e/ubtc
        execute_accept_administrator_proposal(sp.address("KT1AVbWyM8E7DptyBCu4B5J5B7Nswkq7Skc6")), # kusd/usd
        execute_accept_administrator_proposal(sp.address("KT1Xbx9pykNd38zag4yZvnmdSNBknmCETvQV")), # usdtz/uusd
        execute_accept_administrator_proposal(sp.address("KT1SPUvH5khHtirTEVeECiKrnh4FFXxWZ6ui")), # xtz/uxtz v2
        execute_accept_administrator_proposal(sp.address("KT1WgguedKZWucrdRKQXaRECEPMZennaVPck")), # xxtz/uxtz
        execute_accept_administrator_proposal(sp.address("KT1Ad5yJzoiRRdMJPvhJiPJ7Cq8WbJnCS7bg")), # uusd/uxau
        execute_accept_administrator_proposal(sp.address("KT1BFXgczFte2zftCTg7tL6Qk2capsFg6UFS")),
        execute_accept_administrator_proposal(sp.address("KT1PkygK9CqgNLyuJ9iMFcgx1651BrTjN1Q9")), # usdt/xtz
    ]))

Compiled Michelson code

{ DROP; NIL operation; PUSH address "KT1PkygK9CqgNLyuJ9iMFcgx1651BrTjN1Q9"; CONTRACT %acceptAdminProposal unit; IF_NONE { PUSH int 258; FAILWITH } {}; PUSH mutez 0; UNIT; TRANSFER_TOKENS; CONS; PUSH address "KT1BFXgczFte2zftCTg7tL6Qk2capsFg6UFS"; CONTRACT %acceptAdminProposal unit; IF_NONE { PUSH int 258; FAILWITH } {}; PUSH mutez 0; UNIT; TRANSFER_TOKENS; CONS; PUSH address "KT1Ad5yJzoiRRdMJPvhJiPJ7Cq8WbJnCS7bg"; CONTRACT %acceptAdminProposal unit; IF_NONE { PUSH int 258; FAILWITH } {}; PUSH mutez 0; UNIT; TRANSFER_TOKENS; CONS; PUSH address "KT1WgguedKZWucrdRKQXaRECEPMZennaVPck"; CONTRACT %acceptAdminProposal unit; IF_NONE { PUSH int 258; FAILWITH } {}; PUSH mutez 0; UNIT; TRANSFER_TOKENS; CONS; PUSH address "KT1SPUvH5khHtirTEVeECiKrnh4FFXxWZ6ui"; CONTRACT %acceptAdminProposal unit; IF_NONE { PUSH int 258; FAILWITH } {}; PUSH mutez 0; UNIT; TRANSFER_TOKENS; CONS; PUSH address "KT1Xbx9pykNd38zag4yZvnmdSNBknmCETvQV"; CONTRACT %acceptAdminProposal unit; IF_NONE { PUSH int 258; FAILWITH } {}; PUSH mutez 0; UNIT; TRANSFER_TOKENS; CONS; PUSH address "KT1AVbWyM8E7DptyBCu4B5J5B7Nswkq7Skc6"; CONTRACT %acceptAdminProposal unit; IF_NONE { PUSH int 258; FAILWITH } {}; PUSH mutez 0; UNIT; TRANSFER_TOKENS; CONS; PUSH address "KT1CkpDuwCFrnoqTam6upYiPBiFNsSEVbBei"; CONTRACT %acceptAdminProposal unit; IF_NONE { PUSH int 258; FAILWITH } {}; PUSH mutez 0; UNIT; TRANSFER_TOKENS; CONS; PUSH address "KT1XvH5f2ja2jzdDbv6rxPmecZFU7s3obquN"; CONTRACT %acceptAdminProposal unit; IF_NONE { PUSH int 258; FAILWITH } {}; PUSH mutez 0; UNIT; TRANSFER_TOKENS; CONS; PUSH address "KT1T974a8qau4xP3RAAWPYCZM9xtwU9FLjPS"; CONTRACT %acceptAdminProposal unit; IF_NONE { PUSH int 258; FAILWITH } {}; PUSH mutez 0; UNIT; TRANSFER_TOKENS; CONS; PUSH address "KT1STLQKxiRtAh1e7DZhu1xUTAJ7KLpV9Rru"; CONTRACT %acceptAdminProposal unit; IF_NONE { PUSH int 258; FAILWITH } {}; PUSH mutez 0; UNIT; TRANSFER_TOKENS; CONS; PUSH address "KT1JeWiS8j1kic4PHx7aTnEr9p4xVtJNzk5b"; CONTRACT %acceptAdminProposal unit; IF_NONE { PUSH int 258; FAILWITH } {}; PUSH mutez 0; UNIT; TRANSFER_TOKENS; CONS; PUSH address "KT1NgbaaYhtXh3MwJoYYxrrKUwG3RX5LYVL6"; CONTRACT %acceptAdminProposal unit; IF_NONE { PUSH int 258; FAILWITH } {}; PUSH mutez 0; UNIT; TRANSFER_TOKENS; CONS; PUSH address "KT1UJBvm4hv11Uvu6r4c8zE5K2EfmwiRVgsm"; CONTRACT %acceptAdminProposal unit; IF_NONE { PUSH int 258; FAILWITH } {}; PUSH mutez 0; UNIT; TRANSFER_TOKENS; CONS }

SHA256 Hash of the Michelson code

5b6b864f88abe71690f6e3175dc52fab8904d65d2dc586825c670c3d0daa6106