diff --git a/Makefile b/Makefile index 886fa46..9626795 100644 --- a/Makefile +++ b/Makefile @@ -67,5 +67,8 @@ deploy-testnet: deploy-holesky: @forge script script/deploy/DeployManager.sol --rpc-url $(HOLESKY_URL) --private-key ${DEPLOYER_PRIVATE_KEY} --broadcast --slow --verify -vvv +simulate-deploys: + @forge script script/deploy/DeployManager.sol --fork-url $(PROVIDER_URL) --private-key ${DEPLOYER_PRIVATE_KEY} -vvvv + # Override default `test` and `coverage` targets .PHONY: test coverage diff --git a/build/deployments-1.json b/build/deployments-1.json index 0d4b24f..4bbb6bd 100644 --- a/build/deployments-1.json +++ b/build/deployments-1.json @@ -1,16 +1,17 @@ { - "executions": { - "001_CoreMainnet": 1723685111, - "002_UpgradeMainnet": 1726812322, - "003_UpgradeLidoARMScript": 1729073099 - }, - "contracts": { - "LIDO_ARM": "0x85B78AcA6Deae198fBF201c82DAF6Ca21942acc6", - "LIDO_ARM_CAP_IMPL": "0x8506486813d025C5935dF481E450e27D2e483dc9", - "LIDO_ARM_CAP_MAN": "0xf54ebff575f699d281645c6F14Fe427dFFE629CF", - "LIDO_ARM_IMPL": "0x3d724176c8f1F965eF4020CB5DA5ad1a891BEEf1", - "LIDO_ARM_ZAPPER": "0x01F30B7358Ba51f637d1aa05D9b4A60f76DAD680", - "OETH_ARM": "0x6bac785889A4127dB0e0CeFEE88E0a9F1Aaf3cC7", - "OETH_ARM_IMPL": "0x187FfF686a5f42ACaaF56469FcCF8e6Feca18248" - } -} + "executions": { + "001_CoreMainnet": 1723685111, + "002_UpgradeMainnet": 1726812322, + "003_UpgradeLidoARMScript": 1729073099, + "004_UpdateCrossPriceScript": 1739872139 + }, + "contracts": { + "LIDO_ARM": "0x85B78AcA6Deae198fBF201c82DAF6Ca21942acc6", + "LIDO_ARM_CAP_IMPL": "0x8506486813d025C5935dF481E450e27D2e483dc9", + "LIDO_ARM_CAP_MAN": "0xf54ebff575f699d281645c6F14Fe427dFFE629CF", + "LIDO_ARM_IMPL": "0x3d724176c8f1F965eF4020CB5DA5ad1a891BEEf1", + "LIDO_ARM_ZAPPER": "0x01F30B7358Ba51f637d1aa05D9b4A60f76DAD680", + "OETH_ARM": "0x6bac785889A4127dB0e0CeFEE88E0a9F1Aaf3cC7", + "OETH_ARM_IMPL": "0x187FfF686a5f42ACaaF56469FcCF8e6Feca18248" + } +} \ No newline at end of file diff --git a/script/deploy/DeployManager.sol b/script/deploy/DeployManager.sol index dd8780d..600cb19 100644 --- a/script/deploy/DeployManager.sol +++ b/script/deploy/DeployManager.sol @@ -8,6 +8,7 @@ import {AbstractDeployScript} from "./AbstractDeployScript.sol"; import {DeployCoreMainnetScript} from "./mainnet/001_DeployCoreScript.sol"; import {UpgradeMainnetScript} from "./mainnet/002_UpgradeScript.sol"; import {UpgradeLidoARMMainnetScript} from "./mainnet/003_UpgradeLidoARMScript.sol"; +import {UpdateCrossPriceMainnetScript} from "./mainnet/004_UpdateCrossPriceScript.sol"; import {DeployCoreHoleskyScript} from "./holesky/001_DeployCoreScript.sol"; import {UpgradeHoleskyScript} from "./holesky/002_UpgradeScript.sol"; @@ -60,6 +61,7 @@ contract DeployManager is Script { _runDeployFile(new DeployCoreMainnetScript()); _runDeployFile(new UpgradeMainnetScript(this)); _runDeployFile(new UpgradeLidoARMMainnetScript()); + _runDeployFile(new UpdateCrossPriceMainnetScript()); } else if (block.chainid == 17000) { _runDeployFile(new DeployCoreHoleskyScript()); _runDeployFile(new UpgradeHoleskyScript(this)); diff --git a/script/deploy/mainnet/003_UpgradeLidoARMScript.sol b/script/deploy/mainnet/003_UpgradeLidoARMScript.sol index 3e390e7..3194357 100644 --- a/script/deploy/mainnet/003_UpgradeLidoARMScript.sol +++ b/script/deploy/mainnet/003_UpgradeLidoARMScript.sol @@ -20,7 +20,7 @@ contract UpgradeLidoARMMainnetScript is AbstractDeployScript { GovProposal public govProposal; string public constant override DEPLOY_NAME = "003_UpgradeLidoARMScript"; - bool public constant override proposalExecuted = false; + bool public constant override proposalExecuted = true; Proxy lidoARMProxy; Proxy capManProxy; diff --git a/script/deploy/mainnet/004_UpdateCrossPriceScript.sol b/script/deploy/mainnet/004_UpdateCrossPriceScript.sol new file mode 100644 index 0000000..a8cbfbc --- /dev/null +++ b/script/deploy/mainnet/004_UpdateCrossPriceScript.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT + +pragma solidity 0.8.23; + +import "forge-std/console.sol"; + +import {GovProposal, GovSixHelper} from "contracts/utils/GovSixHelper.sol"; +import {AbstractDeployScript} from "../AbstractDeployScript.sol"; + +contract UpdateCrossPriceMainnetScript is AbstractDeployScript { + using GovSixHelper for GovProposal; + + GovProposal public govProposal; + + string public constant override DEPLOY_NAME = "004_UpdateCrossPriceScript"; + bool public constant override proposalExecuted = false; + + function _execute() internal override {} + + function _buildGovernanceProposal() internal override { + govProposal.setDescription("Update Cross Price for Lido ARM"); + + uint256 newCrossPrice = 0.9999 * 1e36; + + govProposal.action(deployedContracts["LIDO_ARM"], "setCrossPrice(uint256)", abi.encode(newCrossPrice)); + + _fork(); + } + + function _fork() internal override { + if (this.isForked()) { + govProposal.simulate(); + } + } +} diff --git a/test/fork/LidoFixedPriceMultiLpARM/Deposit.t.sol b/test/fork/LidoFixedPriceMultiLpARM/Deposit.t.sol index 8db6f65..525e804 100644 --- a/test/fork/LidoFixedPriceMultiLpARM/Deposit.t.sol +++ b/test/fork/LidoFixedPriceMultiLpARM/Deposit.t.sol @@ -731,7 +731,7 @@ contract Fork_Concrete_LidoARM_Deposit_Test_ is Fork_Shared_Test_ { ); uint256 expectedTotalSupplyBeforeDeposit = expectTotalAssetsBeforeSwap; - uint256 expectTotalAssetsBeforeDeposit = expectTotalAssetsBeforeSwap - 2 + uint256 expectTotalAssetsBeforeDeposit = expectTotalAssetsBeforeSwap - 1 // steth in discounted to the cross price + ((swapInAmount * 0.999e36) / 1e36) // weth out discounted by the buy price diff --git a/test/smoke/LidoARMSmokeTest.t.sol b/test/smoke/LidoARMSmokeTest.t.sol index 6d13c7a..06719e0 100644 --- a/test/smoke/LidoARMSmokeTest.t.sol +++ b/test/smoke/LidoARMSmokeTest.t.sol @@ -52,7 +52,7 @@ contract Fork_LidoARM_Smoke_Test is AbstractSmokeTest { assertEq(address(lidoARM.weth()), Mainnet.WETH, "WETH"); assertEq(lidoARM.liquidityAsset(), Mainnet.WETH, "liquidity asset"); assertEq(lidoARM.claimDelay(), 10 minutes, "claim delay"); - assertEq(lidoARM.crossPrice(), 0.99985e36, "cross price"); + assertEq(lidoARM.crossPrice(), 0.9999e36, "cross price"); assertEq(capManager.accountCapEnabled(), false, "account cap enabled"); assertEq(capManager.operator(), Mainnet.ARM_RELAYER, "Operator"); @@ -71,10 +71,10 @@ contract Fork_LidoARM_Smoke_Test is AbstractSmokeTest { function test_swap_exact_weth_for_steth() external { // trader buys stETH and sells WETH, the ARM sells stETH at a + // 0.5 bps discount + _swapExactTokensForTokens(weth, steth, 0.99995e36, 10 ether); // 1 bps discount - _swapExactTokensForTokens(weth, steth, 0.9999e36, 10 ether); - // 1.5 bps discount - _swapExactTokensForTokens(weth, steth, 0.99985e36, 100 ether); + _swapExactTokensForTokens(weth, steth, 0.9999e36, 100 ether); } function test_swapTokensForExactTokens() external { @@ -108,7 +108,7 @@ contract Fork_LidoARM_Smoke_Test is AbstractSmokeTest { expectedOut = amountIn * price / 1e36; vm.prank(Mainnet.ARM_RELAYER); - uint256 sellPrice = price < 0.99965e36 ? 0.99985e36 : price + 2e32; + uint256 sellPrice = price < 0.9997e36 ? 0.9999e36 : price + 2e32; lidoARM.setPrices(price, sellPrice); } // Approve the ARM to transfer the input token of the swap. @@ -145,7 +145,7 @@ contract Fork_LidoARM_Smoke_Test is AbstractSmokeTest { expectedIn = amountOut * 1e36 / price + 3; vm.prank(Mainnet.ARM_RELAYER); - uint256 sellPrice = price < 0.99965e36 ? 0.99985e36 : price + 2e32; + uint256 sellPrice = price < 0.9997e36 ? 0.9999e36 : price + 2e32; lidoARM.setPrices(price, sellPrice); } // Approve the ARM to transfer the input token of the swap.