Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Scripts update #165

Merged
merged 72 commits into from
Nov 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
1783318
Price Converter & Swapper update
dxganta Jun 28, 2024
0232015
scUSDT
dxganta Jun 28, 2024
48804ee
usdtPriceConverter, usdtSwapper, usdtAavev3Adapter
dxganta Jul 8, 2024
3df667d
constructor tests passing
dxganta Jul 12, 2024
0570677
rebalance, sellProfit tests added
dxganta Jul 12, 2024
6cfd92e
testFuzz_withdraw failing
dxganta Jul 15, 2024
4a0a4cc
scDAI & scSDAI + tests
dxganta Jul 15, 2024
f2ae0f2
Merge branch 'main' into scSkeleton
brkomir Aug 7, 2024
6ea00f8
simplify swapper modifications
brkomir Aug 13, 2024
c6cedf0
price converter initial refactoring
brkomir Aug 14, 2024
86c5386
speed up tests execution
brkomir Aug 15, 2024
20c0f84
fix some of the failing tests
brkomir Aug 15, 2024
802dba0
scUSDCv2 refactor to common base contract
brkomir Aug 19, 2024
8ee9d44
scUSDT test fix
dxganta Aug 19, 2024
9210c71
fix failing test
brkomir Aug 20, 2024
57f38f5
rename scSkeleton -> scCrossAssetYieldVault
brkomir Aug 20, 2024
ec84373
renaming & minor cleaning up
brkomir Aug 20, 2024
5c9582c
scUSDT tests complete
dxganta Aug 20, 2024
3ea1189
price converter update tests added
dxganta Aug 20, 2024
556713f
scDAI constructor tests
dxganta Aug 20, 2024
7fe42d9
improve scDAI coverage
brkomir Aug 22, 2024
b1b5fd4
price converter cleanup
brkomir Aug 22, 2024
8f12784
scDAI redeem increase coverage
dxganta Aug 23, 2024
4976812
scUSDT withdraw after profit
dxganta Aug 23, 2024
2e16574
swapper separation
brkomir Aug 28, 2024
e853da1
rename refactoring of swappers & price converters
brkomir Aug 28, 2024
1efc9ed
added SwapperLib library
brkomir Aug 29, 2024
42a45a2
uncomment & fix usdcV2 0x tests
brkomir Aug 29, 2024
b98165f
zeroEx swapper separaton
brkomir Aug 29, 2024
fb48aee
move Swapper & PriceConverter into corresponding folders
brkomir Aug 29, 2024
52817bd
WIP on update-euler-reference
brkomir Aug 29, 2024
2cb2744
rename refactor
brkomir Aug 29, 2024
0747495
fix logical error in scSDAI and improve coverage
brkomir Aug 30, 2024
527a0cb
speed up v1 vault tests
brkomir Aug 30, 2024
27baf9d
add target router address to zeroExSwapper
brkomir Aug 30, 2024
ca29e2c
renaming of IPriceConverter functions
brkomir Aug 30, 2024
0a72bd4
rename ZeroExSwapper -> UniversalSwapper
brkomir Sep 3, 2024
5e4c4fc
clean up and improve coverage
brkomir Sep 5, 2024
fe276da
Merge branch 'main' into scSkeleton
brkomir Sep 5, 2024
9decf4a
improve scUSDCv2 tests
brkomir Sep 11, 2024
8683718
clean up and improve execution time for scWETHv2 tests
brkomir Sep 13, 2024
8f32655
remove euler-interfaces-legacy dependency
brkomir Sep 13, 2024
ce8e5f2
using "constructor" instead of "setUp" to speed up tests
brkomir Sep 16, 2024
d1fffc3
add documentation for swapper contracts
brkomir Sep 16, 2024
28eb8ea
add documentation for price converter contracts
brkomir Sep 16, 2024
e96e61a
remove 0x reference from BaseV2Vault contract
brkomir Sep 17, 2024
0c73f74
update & add docs
brkomir Sep 18, 2024
33e1978
fix occasionally failing staking tests
brkomir Sep 19, 2024
109b267
reorganize scripts
brkomir Sep 19, 2024
f81460a
refactor & add scCrossAssetYieldVaultBaseScript
brkomir Sep 26, 2024
84cf9c6
Merge branch 'scSkeleton' into scripts-update
brkomir Sep 26, 2024
e6ff675
fix after merge issues
brkomir Sep 26, 2024
6db8a95
add common rebalance script for scCrossAssetYieldVault
brkomir Sep 29, 2024
2082bc9
add common reallocate script for scCrossAssetYieldVault
brkomir Oct 3, 2024
4b1af84
add common "exitAllPositions" script for scCrossAssetYieldVault
brkomir Oct 9, 2024
9af8e51
Merge branch 'main' into scripts-update
brkomir Oct 10, 2024
5b2c9e4
cleaning up
brkomir Oct 11, 2024
d3d4f65
SwapperLib moved to src/lib
brkomir Oct 11, 2024
599985f
add scUsdt deploy script & refactor other
brkomir Oct 17, 2024
1d81d01
rebalance scUSDT script
brkomir Oct 24, 2024
8813cc5
Merge branch 'main' into scripts-update
brkomir Oct 24, 2024
8e8844f
add ExitAllPositions scUSDT script
brkomir Oct 24, 2024
5e2cd87
fix failing test
brkomir Oct 24, 2024
2f70b4d
Merge branch 'main' into scripts-update
brkomir Oct 25, 2024
fd5b554
scUSDS deploy script
brkomir Oct 25, 2024
374c6bc
rebalance scSDAI script
brkomir Oct 27, 2024
cee16f3
update file references
brkomir Oct 28, 2024
39a75e3
scSDAI exitAllPositions script
brkomir Oct 28, 2024
4870e08
update deployed mainnet addresses
brkomir Nov 7, 2024
4465dd5
update tests
brkomir Nov 7, 2024
e6bcb06
Merge branch 'main' into scripts-update
brkomir Nov 14, 2024
3ddbed0
fix build
brkomir Nov 14, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,13 @@ runs = 256
[profile.ci]
fuzz_runs = 100_000
verbosity = 4
solc = "0.8.21"
evm_version = "cancun"

[rpc_endpoints]
goerli = "${RPC_URL_GOERLI}"
mainnet = "${RPC_URL_MAINNET}"

[etherscan]
goerli = {key = "${ETHERSCAN_KEY}", url = "https://api-goerli.etherscan.io/api"}
mainnet = {key = "${ETHERSCAN_KEY}"}
goerli = { key = "${ETHERSCAN_KEY}", url = "https://api-goerli.etherscan.io/api" }
mainnet = { key = "${ETHERSCAN_KEY}" }
35 changes: 10 additions & 25 deletions script/DeployLiquity.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ pragma solidity ^0.8.13;
import "forge-std/console2.sol";
import {ERC20} from "solmate/tokens/ERC20.sol";

import {MainnetAddresses} from "./base/MainnetAddresses.sol";
import {MainnetDeployBase} from "./base/MainnetDeployBase.sol";
import {ISwapRouter} from "../src/interfaces/uniswap/ISwapRouter.sol";
import {Constants as C} from "../src/lib/Constants.sol";
import {scLiquity} from "../src/liquity/scLiquity.sol";
import {SwapperLib} from "src/lib/SwapperLib.sol";
import {MainnetAddresses} from "script/base/MainnetAddresses.sol";
import {MainnetDeployBase} from "script/base/MainnetDeployBase.sol";
import {Constants as C} from "src/lib/Constants.sol";
import {scLiquity} from "src/liquity/scLiquity.sol";

/**
* Mainnet deployment script for scLiquity vault.
Expand All @@ -24,32 +24,17 @@ contract DeployLiquity is MainnetDeployBase {
// get some LUSD and make the initial deposit (addressing share inflation)
weth.deposit{value: 0.01 ether}();

uint256 usdcAmount = _swapWethForUsdc(0.01 ether);
uint256 lusdAmount = _swapUsdcForLusd(usdcAmount);
uint256 usdcAmount =
SwapperLib._uniswapSwapExactInput(address(weth), address(usdc), deployerAddress, 0.01 ether, 0, 500); // 0.05% pool fee
uint256 lusdAmount =
SwapperLib._uniswapSwapExactInput(address(usdc), address(lusd), deployerAddress, usdcAmount, 0, 500); // 0.05% pool fee

_deposit(vault, lusdAmount);

_setTreasury(vault, MainnetAddresses.TREASURY);

_transferAdminRoleToMultisig(vault, deployerAddress);
_transferAdminRoleToMultisig(vault);

vm.stopBroadcast();
}

function _swapUsdcForLusd(uint256 _amountIn) internal returns (uint256 amountOut) {
usdc.approve(C.UNISWAP_V3_SWAP_ROUTER, _amountIn);

ISwapRouter.ExactInputSingleParams memory params = ISwapRouter.ExactInputSingleParams({
tokenIn: address(usdc),
tokenOut: address(lusd),
fee: 500, // 0.05%
recipient: deployerAddress,
deadline: block.timestamp + 1000,
amountIn: _amountIn,
amountOutMinimum: 0,
sqrtPriceLimitX96: 0
});

amountOut = ISwapRouter(C.UNISWAP_V3_SWAP_ROUTER).exactInputSingle(params);
}
}
8 changes: 4 additions & 4 deletions script/DeployStaking.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
pragma solidity ^0.8.13;

import "forge-std/Script.sol";
import {CREATE3Script} from "./base/CREATE3Script.sol";
import {RewardTracker} from "../src/staking/RewardTracker.sol";
import {MainnetAddresses as MA} from "./base/MainnetAddresses.sol";
import {Constants as C} from "../src/lib/Constants.sol";
import {CREATE3Script} from "script/base/CREATE3Script.sol";
import {MainnetAddresses as MA} from "script/base/MainnetAddresses.sol";
import {RewardTracker} from "src/staking/RewardTracker.sol";
import {Constants as C} from "src/lib/Constants.sol";

contract DeployStaking is CREATE3Script {
string public NAME = "Staked Quartz";
Expand Down
8 changes: 8 additions & 0 deletions script/base/CREATE3Script.sol
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,12 @@ abstract contract CREATE3Script is Script {

return keccak256(bytes(string.concat(name, "-v", version)));
}

// function predictDeploy(IERC4626 _vault) public view returns (YieldStreams predicted) {
// predicted = YieldStreams(CREATE3.getDeployed(getSalt(_vault), address(this)));
// }

// function isDeployed(IERC4626 _vault) public view returns (bool) {
// return address(predictDeploy(_vault)).code.length > 0;
// }
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,29 +27,22 @@ import {MainnetDeployBase} from "../base/MainnetDeployBase.sol";
* Base Deployment file that handles Forked & Mainnet deployment.
* Forked node deployments are equivalent to mainnet deployments.
*/
abstract contract DeployLeveragedEth is MainnetDeployBase {
IPool aavePool = IPool(C.AAVE_V3_POOL);
ICurvePool curveEthStEthPool = ICurvePool(C.CURVE_ETH_STETH_POOL);
ISwapRouter uniswapRouter = ISwapRouter(C.UNISWAP_V3_SWAP_ROUTER);

abstract contract DeployScWethV2AndScUsdcV2 is MainnetDeployBase {
scWETH scWeth;
scUSDC scUsdc;

address alice = DC.ALICE;
address bob = DC.BOB;

function _deploy() internal {
vm.startBroadcast(deployerPrivateKey);
vm.startBroadcast(deployerAddress);

scWETH.ConstructorParams memory scWethParams = scWETH.ConstructorParams({
admin: deployerAddress,
keeper: keeper,
targetLtv: 0.85e18,
slippageTolerance: 0.99e18,
aavePool: aavePool,
aavePool: IPool(C.AAVE_V3_POOL),
aaveAwstEth: IAToken(C.AAVE_V3_AWSTETH_TOKEN),
aaveVarDWeth: ERC20(C.AAVE_V3_VAR_DEBT_WETH_TOKEN),
curveEthStEthPool: curveEthStEthPool,
curveEthStEthPool: ICurvePool(C.CURVE_ETH_STETH_POOL),
stEth: ILido(C.STETH),
wstEth: IwstETH(C.WSTETH),
weth: weth,
Expand All @@ -66,11 +59,11 @@ abstract contract DeployLeveragedEth is MainnetDeployBase {
scWETH: scWeth,
usdc: usdc,
weth: WETH(payable(C.WETH)),
aavePool: aavePool,
aavePool: IPool(C.AAVE_V3_POOL),
aavePoolDataProvider: IPoolDataProvider(C.AAVE_V3_POOL_DATA_PROVIDER),
aaveAUsdc: IAToken(C.AAVE_V3_AUSDC_TOKEN),
aaveVarDWeth: ERC20(C.AAVE_V3_VAR_DEBT_WETH_TOKEN),
uniswapSwapRouter: uniswapRouter,
uniswapSwapRouter: ISwapRouter(C.UNISWAP_V3_SWAP_ROUTER),
chainlinkUsdcToEthPriceFeed: AggregatorV3Interface(C.CHAINLINK_USDC_ETH_PRICE_FEED),
balancerVault: IVault(C.BALANCER_VAULT)
});
Expand Down
13 changes: 11 additions & 2 deletions script/base/MainnetAddresses.sol
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,17 @@ library MainnetAddresses {
address public constant SCUSDCV2_AAVEV2_ADAPTER = 0xE0E9E98FD963C2e69718C76939924522A9646885;
address public constant SCUSDCV2_AAVEV3_ADAPTER = 0xf59c324fF111D86894f175E22B70b0d54998ff3E;

address public constant SCDAI = address(0x00); //todo: update after deployment
address public constant SCDAI_SPARK_ADAPTER = address(0x00); //TODO: update after deployment
address public constant SCUSDT = 0x237eCDF745d2a0052AeaF6f027ce82F77431871E;
address public constant SCUSDT_AAVEV3_ADAPTER = 0x795FDAC1bB26D219991f1923190cA7eB0046e32E;
address public constant USDT_WETH_PRICE_CONVERTER = 0x8e045458385d51d047bCA5b2B3b74053e235f5F9;
address public constant USDT_WETH_SWAPPER = 0xcD0Ae497068980ce94fbe20A6F7431329F0e4D08;

address public constant SCDAI = 0x16f3cdA06743a58bDdE123687F99E80DCbc28d14;

address public constant SCSDAI = 0x0Fc97657B67C7E7bD4100c72851d0377DA14B470;
address public constant SCSDAI_SPARK_ADAPTER = 0xeD81a1D7cb2AdC2ee379B594e0dA6a988a865ae4;
address public constant SDAI_WETH_PRICE_CONVERTER = 0x0dD22Ebc502f328b29a19Bf0A74373B03DfD374c;
address public constant SDAI_WETH_SWAPPER = 0x3F76D80dfc54677262FeA7E94a73D96aC69F4A10;

address public constant PRICE_CONVERTER = 0xD76B0Ff4A487CaFE4E19ed15B73f12f6A92095Ca;
address public constant SWAPPER = 0x6649f12b5ef495a3861b21E3206B1AbfA33A6531;
Expand Down
49 changes: 22 additions & 27 deletions script/base/MainnetDeployBase.sol
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import {sc4626} from "../../src/sc4626.sol";
abstract contract MainnetDeployBase is CREATE3Script {
using SafeTransferLib for ERC20;

uint256 deployerPrivateKey;
address deployerAddress;
address keeper;
address multisig;
Expand All @@ -33,42 +32,38 @@ abstract contract MainnetDeployBase is CREATE3Script {
}

function _init() internal virtual {
deployerPrivateKey = uint256(vm.envBytes32("PRIVATE_KEY"));
uint256 deployerPrivateKey = uint256(vm.envBytes32("PRIVATE_KEY"));

require(deployerPrivateKey != 0, "Deployer private key not set");

deployerAddress = vm.rememberKey(deployerPrivateKey);
keeper = vm.envAddress("KEEPER");
multisig = vm.envAddress("MULTISIG");

keeper = vm.envOr("KEEPER", MainnetAddresses.KEEPER);
multisig = vm.envOr("MULTISIG", MainnetAddresses.MULTISIG);
}

function deployWithCreate3(string memory _name, bytes memory _creationCode) public returns (address deployed) {
deployed = getCreate3Contract(deployerAddress, _name);

if (deployed.code.length != 0) {
console2.log("Existing", _name, ":", deployed);
} else {
create3.deploy(getCreate3ContractSalt(_name), _creationCode);
console2.log("Deployed", _name, ":", deployed);
}
}

function _transferAdminRoleToMultisig(AccessControl _contract, address _currentAdmin) internal {
function _transferAdminRoleToMultisig(AccessControl _contract) internal {
_contract.grantRole(_contract.DEFAULT_ADMIN_ROLE(), multisig);
_contract.revokeRole(_contract.DEFAULT_ADMIN_ROLE(), _currentAdmin);
_contract.revokeRole(_contract.DEFAULT_ADMIN_ROLE(), deployerAddress);
}

function _setTreasury(sc4626 _vault, address _treasury) internal {
_vault.setTreasury(_treasury);
}

function _deposit(sc4626 _vault, uint256 _amount) internal virtual {
_vault.asset().approve(address(_vault), _amount);
function _deposit(ERC4626 _vault, uint256 _amount) internal virtual {
ERC20(_vault.asset()).safeApprove(address(_vault), _amount);
_vault.deposit(_amount, deployerAddress);
}

function _swapWethForUsdc(uint256 _amount) internal returns (uint256 amountOut) {
weth.deposit{value: _amount}();

weth.approve(C.UNISWAP_V3_SWAP_ROUTER, _amount);

ISwapRouter.ExactInputSingleParams memory params = ISwapRouter.ExactInputSingleParams({
tokenIn: address(weth),
tokenOut: address(usdc),
fee: 500, // 0.05%
recipient: deployerAddress,
deadline: block.timestamp + 1000,
amountIn: _amount,
amountOutMinimum: 0,
sqrtPriceLimitX96: 0
});

amountOut = ISwapRouter(C.UNISWAP_V3_SWAP_ROUTER).exactInputSingle(params);
}
}
57 changes: 0 additions & 57 deletions script/base/ScUsdcV2ScriptBase.sol

This file was deleted.

Loading
Loading