Skip to content

Commit

Permalink
Audit post deploy (#38)
Browse files Browse the repository at this point in the history
* ran post-setup for audit

* add mock liquidity

* add liquidity w systemCoin

* deployed audit systemCoinOracle
  • Loading branch information
daopunk authored Mar 13, 2024
1 parent 4730d1d commit 157a747
Show file tree
Hide file tree
Showing 12 changed files with 8,226 additions and 49 deletions.
361 changes: 361 additions & 0 deletions broadcast/MockSetupPostEnvironment.s.sol/421614/run-1709752347.json

Large diffs are not rendered by default.

361 changes: 361 additions & 0 deletions broadcast/MockSetupPostEnvironment.s.sol/421614/run-1709752377.json

Large diffs are not rendered by default.

361 changes: 361 additions & 0 deletions broadcast/MockSetupPostEnvironment.s.sol/421614/run-1709752493.json

Large diffs are not rendered by default.

361 changes: 361 additions & 0 deletions broadcast/MockSetupPostEnvironment.s.sol/421614/run-1709752522.json

Large diffs are not rendered by default.

1,372 changes: 1,372 additions & 0 deletions broadcast/MockSetupPostEnvironment.s.sol/421614/run-1710293539.json

Large diffs are not rendered by default.

1,372 changes: 1,372 additions & 0 deletions broadcast/MockSetupPostEnvironment.s.sol/421614/run-1710293545.json

Large diffs are not rendered by default.

1,301 changes: 1,301 additions & 0 deletions broadcast/MockSetupPostEnvironment.s.sol/421614/run-1710293970.json

Large diffs are not rendered by default.

1,301 changes: 1,301 additions & 0 deletions broadcast/MockSetupPostEnvironment.s.sol/421614/run-1710293975.json

Large diffs are not rendered by default.

1,301 changes: 1,301 additions & 0 deletions broadcast/MockSetupPostEnvironment.s.sol/421614/run-latest.json

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions script/Registry.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@ uint256 constant WAD = 1e18;
address constant TEST_GOVERNOR = 0x37c5B029f9c3691B3d47cb024f84E5E257aEb0BB;

// Registry of protocol deployment
address constant SEPOLIA_SYSTEM_COIN = 0xFEE6D2833274CDDFfDb641DCa990733c6917598B;
address constant SEPOLIA_SYSTEM_COIN = 0x36D197e6145B37b8E2c6Ed20B568860835b55584;
address constant SEPOLIA_WETH = 0x980B62Da83eFf3D4576C647993b0c1D7faf17c73;

// Testnet Params
uint256 constant ORACLE_INTERVAL_TEST = 1 minutes;
uint256 constant MINT_AMOUNT = 1_000_000 ether;
uint256 constant INIT_WETH_AMOUNT = 1 ether;
uint256 constant INIT_OD_AMOUNT = 2500 ether;
uint256 constant INIT_OD_AMOUNT = 4020 ether; // as of March 12, 2024

// Members for governance
address constant H = 0x37c5B029f9c3691B3d47cb024f84E5E257aEb0BB;
Expand Down
47 changes: 0 additions & 47 deletions script/postdeployment/MockSetupPostEnv.s.sol

This file was deleted.

133 changes: 133 additions & 0 deletions script/postdeployment/MockSetupPostEnvironment.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.7.6;

import 'forge-std/console2.sol';
import '@script/Registry.s.sol';
import {CommonSepolia} from '@script/Common.s.sol';
import {IAlgebraFactory} from '@algebra-core/interfaces/IAlgebraFactory.sol';
import {IAlgebraPool} from '@algebra-core/interfaces/IAlgebraPool.sol';
import {IBaseOracle} from '@interfaces/oracles/IBaseOracle.sol';
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

// SIMULATE
// source .env && forge script MockSetupPostEnvironment --with-gas-price 2000000000 -vvvvv --rpc-url $ARB_SEPOLIA_RPC

contract MockSetupPostEnvironment is CommonSepolia {
IAlgebraFactory public algebraFactory = IAlgebraFactory(SEPOLIA_ALGEBRA_FACTORY);
MintableERC20 public mockWeth;
MintableERC20 public mockWsteth = MintableERC20(0x5Ae92E2cBce39b74f149B7dA16d863382397d4a7);
address public systemCoinOracle;

function run() public {
vm.startBroadcast(vm.envUint('ARB_SEPOLIA_DEPLOYER_PK'));
mockWeth = new MintableERC20('Wrapped ETH', 'WETH', 18);

algebraFactory.createPool(SEPOLIA_SYSTEM_COIN, address(mockWeth));
address _pool = algebraFactory.poolByPair(SEPOLIA_SYSTEM_COIN, address(mockWeth));

uint160 _sqrtPriceX96 = initialPrice(INIT_OD_AMOUNT, INIT_WETH_AMOUNT, _pool);
IAlgebraPool(_pool).initialize(_sqrtPriceX96);

IBaseOracle _odWethOracle = camelotRelayerFactory.deployAlgebraRelayer(
SEPOLIA_ALGEBRA_FACTORY, SEPOLIA_SYSTEM_COIN, address(mockWeth), uint32(ORACLE_INTERVAL_TEST)
);

IBaseOracle chainlinkEthUSDPriceFeed =
chainlinkRelayerFactory.deployChainlinkRelayer(SEPOLIA_CHAINLINK_ETH_USD_FEED, ORACLE_INTERVAL_TEST);

// deploy systemOracle
systemCoinOracle =
address(denominatedOracleFactory.deployDenominatedOracle(_odWethOracle, chainlinkEthUSDPriceFeed, false));

authOnlyFactories();

// check pool balance before
IERC20(SEPOLIA_SYSTEM_COIN).balanceOf(_pool);
IERC20(mockWeth).balanceOf(_pool);

// mint SystemCoin and Weth to use as liquidity
mintMockWeth();
mintSystemCoin();

// deploy Router for AlgebraPool
Router _router = new Router(IAlgebraPool(_pool), deployer);

// approve tokens to Router
IERC20(SEPOLIA_SYSTEM_COIN).approve(address(_router), MINT_AMOUNT);
IERC20(mockWeth).approve(address(_router), MINT_AMOUNT);

// add liquidity
(int24 bottomTick, int24 topTick) = generateTickParams(IAlgebraPool(_pool));
_router.addLiquidity(bottomTick, topTick, uint128(100));

// check pool balance after
IERC20(SEPOLIA_SYSTEM_COIN).balanceOf(_pool);
IERC20(mockWeth).balanceOf(_pool);

console2.logBytes20(bytes20(systemCoinOracle));

vm.stopBroadcast();
}

function mintMockWeth() public {
mockWeth.mint(deployer, MINT_AMOUNT);
}

// todo: remove `magic` numbers - refactor
function mintSystemCoin() public {
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) {
(, int24 tick,,,,,) = pool.globalState();
int24 tickSpacing = pool.tickSpacing();
bottomTick = ((tick / tickSpacing) * tickSpacing) - 3 * tickSpacing;
topTick = ((tick / tickSpacing) * tickSpacing) + 3 * tickSpacing;
}
}

0 comments on commit 157a747

Please sign in to comment.