owned this note
owned this note
Published
Linked with GitHub
# Aragon #179 annotated
The vote has two main action sections:
1) Upgrade wstETH on Optimism bridge endpoints to enable rebasable stETH on Optimism (items 1-5);
2) Add Easy Track setup for funding the Lido Alliance Operational Multisig (item 6).
## 1. Upgrade wstETH on Optimism bridge endpoints
### Proofs
1. [stETH on Optimism upgrade announcement and action plan](https://research.lido.fi/t/steth-on-optimism-upgrade-announcement-and-action-plan/8474
),
2. [Snapshot vote](https://snapshot.org/#/lido-snapshot.eth/proposal/0xb1a3c33a4911712770c351504bac0499611ceb0faff248eacb1e96354f8e21e8)
3. [Audit Report by MixBytes](https://github.com/lidofinance/audits/blob/main/L2/stETH-on-Optimism-2024-06-MixBytes-Audit-Report.pdf), [Audit Report by Ackee Blockchain](https://github.com/lidofinance/audits/blob/main/L2/stETH-on-Optimism-2024-06-Ackee-Blockchain-Audit-report.pdf)
4. MixBytes Audit report with the deployment verification included: [x.com](https://x.com/MixBytes/status/1841143210028224889)
The first section has 5 actions: 1-4 to Upgrade Ethereum Contracts, 5 to Upgrade Optimism Contracts.
```
1. Upgrade L1ERC20TokenBridge contract implementation
to 0x168Cfea1Ad879d7032B3936eF3b0E90790b6B6D4.
2. Call L1ERC20TokenBridge's finalizeUpgrade_v2()
to update internal version counter.
3. Upgrade LidoLocator contract implementation
to 0x39aFE23cE59e8Ef196b81F0DCb165E9aD38b9463.
4. Grant permission DEPOSITS_ENABLER_ROLE on L1ERC20TokenBridge
to Ethereum Emergency Brakes Multisig.
5. Send Optimism upgrade call:
1. Upgrade L2ERC20TokenBridge contract implementation 0x2734602C0CEbbA68662552CacD5553370B283E2E;
2. Call L2ERC20TokenBridge's finalizeUpgrade_v2()
to update internal version counter;
3. Upgrade WstETH ERC20Bridged contract implementation
0xFe57042De76c8D6B1DF0E9E2047329fd3e2B7334;
4. Call WstETH ERC20Bridged's finalizeUpgrade_v2()
to update internal version counter.
```
For all contracts getting called in the vote, addresses are listed on [docs](https://docs.lido.fi/deployed-contracts).
### Actions "translation"
#### Ethereum
1. upgrades the `L1ERC20TokenBridge` contract `0x76943C0D61395d8F2edF9060e1533529cAe05dE6` to the new version `0x168Cfea1Ad879d7032B3936eF3b0E90790b6B6D4` that supports `stETH` [token bridging](https://research.lido.fi/t/lip-22-steth-on-l2/6855). New implementation was [audited by MixBytes](https://github.com/mixbytes/audits_public/tree/master/Lido/stETH%20on%20Optimism).
```
1. On [AragonAgent]
0x3e40d73eb977dc6a537af587d48316fee66e9c8c
function forward(
bytes _evmScript
)
Call data:
[1] See parsed evm script at 1.1
1.1. On [L1ERC20TokenBridge]
0x76943c0d61395d8f2edf9060e1533529cae05de6
function proxy__upgradeTo(
address newImplementation_
)
Call data:
[1] 0x168Cfea1Ad879d7032B3936eF3b0E90790b6B6D4
```
2. sets the `L1ERC20TokenBridge` `0x76943C0D61395d8F2edF9060e1533529cAe05dE6` version to `2`.
```
2. On [AragonAgent]
0x3e40d73eb977dc6a537af587d48316fee66e9c8c
function forward(
bytes _evmScript
)
Call data:
[1] See parsed evm script at 2.1
2.1. On [L1ERC20TokenBridge]
0x76943c0d61395d8f2edf9060e1533529cae05de6
function finalizeUpgrade_v2()
Call data:
[empty]
```
3. upgrades `LidoLocator` contract `0xc1d0b3de6792bf6b4b37eccdcc24e45978cfd2eb` to the new version `0x39aFE23cE59e8Ef196b81F0DCb165E9aD38b9463` that connects Core Protocol with the `TokenRateNotifier` ([contract description](https://docs.lido.fi/guides/verify-steth-on-optimism-upgrade-manual#tokenratenotifier)). This enables the Core Protocol to broadcast the token rate to all supported L2 rollups, currently including Optimism. New implementation was [audited by MixBytes](https://github.com/mixbytes/audits_public/tree/master/Lido/stETH%20on%20Optimism).
```
3. On [AragonAgent]
0x3e40d73eb977dc6a537af587d48316fee66e9c8c
function forward(
bytes _evmScript
)
Call data:
[1] See parsed evm script at 3.1
3.1. On [LidoLocator]
0xc1d0b3de6792bf6b4b37eccdcc24e45978cfd2eb
function proxy__upgradeTo(
address newImplementation_
)
Call data:
[1] 0x39aFE23cE59e8Ef196b81F0DCb165E9aD38b9463
```
4. grants `DEPOSITS_ENABLER_ROLE` role `0x4b43b36766bde12c5e9cbbc37d15f8d1f769f08f54720ab370faeb4ce893753a` on `L1ERC20TokenBridge` `0x76943C0D61395d8F2edF9060e1533529cAe05dE6` to the [Emergency Brakes multisig](https://docs.lido.fi/deployed-contracts/#emergency-brakes-multisigs) `0x73b047fe6337183A454c5217241D780a932777bD`. This is part of the [upgrade plan](https://research.lido.fi/t/steth-on-optimism-upgrade-announcement-and-action-plan/8474) and ensures that deposits can be resumed after the upgrade is finalized
```
4. On [AragonAgent]
0x3e40d73eb977dc6a537af587d48316fee66e9c8c
function forward(
bytes _evmScript
)
Call data:
[1] See parsed evm script at 4.1
4.1. On [L1ERC20TokenBridge]
0x76943c0d61395d8f2edf9060e1533529cae05de6
function grantRole(
bytes32 role,
address account
)
Call data:
[1] 0x4b43b36766bde12c5e9cbbc37d15f8d1f769f08f54720ab370faeb4ce893753a
[2] 0x73b047fe6337183A454c5217241D780a932777bD
```
#### Optimism
5. send Optimism upgrade call
```
5. On [AragonAgent]
0x3e40d73eb977dc6a537af587d48316fee66e9c8c
function forward(
bytes _evmScript
)
Call data:
[1] See parsed evm script at 5.1
5.1. On [OptimismL1CrossDomainMessengerProxy]
0x25ace71c97b33cc4729cf772ae268934f7ab5fa1
function sendMessage(
address _target,
bytes _message,
uint32 _minGasLimit
)
Call data:
[1] 0xEfa0dB536d2c8089685630fafe88CF7805966FC3
[2] 0xd9a4cbdf00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000000040000000000000000000000008e01013243a96601a86eb3153f0d9fa4fbfb69570000000000000000000000008e01013243a96601a86eb3153f0d9fa4fbfb69570000000000000000000000001f32b1c2345538c0c6f582fcb022739c4a194ebb0000000000000000000000001f32b1c2345538c0c6f582fcb022739c4a194ebb000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000001970726f78795f5f75706772616465546f28616464726573732900000000000000000000000000000000000000000000000000000000000000000000000000001466696e616c697a65557067726164655f76322829000000000000000000000000000000000000000000000000000000000000000000000000000000000000001970726f78795f5f75706772616465546f28616464726573732900000000000000000000000000000000000000000000000000000000000000000000000000002166696e616c697a65557067726164655f763228737472696e672c737472696e6729000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000200000000000000000000000002734602c0cebba68662552cacd5553370b283e2e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000fe57042de76c8d6b1df0e9e2047329fd3e2b733400000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001f57726170706564206c6971756964207374616b656420457468657220322e30000000000000000000000000000000000000000000000000000000000000000001320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
[3] 1000000
```
The section is calling `sendMessage` method on `OptimismL1CrossDomainMessengerProxy` [0x25ace71c97b33cc4729cf772ae268934f7ab5fa1](https://etherscan.io/address/0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1), which is L1CrossDomainMessengerProxy and can be checked on [Optimism Docs](https://docs.optimism.io/chain/addresses#ethereum-l1).
* The message is getting sent to [0xEfa0dB536d2c8089685630fafe88CF7805966FC3](https://optimistic.etherscan.io/address/0xefa0db536d2c8089685630fafe88cf7805966fc3) - Optimism Governance Bridge Executor (see [Lido on Optimism docs section](https://docs.lido.fi/deployed-contracts/#optimism-part))
* `1000000` is 1M for _minGasLimit
The second parameter — `_message` data — needs to be decoded manually. For instance, open [online decoder](https://tools.deth.net/calldata-decoder), paste in the calldata string and click `Decode`. Decoder would recognise the method `queue`, parsing the parameters further:
```
[0x8E01013243a96601a86eb3153F0d9Fa4fbFb6957,
0x8E01013243a96601a86eb3153F0d9Fa4fbFb6957,
0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb,
0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb],
[0,0,0,0],
[proxy__upgradeTo(address),
finalizeUpgrade_v2(),
proxy__upgradeTo(address),
finalizeUpgrade_v2(string,string)],
[0x0000000000000000000000002734602c0cebba68662552cacd5553370b283e2e,
0x,
0x000000000000000000000000fe57042de76c8d6b1df0e9e2047329fd3e2b7334,
0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001f57726170706564206c6971756964207374616b656420457468657220322e300000000000000000000000000000000000000000000000000000000000000000013200000000000000000000000000000000000000000000000000000000000000] ,
[false,false,false,false]
```
* Note the UI fails at `finalizeUpgrade_v2(string,string)` due to `,` symbol
The called methods on Optimism side do as follows:
1. upgrades `L2ERC20TokenBridge` `0x8E01013243a96601a86eb3153F0d9Fa4fbFb6957` (`proxy__upgradeTo(address)`) to the new version `0x2734602C0CEbbA68662552CacD5553370B283E2E` that supports `stETH` token bridging. New implementation was [audited by MixBytes](https://github.com/mixbytes/audits_public/tree/master/Lido/stETH%20on%20Optimism).
2. finalizes `L2ERC20TokenBridge` `0x8E01013243a96601a86eb3153F0d9Fa4fbFb6957` upgrade (`finalizeUpgrade_v2()`) and sets its version to `2`
3. upgrades the `WstETH ERC20Bridged` token `0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb` (`proxy__upgradeTo(address)`) to the new implementation `0xfe57042de76c8d6b1df0e9e2047329fd3e2b7334` that supports [permits](https://eips.ethereum.org/EIPS/eip-2612). New implementation was [audited by MixBytes](https://github.com/mixbytes/audits_public/tree/master/Lido/stETH%20on%20Optimism).
5. finalizes `WstETH ERC20Bridged` token `0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb` upgrade by calling `finalizeUpgrade_v2(string,string)` and sets its name to `Wrapped liquid staked Ether 2.0` and version to `2`.
To check this we need to decode the call data one more time. Here [the another parser](https://adibas03.github.io/online-ethereum-abi-encoder-decoder/#/decode.) is notch better. Put `string,string` into Argument types of a decoder and a call data string into the Encoded data field. The decoded data should read `Wrapped liquid staked Ether 2.0,2`
## 2. Add Easy Track setup for funding the Lido Alliance
The second section has 1 action: 6 - to Add Alliance Ops stablecoins top up EVM script factory.
### Proofs
1. [Discussion forum post](https://research.lido.fi/t/organize-the-lido-alliance-program-as-a-lido-dao-adjacent-borg/8173), [Snapshot decision](https://snapshot.org/#/lido-snapshot.eth/proposal/0xa478fa5518769096eda2b7403a1d4104ca47de3102e8a9abab8640ef1b50650c).
3. Links to check [AllowedRecipientsRegistry](https://etherscan.io/address/0x3B525F4c059F246Ca4aa995D21087204F30c9E2F#readContract) contract `0x3B525F4c059F246Ca4aa995D21087204F30c9E2F`parameters on Etherscan:
* [getAllowedRecipients]([getAllowedRecipients](https://etherscan.io/address/0x3B525F4c059F246Ca4aa995D21087204F30c9E2F#readContract#F8)) - `0x606f77BF3dd6Ed9790D9771C7003f269a385D942` (Alliance Ops stablecoins committee multisig)
* [getLimitParameters](https://etherscan.io/address/0x3B525F4c059F246Ca4aa995D21087204F30c9E2F#readContract#F9) - `250000000000000000000000` == `250_000 * 10 ** 18` (the maximum that can be spent in a period), `3` (length of period in months)
4. Links to check the [TopUpAllowedRecipients](https://etherscan.io/address/0xe5656eEe7eeD02bdE009d77C88247BC8271e26Eb#readContract) contract parameters on Etherscan:
* [allowedRecipientsRegistry](https://etherscan.io/address/0xe5656eEe7eeD02bdE009d77C88247BC8271e26Eb#readContract#F1) - `0x3B525F4c059F246Ca4aa995D21087204F30c9E2F`
* [allowedTokensRegistry](https://etherscan.io/address/0xe5656eEe7eeD02bdE009d77C88247BC8271e26Eb#readContract#F2) - `0x4AC40c34f8992bb1e5E856A448792158022551ca` - the same TokenRegistry thet is used in other Easy Track stablecoins funders.
* [trustedCaller](https://etherscan.io/address/0xe5656eEe7eeD02bdE009d77C88247BC8271e26Eb#readContract#F7) - `0x606f77BF3dd6Ed9790D9771C7003f269a385D942` (Alliance Ops stablecoins committee multisig)
### Actions "translation"
6. adds a new stablecoins top up EVM script factory for token transfers to Easy Track
```
6. On [EasyTrack]
0xf0211b7660680b49de1a7e9f25c65660f0a13fea
function addEVMScriptFactory(
address _evmScriptFactory,
bytes _permissions
)
Call data:
[1] 0xe5656eEe7eeD02bdE009d77C88247BC8271e26Eb
[2] 0xb9e5cbb9ca5b0d659238807e84d0176930753d86f63648463b525f4c059f246ca4aa995d21087204f30c9e2f66671229
```
* 0xe5656eEe7eeD02bdE009d77C88247BC8271e26Eb is [TopUpAllowedRecipients](https://etherscan.io/address/0xe5656eEe7eeD02bdE009d77C88247BC8271e26Eb#readContract) contract
* ##### How to check the permissions string.
`0xB9E5CBB9CA5b0d659238807E84D0176930753d86f63648463B525F4c059F246Ca4aa995D21087204F30c9E2F66671229` consists of:
* `B9E5CBB9CA5b0d659238807E84D0176930753d86` is [Aragon Finance](https://etherscan.io/address/0xB9E5CBB9CA5b0d659238807E84D0176930753d86)
* `f6364846` is a signature of [newImmediatePayment](https://etherscan.io/address/0xB9E5CBB9CA5b0d659238807E84D0176930753d86#writeProxyContract#F13) of Aragon Finance
* `3B525F4c059F246Ca4aa995D21087204F30c9E2F` is [AllowedRecipientsRegistry](https://etherscan.io/address/0x3B525F4c059F246Ca4aa995D21087204F30c9E2F)
* `66671229` is a signature of [updateSpentAmount](https://etherscan.io/address/0x3B525F4c059F246Ca4aa995D21087204F30c9E2F#writeContract#F9) of AllowedRecipientsRegistry