Proposal: Set Reward for stETH old, stETH-ng and TricryptoLLAMA pools to use wstETH

Summary

This is my first proposal, from now on I will contribute regularly to Curve DAO.

I’m a long-term Curve Guy - in mid-February 2020, a month after curve’s launch, I provided liquidity for the first time. Since then, Curve has developed into a cornerstone of DeFi. You find me at @martinkrung, on tg, twitter and github.

As I do this the first time, please review.

I worked with contributors from steakhouse to execute this proposal for Lido/Curve. (With the support of Micheal)

Context: Liquidity Observation Lab (LOL): Liquidity Strategy and application to Curve stETH:ETH Pool - Proposals - Lido Governance

DAO vote ( https://dao.curve.fi/vote/ownership/447 ) , includes 3 actions to allow Lido to reward liquidity with wstETH on the following pools:

  • stETH old (ETH/stETH)
  • stETH-ng (ETH/stETH)
  • TricryptoLLAMA (crvUSD/tBTC/wstETH)

stETH old (ETH/stETH):

For the stETH legacy pool, steakhouse did deploy two new contracts. This is necessary because the reward token is now wstETH, in the last reward season has been LDO token. The only change made to this contract is replacing LDO with wstETH token in the New Curve Liquidity Farming Manager:

New Staking Reward Contract:
https://etherscan.io/address/0x4F48031B0EF8acCea3052Af00A3279fbA31b50D8#code
New Curve Liquidity Farming Manager:
https://etherscan.io/address/0x9d81153Ae611Aeb53e5f137b701C67c2EbffcDAE#code

You find more info about this change here: https://github.com/martinkrung/curve-dao-contracts-lido/tree/main/contracts/steth_reward

stETH-ng (ETH/stETH)

For this, add_reward(gauge_ng, reward_token_address, distributor_address) on the gauge has to be set. More details in specification below.

TricryptoLLAMA (crvUSD/tBTC/wstETH)

For this, add_reward(reward_token_address, distributor_address) on the gauge has to be set. More details in specification below.

Testing

I simulated all this on a forked mainnet, run this code to test it out: https://github.com/martinkrung/curve-dao-contracts-lido/blob/main/scripts/voting/new_vote_stETH-ETH_reward.py

You find an output here: Output from Simulation · Issue #3 · martinkrung/curve-dao-contracts-lido · GitHub

Motivation

Rewarding ETH/stETH liquidity, which leads to more capital in the pools and less slippage, benefits both Lido and Curve. Lido to incentivize TricryptoLLAMA, a pool with crvUSD pool benefits Curve and crvUSD.

Timeline

I will put the vote on-chain next Monday afternoon and then update the vote ID.

Specification

1. Action stETH ((ETH/stETH)) Pool

For this steackhous/Lido deployed a new StakingRewards and Curve Liquidity 0x4F48031B0EF8acCea3052Af00A3279fbA31b50D8

Curve Liquidity Farming Manager: 0x9d81153Ae611Aeb53e5f137b701C67c2EbffcDAE

This vote executes:

set_rewards(gauge_old, StakingRewardsContract, signature, reward_tokens),

on Gauge Owner 0x519AFB566c05E00cfB9af73496D00217A630e4D5

by Curve Ownership Agent 0x40907540d8a6C65c637785e8f8B742ae6b0b9968

with these arguments

st-ETH old gauge:

gauge_old = 0x182B723a58739a9c974cFDB385ceaDb237453c28

StakingRewardsContract = 0x4F48031B0EF8acCea3052Af00A3279fbA31b50D8

Signatures are used to call functions in the StakingRewards Contract

“a694fc3a2e1a7d4d3d18b9120000000000000000000000000000000000000000”

deposit_signature: 0xa694fc3a
withdraw_signature: 0x2e1a7d4d
withdraw_signature: 0x3d18b912

Signatures are the same, as the contract deployed is identical as last time, see this tx here:
0xff87625116cefee5dca4ed3285a76c807a7ce7f580f655eb20cde5357d7ba206

reward tokens: a list with length 8, and LDO token in the first, and wstETH in the second place

reward_tokens = 0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32, 0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0, 0x00…, 0x00…, 0x00…, 0x00…, 0x00…, 0x00… ]

distributor address is Lido: Rewards Committee Multisig

distributor_address = 0x87D93d9B2C672bf9c9642d853a8682546a5012B5

2. Action stETH-ng ((ETH/stETH)) Pool

This vote executes:

add_reward(gauge_ng, reward_token_address, distributor_address)

on Curve StableSwap Owner Proxy 0x742C3cF9Af45f91B109a81EfEaf11535ECDe9571

by Curve Ownership Agent 0x40907540d8a6C65c637785e8f8B742ae6b0b9968

with these arguments:

st-ETH ng gauge:

gauge_ng = 0x79F21BC30632cd40d2aF8134B469a0EB4C9574AA

reward token is wsETH

reward_token_address = 0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0

distributor address is Lido: Rewards Committee Multisig

distributor_address = 0x87D93d9B2C672bf9c9642d853a8682546a5012B5

3. Action TricryptoLLAMA (crvUSD/tBTC/wstETH)

This vote executes

add_reward(reward_token_address, distributor_address)

on the gauge 0x60d3d7ebbc44dc810a743703184f062d00e6db7e

by Curve Ownership Agent 0x40907540d8a6C65c637785e8f8B742ae6b0b9968

with these arguments:

reward token is wsETH

reward_token_address = 0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0

distributor address is Lido: Rewards Committee Multisig

distributor_address = 0x87D93d9B2C672bf9c9642d853a8682546a5012B5

Further Info

Lido will also reward liquidity for stETH/ETH pool on arbitrum and on optimism. As Lido Multisig is Gauge Manager on the two L2 they can execute this without the DAO help. A guide how to do this is here: Guide to Setting Token Rewards on a Gauge · Issue #2 · martinkrung/curve-dao-contracts-lido · GitHub

7 Likes

Decoded EVM Script from the on-chain vote:

Call via agent (0x40907540d8a6C65c637785e8f8B742ae6b0b9968):
 ├─ To: 0x519AFB566c05E00cfB9af73496D00217A630e4D5
 ├─ Function: set_rewards(address,address,bytes32,address[8])
 └─ Inputs: ['0x182B723a58739a9c974cFDB385ceaDb237453c28', '0x4F48031B0EF8acCea3052Af00A3279fbA31b50D8', 0xa694fc3a2e1a7d4d3d18b9120000000000000000000000000000000000000000, ['0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32', '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0', '0x0000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000']]
Call via agent (0x40907540d8a6C65c637785e8f8B742ae6b0b9968):
 ├─ To: 0x742C3cF9Af45f91B109a81EfEaf11535ECDe9571
 ├─ Function: add_reward(address,address,address)
 └─ Inputs: ['0x79F21BC30632cd40d2aF8134B469a0EB4C9574AA', '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0', '0x87D93d9B2C672bf9c9642d853a8682546a5012B5']
Call via agent (0x40907540d8a6C65c637785e8f8B742ae6b0b9968):
 ├─ To: 0x60d3d7eBBC44Dc810A743703184f062d00e6dB7e
 ├─ Function: add_reward(address,address)
 └─ Inputs: ['0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0', '0x87D93d9B2C672bf9c9642d853a8682546a5012B5']
3 Likes

Thank you @martinkrung !

We are running small test distributions on stETH/ETH and tricryptoLLAMA today and tomorrow and will start as soon as we can with our planned incentive program.

We will compensate the delay for September fully over the course of October. Thank you for your patience.

4 Likes

Thank you all

4 Likes