Files
smom-dbis-138/script/bridge/trustless/FundMainnetLP.s.sol
2026-03-02 12:14:09 -08:00

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.");
}
}