Try   HackMD

How to check the Lido DAO onchain vote #181

What the vote is about

The onchain vote #181 packs together execution of the three different motions:

  • Tweaking ATC and PML quarterly Easy Track stables transfer limits PML: 6M ->4M stables / quarter & ATC 1.5M -> 7M stables/quarter (snapshot)
  • Tweaking and resetting Stonks stETH transfer limits 9k stETH -> 12k stETH / 6 months (TMC proposal)
  • Simply Staking Node Operator Reward Address change (forum request)

Resources for the Proposal Validation

The resources mentioned in this section are assumed to be trustworthy and reliable.

If you're new to the blockchain tooling, check out the "how to check things" section at the end of the how-to.

Voting Script

I. Change Easy Track Limits for PML and ATC

  1. ATC: increase the limit from 1,5m to 7m USDC/USDT/DAI per quarter β€” set 7'000'000 limit on ATC registry 0xe07305F43B11F230EaA951002F6a55a16419B707 for 3 months

    • ATC registry 0xe07305F43B11F230EaA951002F6a55a16419B707 address can be checked against the Easy Track factories for token transfers list
    • Current limit can be checked by quering getLimitsParameters method β€” it should return the tuple {1500000000000000000000000, 3}, where the first number is 1,500,000 * 10^18 (accounting for 18 decimals), the second value 3 is number of months the limit is set for
    • The vote calls the method setLimitParameters with parameters _limit set to 7,000,000*10^18 and _periodDurationMonths set to 3 as requested in the snapshot vote.
      ​​​​​​​​On ATC [registry]
      ​​​​​​​​    0xe07305F43B11F230EaA951002F6a55a16419B707
      
      ​​​​​​​​    function setLimitParameters(
      ​​​​​​​​        uint256 _limit,
      ​​​​​​​​        uint256 _periodDurationMonths
      ​​​​​​​​    )
      
      ​​​​​​​​Call data:
      ​​​​​​​​    [1] 7000000000000000000000000
      ​​​​​​​​    [2] 3
      
  2. PML: decrease the limit from 6m to 4m USDC/USDT/DAI per quarter β€” set 4'000'000 limit on PML registry 0xDFfCD3BF14796a62a804c1B16F877Cf7120379dB for 3 months

    • PML registry: 0xDFfCD3BF14796a62a804c1B16F877Cf7120379dB address can be checked against the Easy Track factories for token transfers list
    • Current limit can be checked by quering getLimitParameters method β€” it should return the tuple {6000000000000000000000000, 3}, where the first number is 6,000,000 * 10^18 (accounting for 18 decimals), the second value 3 is number of months the limit is set for
    • The vote calls the method setLimitParameters with parameters _limit set to 4,000,000*10^18 and _periodDurationMonths set to 3 as requested in the snapshot vote.
      ​​​​​​​​On PML [registry]
      ​​​​​​​​    0xDFfCD3BF14796a62a804c1B16F877Cf7120379dB
      
      ​​​​​​​​    function setLimitParameters(
      ​​​​​​​​        uint256 _limit,
      ​​​​​​​​        uint256 _periodDurationMonths
      ​​​​​​​​    )
      
      ​​​​​​​​Call data:
      ​​​​​​​​    [1] 4000000000000000000000000
      ​​​​​​​​    [2] 3
      

II. Stonks stETH Limits Update

  1. Update limit from 9,000 to 12,000 stETH per 6 months on Stonks stETH registry 0x1a7cFA9EFB4D5BfFDE87B0FaEb1fC65d653868C0
    • Stonks stETH AllowedRecepients registry 0x1a7cFA9EFB4D5BfFDE87B0FaEb1fC65d653868C0 address can be checked against the Easy Track factories for token transfers list
    • Current limit can be checked by quering getLimitParameters method β€” it should return the tuple {9000000000000000000000, 6}, where the first number is 9,000 * 10^18 (accounting for 18 decimals), the second value 6 is number of months the limit is set for
    • The vote calls the method setLimitParameters with parameters _limit set to 12,000*10^18 and _periodDurationMonths set to 6 as requested in TMC proposal.
      ​​​​​​​​On stETH registry [registry]
      ​​​​​​​​    0x1a7cFA9EFB4D5BfFDE87B0FaEb1fC65d653868C0
      
      ​​​​​​​​    function setLimitParameters(
      ​​​​​​​​        uint256 _limit,
      ​​​​​​​​        uint256 _periodDurationMonths
      ​​​​​​​​    )
      
      ​​​​​​​​Call data:
      ​​​​​​​​    [1] 12000000000000000000000
      ​​​​​​​​    [2] 6
      
  2. Reset the amount spent on Stonks stETH registry 0x1a7cFA9EFB4D5BfFDE87B0FaEb1fC65d653868C0
    • stETH registry address is the same as in previous call β€” 0x1a7cFA9EFB4D5BfFDE87B0FaEb1fC65d653868C0
    • The current spendable balance can be checked by calling spendableBalance method on the registry, which should return 0 β€” meaning no more spendable stETH available for TMC
    • The vote calls the method unsafeSetSpentAmount with a parameter _newSpentAmount set to 0. It sets the amount of tokens spent in the current period to 0 as requested in TMC proposal.
      ​​​​​​​​On stETH [registry]
      ​​​​​​​​    0x1a7cFA9EFB4D5BfFDE87B0FaEb1fC65d653868C0
      
      ​​​​​​​​    function unsafeSetSpentAmount(
      ​​​​​​​​        uint256 _newSpentAmount
      ​​​​​​​​    )
      
      ​​​​​​​​Call data:
      ​​​​​​​​    [1] 0
      

III. Simply Staking Reward Address Change

  1. Change staking reward address to 0x1EC3Cbe8fb1D8019092500CcA2111C158a35bC82 for node operator with id = 16 (Simply Staking)
    • Node Operator Registry 0x55032650b14df07b85bF18A3a3eC8E0Af2e028d5 (proxy) address can be checked against the Curated Module section in docs
    • To check the Node Operator data, query the getNodeOperator method on read as proxy tab with parameters 16 (NO id) and true (param to show the NO name). Query should return the tuple with name set to Simply Staking and rewardAddress set to 0xFEf3C7aa6956D03dbad8959c59155c4A465DCacd
    • The vote calls the method setNodeOperatorRewardAddress with parameters _nodeOperatorId set to 16 and _rewardAddress set to 0x1EC3Cbe8fb1D8019092500CcA2111C158a35bC82 as requested by the Node Operator on the forum
      ​​​​​​​​On Node Operator Registry [registry]
      ​​​​​​​​    0x55032650b14df07b85bF18A3a3eC8E0Af2e028d5
      
      ​​​​​​​​    function setNodeOperatorRewardAddress(
      ​​​​​​​​        uint256 _nodeOperatorId,
      ​​​​​​​​        address _rewardAddress
      ​​​​​​​​    )
      
      ​​​​​​​​Call data:
      ​​​​​​​​    [1] 16
      ​​​​​​​​    [2] 0x1EC3Cbe8fb1D8019092500CcA2111C158a35bC82
      

How to Validate Proposals

Using the how-to, one can verify all addresses and details of the instruction. Let's check one address as an example to ensure it is not malicious.

Imagine the following situation: the limits need to be changed for ET on ATC. The instruction states that increasing the limit from 1,5m to 7m USDC/USDT/DAI per quarter is necessary. In other words, to set 7'000'000 limit on ATC registry 0xe07305F43B11F230EaA951002F6a55a16419B707 for 3 months

In this case, we need to verify the address 0xe07305F43B11F230EaA951002F6a55a16419B707.

To do that, we go through several steps:

  1. At first, we're going to work with https://docs.lido.fi to make sure that the contract belongs to Lido:

    • In the search bar in the upper-right corner, paste the address and click on the result:
      Image Not Showing Possible Reasons
      • The image was uploaded to a note which you don't have access to
      • The note which the image was originally uploaded to has been deleted
      Learn More β†’
    • Using Cmd + F (on Mac) or Control + F (on Windows), find the address on the page and check that it belongs to the registry:
      Image Not Showing Possible Reasons
      • The image was uploaded to a note which you don't have access to
      • The note which the image was originally uploaded to has been deleted
      Learn More β†’
  2. Next, we want to make sure that the method mentioned in the instruction does what it says it does:

    • Go to the contract page (press the button "Contract"):
      Image Not Showing Possible Reasons
      • The image was uploaded to a note which you don't have access to
      • The note which the image was originally uploaded to has been deleted
      Learn More β†’
    • Press the β€œWrite contract” button:
      Image Not Showing Possible Reasons
      • The image was uploaded to a note which you don't have access to
      • The note which the image was originally uploaded to has been deleted
      Learn More β†’
    • Find the method mentioned in the instruction and click on its name:
      Image Not Showing Possible Reasons
      • The image was uploaded to a note which you don't have access to
      • The note which the image was originally uploaded to has been deleted
      Learn More β†’
  3. We need to check the params:

    • Ensure that the names of the params for the method setLimitParameters on https://etherscan.io and in the instruction match:
      Image Not Showing Possible Reasons
      • The image was uploaded to a note which you don't have access to
      • The note which the image was originally uploaded to has been deleted
      Learn More β†’
  4. Now, let's verify the values of the params:

    • Ensure that the values mentioned in the description and in the code match (all limits in this vote are multiplied by 10^18 to follow the requirements of the contract – read about decimals in DAI):
      Image Not Showing Possible Reasons
      • The image was uploaded to a note which you don't have access to
      • The note which the image was originally uploaded to has been deleted
      Learn More β†’
  5. At last, it's necessary to verify that the description of the proposal on https://research.lido.fi (+ https://snapshot.org/#/lido-snapshot.eth if there's a snapshot) and in the instruction match. Don't forget to check the author of the proposal and comments (to ensure there are no objections):

    Image Not Showing Possible Reasons
    • The image was uploaded to a note which you don't have access to
    • The note which the image was originally uploaded to has been deleted
    Learn More β†’

We've verified one address, the params for its method, and the description of the proposal by using https://etherscan.io/, https://docs.lido.fi, https://snapshot.org/#/lido-snapshot.eth, and https://research.lido.fi/. By following these steps, you can verify the rest of the information provided in this instruction to ensure that it is not malicious.