Skip to content

Commit

Permalink
add mock liquidity
Browse files Browse the repository at this point in the history
  • Loading branch information
daopunk committed Mar 12, 2024
1 parent 4730d1d commit a3e84d8
Showing 1 changed file with 44 additions and 3 deletions.
47 changes: 44 additions & 3 deletions script/postdeployment/MockSetupPostEnv.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,22 @@ 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';

// 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

// ToDo: add liquidity

contract MockSetupPostEnvironment is CommonSepolia {
IAlgebraFactory public algebraFactory = IAlgebraFactory(SEPOLIA_ALGEBRA_FACTORY);
MintableERC20 public mockWeth;

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

algebraFactory.createPool(SEPOLIA_SYSTEM_COIN, address(mockWeth));
address _pool = algebraFactory.poolByPair(SEPOLIA_SYSTEM_COIN, address(mockWeth));
Expand All @@ -42,6 +43,46 @@ contract MockSetupPostEnvironment is CommonSepolia {

authOnlyFactories();

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

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

// 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);

vm.stopBroadcast();
}

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

function mintSystemCoin() public {
(bool ok,) =
SEPOLIA_SYSTEM_COIN.call{value: 0}(abi.encodeWithSignature('mint(address,uint256)', deployer, MINT_AMOUNT));
require(ok, 'MintFail');
}

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 a3e84d8

Please sign in to comment.