Distribute 1,421,611 ARB from the DAO Vault on Arbitrum to Curve Pools

Summary:

This proposal is to continue incentives to the set of Arbitrum pools that were already receiving ARB. Proposing to distribute the remaining ARB (1,421,611.166666666666472534 ARB) over 80 days, approx. 17,770 ARB per day.

Abstract:

Some background because I’m not sure there’s any previous proposals on the forum related to ARB distributions. Curve received 3,476,795 ARB to the DAO vault on Arbitrum on June 6, 2023 as part of an airdrop to DAOs/ecosystem partners. There were a couple of votes that passed to begin distribution of the ARB tokens to Curve pools on Arbitrum:

Vote ID 563 | Executed 1/13/2024:
Distribute ~1,150,000 ARB from Arbitrum grant to arbitrum LPs over ~8 weeks (60 days) with the initial set of receivers as follows:

  • 2pool (0x7f90122bf0700f9e7e1f688fe926940e8839f353),
  • crvUSD/USDC.e (0x3adf984c937fa6846e5a24e0a68521bdaf767ce1),
  • tricrypto-crvUSD (0x82670f35306253222f8a165869b28c64739ac62e),
  • crvUSD/USDT (0x73af1150f265419ef8a5db41908b700c32d49135),
  • crvUSD/USDC (0xec090cf6dd891d2d014bea6edada6e05e025d93d),
  • crvUSD/FRAX (0x2fe7ae43591e534c256a1594d326e5779e302ff4), and
  • crvUSD/MIM (0x4070C044ABc8d9d22447DFE4B032405970878d06).

The set of receivers can be increased with future votes by the Parameter DAO.

Vote ID 631 | Executed 3/4/2024:
Enable ARB rewards for crvUSD/CRV/ARB tricrypto gauge and disable ARB rewards for the MIM/crvUSD gauge. Disperse 85K ARB to co-incentivize the MIM/crvUSD gauge over 30 days with the MIM team.

Vote ID 649 | Executed 3/19/2024:
Extend ARB rewards by adding an additional 811,252 ARB to the reward streamer, to be distributed over 42 days (approx. 19,315 per day).

The list of current ARB incentive receivers (Curve pools), which receive an equal portion of the stream, are:

Pool Name Address
Tricrypto-crvUSD (3c-crvUSD) 0x82670f35306253222F8a165869B28c64739ac62e
crvUSD/USDC (crvUSDC) 0xec090cf6DD891D2d014beA6edAda6e05E025D93d
crvUSD/USDT (crvUSDT) 0x73aF1150F265419Ef8a5DB41908B700C32D49135
crvUSD/USDC.e (crvUSDC.e) 0x3aDf984c937FA6846E5a24E0A68521Bdaf767cE1
Curve.fi USDC/USDT (2CRV) 0x7f90122BF0700F9E7e1F688fe926940E8839F353
crvUSD/Frax (crvUSDFRAX) 0x2FE7AE43591E534C256A1594D326e5779E302Ff4
TriCRV-ARBITRUM (crvUSDARB…) 0x845C8bc94610807fCbaB5dd2bc7aC9DAbaFf3c55

The RewardStream contract linearly vests the tokens in the contract evenly to all designated rewards_receivers over a specified reward_duration. In the case of this proposal, the 7 receivers will each receive approx. 17,770 ARB each week for an ~11 week distribution period. This will spend the remainder of the ARB in the DAO vault.

Motivation:

Proposing to spend the remainder because it’s a hassle to continue creating multiple votes for an inherently finite reward program. The incentives are overall a useful way to bootstrap crvUSD on Arbitrum and Curve Lending on Arbitrum, which requires sufficient crvUSD liquidity to process liquidations and pool liquidity where pool oracles are employed in lending markets. Not anticipating any major departure in strategy that would require adjustments to the reward distribution, so this proposal prefers to distribute all over a reasonable timeframe that slightly reduces the overall rewards to each pool so as not to shock the markets too much when ARB incentives end around early August.

Specification:

The vote requires several calls as a series of arguments to the Arbitrum Broadcaster (the contract that relays cross chain messages to the DAO agent on Arbitrum via Arbitrum Bridge):

Call via agent (0x40907540d8a6C65c637785e8f8B742ae6b0b9968):
├─ To: 0xb7b0FF38E0A01D798B5cd395BbA6Ddb56A323830
├─ Function: broadcast
└─ Inputs:

0x25877b9413Cc7832A6d142891b50bd53935feF82 (Arbitrum Vault)

{
  "name": "transfer",
  "params": [
    {
      "name": "_token",
      "value": "0x912ce59144191c1204e64559fe8253a0e49e6548",
      "type": "address"
    },
    {
      "name": "_to",
      "value": "0x452030a5d962d37d97a9d65487663cd5fd9c2b32",
      "type": "address"
    },
    {
      "name": "_value",
      "value": "1.421611e24",
      "type": "uint256"
    }
  ]
}

(Transfer ARB to the agent)

0x912CE59144191C1204E64559FE8253a0e49E6548 (ARB token)

{
  "name": "approve",
  "params": [
    {
      "name": "spender",
      "value": "0xf968e2e28460a8f419877df2ec86574636e8262c",
      "type": "address"
    },
    {
      "name": "amount",
      "value": "1.421611e24",
      "type": "uint256"
    }
  ]
}

(Approve RewardStream to spend the amount of ARB tokens)

0xF968E2e28460a8F419877Df2Ec86574636e8262c (rewardStream)

{
  "name": "set_reward_duration",
  "params": [
    {
      "name": "_duration",
      "value": "6912000",
      "type": "uint256"
    }
  ]
}

(set the reward duration to 80 days)

0xF968E2e28460a8F419877Df2Ec86574636e8262c (RewardStream)

{
  "name": "notify_reward_amount",
  "params": [
    {
      "name": "_amount",
      "value": "1.421611e24",
      "type": "uint256"
    }
  ]
}

(begin distribution of the received amount to the RewardStream reward_recipients)

2 Likes

removing crvUSDARBCRV gauge from receivers and adding a passthrough contract that allows multiple rewards distributions to send to the gauge. This is being done because of a pending ARB grant that also plans to distribute to this gauge, and this passthrough allows the possibility for it to also distribute to the gauge.

gauge removed: 0xB08FEf57bFcc5f7bF0EF69C0c090849d497C8F8A
passthrough contract added: 0xE2F24f04Db907F93E8Ba54682744c6bD8CA30406

Full list of proposed actions:

BROADCASTER = "0xb7b0FF38E0A01D798B5cd395BbA6Ddb56A323830"
ARB_TOKEN = "0x912ce59144191c1204e64559fe8253a0e49e6548"
STREAMER = "0xF968E2e28460a8F419877Df2Ec86574636e8262c"
AGENT_PROXY = "0x452030a5d962d37d97a9d65487663cd5fd9c2b32"
AMOUNT_TO_STREAM = 1421611166666666666472534
REWARD_DURATION = 6912000

ACTIONS = [
    (BROADCASTER, "broadcast", [ # setup streamer
        ("0x25877b9413Cc7832A6d142891b50bd53935feF82", encode("transfer(address,address,uint256)", ARB_TOKEN, AGENT_PROXY, AMOUNT_TO_STREAM)), # transfer from vault to proxy
        (ARB_TOKEN, encode("approve(address,uint256)", STREAMER, AMOUNT_TO_STREAM)),  # allow the gauge streamer to transferFrom proxy
        (STREAMER, encode("remove_receiver(address)", "0xB08FEf57bFcc5f7bF0EF69C0c090849d497C8F8A")), # remove crvUSDARBCRV gauge from receivers
        (STREAMER, encode("add_receiver(address)", "0xE2F24f04Db907F93E8Ba54682744c6bD8CA30406")), # add passthrough to crvUSDARBCRV gauge to receivers
        (STREAMER, encode("set_reward_duration(uint256)", REWARD_DURATION)), # set reward duration 80 days
        (STREAMER, encode("notify_reward_amount(uint256)", AMOUNT_TO_STREAM)),
    ], 1000000, 1000000000),
]
2 Likes

Looks good to me. @mimaklas maybe you have a look too?

Vote is here: Curve Monitor

passthrough contract for crvUSDARBCRV:

https://arbiscan.io/address/0xe2f24f04db907f93e8ba54682744c6bd8ca30406#code

We will use this for the ARB we get from here, if approved by he Arbitrum DAO (final vote will start any day)

1 Like

yes, looks good to me as well