pragma solidity ^0.8.19; import "forge-std/Script.sol"; import "@uniswap-v3-core/interfaces/IUniswapV3Factory.sol"; import "@uniswap-v3-core/interfaces/IUniswapV3Pool.sol"; import "../src/Harberg.sol"; import "../src/Stake.sol"; import "../src/Optimizer.sol"; import "../src/helpers/UniswapHelpers.sol"; import {LiquidityManager} from "../src/LiquidityManager.sol"; import {ERC1967Proxy} from "@openzeppelin/proxy/ERC1967/ERC1967Proxy.sol"; uint24 constant FEE = uint24(10_000); contract DeployScript is Script { using UniswapHelpers for IUniswapV3Pool; bool token0isWeth; address feeDest; address weth; address v3Factory; address twabc; function run() public { string memory seedPhrase = vm.readFile(".secret"); uint256 privateKey = vm.deriveKey(seedPhrase, 0); vm.startBroadcast(privateKey); address sender = vm.addr(privateKey); console.log(sender); Harberg harb = new Harberg("Kraiken", "KRK"); token0isWeth = address(weth) < address(harb); Stake stake = new Stake(address(harb), feeDest); harb.setStakingPool(address(stake)); IUniswapV3Factory factory = IUniswapV3Factory(v3Factory); address liquidityPool = factory.createPool(weth, address(harb), FEE); IUniswapV3Pool(liquidityPool).initializePoolFor1Cent(token0isWeth); Optimizer optimizer = new Optimizer(); bytes memory params = abi.encodeWithSignature("initialize(address,address)", address(harb),address(stake)); ERC1967Proxy proxy = new ERC1967Proxy(address(optimizer), params); LiquidityManager liquidityManager = new LiquidityManager(v3Factory, weth, address(harb), address(proxy)); liquidityManager.setFeeDestination(feeDest); // note: this delayed initialization is not a security issue. harb.setLiquidityManager(address(liquidityManager)); (bool sent, ) = address(liquidityManager).call{value: 0.01 ether}(""); require(sent, "Failed to send Ether"); //TODO: wait few minutes and call recenter vm.stopBroadcast(); } }