50 lines
2.0 KiB
Solidity
50 lines
2.0 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.19;
|
|
|
|
import {Script, console} from "forge-std/Script.sol";
|
|
import {LiquidityPoolETH} from "../../../contracts/bridge/trustless/LiquidityPoolETH.sol";
|
|
|
|
/**
|
|
* @title FundMainnetLP
|
|
* @notice Add ETH and/or WETH liquidity to the mainnet LiquidityPoolETH (G4).
|
|
* @dev Env: PRIVATE_KEY, LIQUIDITY_POOL_ETH_MAINNET (or LIQUIDITY_POOL), ETHEREUM_MAINNET_RPC.
|
|
* Optional: FUND_ETH_AMOUNT_WEI (native ETH), FUND_WETH_AMOUNT_WEI (WETH to deposit).
|
|
* If both zero/unset, script exits without error (dry run).
|
|
*/
|
|
contract FundMainnetLP is Script {
|
|
function run() external {
|
|
address poolAddr = vm.envOr("LIQUIDITY_POOL_ETH_MAINNET", vm.envOr("LIQUIDITY_POOL", address(0)));
|
|
if (poolAddr == address(0)) {
|
|
console.log("Set LIQUIDITY_POOL_ETH_MAINNET (or LIQUIDITY_POOL) in .env");
|
|
return;
|
|
}
|
|
uint256 ethAmount = vm.envOr("FUND_ETH_AMOUNT_WEI", uint256(0));
|
|
uint256 wethAmount = vm.envOr("FUND_WETH_AMOUNT_WEI", uint256(0));
|
|
if (ethAmount == 0 && wethAmount == 0) {
|
|
console.log("Set FUND_ETH_AMOUNT_WEI and/or FUND_WETH_AMOUNT_WEI to fund the LP");
|
|
return;
|
|
}
|
|
|
|
uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
|
|
LiquidityPoolETH pool = LiquidityPoolETH(payable(poolAddr));
|
|
|
|
vm.startBroadcast(deployerPrivateKey);
|
|
|
|
if (ethAmount > 0) {
|
|
pool.provideLiquidity{value: ethAmount}(LiquidityPoolETH.AssetType.ETH);
|
|
console.log("Provided ETH liquidity:", ethAmount);
|
|
}
|
|
if (wethAmount > 0) {
|
|
address weth = pool.weth();
|
|
// Approve and deposit WETH
|
|
(bool ok,) = weth.call(abi.encodeWithSignature("approve(address,uint256)", poolAddr, wethAmount));
|
|
require(ok, "WETH approve failed");
|
|
pool.depositWETH(wethAmount);
|
|
console.log("Provided WETH liquidity:", wethAmount);
|
|
}
|
|
|
|
vm.stopBroadcast();
|
|
console.log("LP funding done.");
|
|
}
|
|
}
|