diff --git a/script/postdeployment/MockSetupPostEnvironment.s.sol b/script/postdeployment/MockSetupPostEnvironment.s.sol index 4a319ff..bec12ab 100644 --- a/script/postdeployment/MockSetupPostEnvironment.s.sol +++ b/script/postdeployment/MockSetupPostEnvironment.s.sol @@ -11,6 +11,15 @@ import {MintableERC20} from '@contracts/for-test/MintableERC20.sol'; import {IERC20} from '@openzeppelin/contracts/token/ERC20/IERC20.sol'; import {Router} from '@contracts/for-test/Router.sol'; +interface IVault721 { + function getProxy(address _user) external view returns (address); + function build(address _user) external returns (address payable); +} + +interface ODProxy { + function execute(address _target, bytes memory _data) external returns (bytes memory); +} + // BROADCAST // source .env && forge script MockSetupPostEnvironment --with-gas-price 2000000000 -vvvvv --rpc-url $ARB_SEPOLIA_RPC --broadcast --verify --etherscan-api-key $ARB_ETHERSCAN_API_KEY @@ -20,6 +29,7 @@ import {Router} from '@contracts/for-test/Router.sol'; contract MockSetupPostEnvironment is CommonSepolia { IAlgebraFactory public algebraFactory = IAlgebraFactory(SEPOLIA_ALGEBRA_FACTORY); MintableERC20 public mockWeth; + MintableERC20 public mockWsteth = MintableERC20(0x5Ae92E2cBce39b74f149B7dA16d863382397d4a7); function run() public { vm.startBroadcast(vm.envUint('ARB_SEPOLIA_DEPLOYER_PK')); @@ -48,8 +58,8 @@ contract MockSetupPostEnvironment is CommonSepolia { IERC20(mockWeth).balanceOf(_pool); // mint SystemCoin and Weth to use as liquidity - mintSystemCoin(); mintMockWeth(); + mintSystemCoin(); // deploy Router for AlgebraPool Router _router = new Router(IAlgebraPool(_pool), deployer); @@ -73,10 +83,41 @@ contract MockSetupPostEnvironment is CommonSepolia { mockWeth.mint(deployer, MINT_AMOUNT); } + // todo: remove `magic` numbers - refactor function mintSystemCoin() public { - (bool ok,) = - SEPOLIA_SYSTEM_COIN.call{value: 0}(abi.encodeWithSignature('mint(address,uint256)', deployer, MINT_AMOUNT)); - require(ok, 'MintFail'); + IVault721 vault721 = IVault721(0xa602c0cFf8028Dd4c99fbC5e85cF0c083C5b991A); + address _safeManager = 0x8ca7D88eaFB6f666997Ca0F62Beddd8A09a62910; + address _basicActions = 0x60487E0a0eFbfbD30908b03ea6b7833E2520604F; + address _coinJoin = 0x93544B224AB94F2b568CaeD5A074f4217fC782c7; + address _collateralJoin_wsteth = 0x52400D3AEB82b0923898D918be51439A9198D980; + + // create proxy for deployer + address _proxy = vault721.getProxy(deployer); + if (_proxy == address(0)) { + _proxy = vault721.build(deployer); + } + + // create safe for deployer + bytes memory _payload = + abi.encodeWithSignature('openSAFE(address,bytes32,address)', _safeManager, bytes32('WSTETH'), _proxy); + bytes memory _safeData = ODProxy(_proxy).execute(_basicActions, _payload); + uint256 _safeId = abi.decode(_safeData, (uint256)); + + // mint token + mockWsteth.mint(deployer, MINT_AMOUNT); + IERC20(mockWsteth).approve(_proxy, MINT_AMOUNT); + + // lock collateral & generate debt + bytes memory payload = abi.encodeWithSignature( + 'lockTokenCollateralAndGenerateDebt(address,address,address,uint256,uint256,uint256)', + _safeManager, + _collateralJoin_wsteth, + _coinJoin, + _safeId, + 850_000_000_000_000_000, + 500_000_000_000_000_000_000 + ); + ODProxy(_proxy).execute(_basicActions, payload); } function generateTickParams(IAlgebraPool pool) public view returns (int24 bottomTick, int24 topTick) {