WIP: Chain138 deployment scripts, flash receivers, HYBX OMNL recovery
This commit is contained in:
125
script/flash/RunMainnetUniV2CwusdcUsdcFlashRebalanceRemove.s.sol
Normal file
125
script/flash/RunMainnetUniV2CwusdcUsdcFlashRebalanceRemove.s.sol
Normal file
@@ -0,0 +1,125 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
import {Script, console} from "forge-std/Script.sol";
|
||||
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
||||
import {
|
||||
AaveUniV2CwStableRebalanceFlashReceiver
|
||||
} from "../../contracts/flash/AaveUniV2CwStableRebalanceFlashReceiver.sol";
|
||||
|
||||
/**
|
||||
* @title RunMainnetUniV2CwusdcUsdcFlashRebalanceRemove
|
||||
* @notice Simulate or broadcast flash rebalance + LP remove on mainnet cWUSDC/USDC UniV2.
|
||||
*
|
||||
* Prerequisite: run plan-mainnet-cwusdc-usdc-univ2-flash-rebalance-remove.py and transfer LP
|
||||
* to the receiver (or set UNIV2_FLASH_PULL_LP=1 with prior LP approval to receiver).
|
||||
*
|
||||
* Env:
|
||||
* PRIVATE_KEY
|
||||
* ETHEREUM_MAINNET_RPC
|
||||
* UNIV2_FLASH_REBALANCE_RECEIVER_MAINNET
|
||||
* UNIV2_FLASH_REBALANCE_PLAN_JSON optional path to planner JSON
|
||||
*/
|
||||
contract RunMainnetUniV2CwusdcUsdcFlashRebalanceRemove is Script {
|
||||
address internal constant DEFAULT_PAIR = 0xC28706F899266b36BC43cc072b3a921BDf2C48D9;
|
||||
address internal constant DEFAULT_ROUTER = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
|
||||
address internal constant DEFAULT_CW = 0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a;
|
||||
address internal constant DEFAULT_USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
|
||||
|
||||
function run() external {
|
||||
uint256 pk = vm.envUint("PRIVATE_KEY");
|
||||
address receiver = vm.envAddress("UNIV2_FLASH_REBALANCE_RECEIVER_MAINNET");
|
||||
string memory planPath = vm.envOr(
|
||||
"UNIV2_FLASH_REBALANCE_PLAN_JSON",
|
||||
string("reports/status/mainnet-cwusdc-usdc-univ2-flash-rebalance-plan-latest.json")
|
||||
);
|
||||
|
||||
(
|
||||
address pair,
|
||||
address router,
|
||||
address cw,
|
||||
address usdc,
|
||||
address lpHolder,
|
||||
address recipient,
|
||||
uint256 lpAmount,
|
||||
uint256 flashStableIn,
|
||||
uint256 minCwRebalance,
|
||||
uint256 minCwRemove,
|
||||
uint256 minStableRemove,
|
||||
uint256 cwToSell,
|
||||
uint256 minStableRepay
|
||||
) = _loadPlan(planPath);
|
||||
|
||||
pair = pair == address(0) ? DEFAULT_PAIR : pair;
|
||||
router = router == address(0) ? DEFAULT_ROUTER : router;
|
||||
cw = cw == address(0) ? DEFAULT_CW : cw;
|
||||
usdc = usdc == address(0) ? DEFAULT_USDC : usdc;
|
||||
|
||||
console.log("receiver", receiver);
|
||||
console.log("pair", pair);
|
||||
console.log("lpHolder", lpHolder);
|
||||
console.log("lpAmount", lpAmount);
|
||||
console.log("flashStableIn", flashStableIn);
|
||||
console.log("receiverLpBefore", IERC20(pair).balanceOf(receiver));
|
||||
|
||||
vm.startBroadcast(pk);
|
||||
if (vm.envOr("UNIV2_FLASH_PULL_LP", uint256(0)) == 1) {
|
||||
AaveUniV2CwStableRebalanceFlashReceiver(receiver).pullLpFrom(pair, lpHolder, lpAmount);
|
||||
}
|
||||
AaveUniV2CwStableRebalanceFlashReceiver.RebalanceRemoveParams memory p =
|
||||
AaveUniV2CwStableRebalanceFlashReceiver.RebalanceRemoveParams({
|
||||
router: router,
|
||||
pair: pair,
|
||||
cwToken: cw,
|
||||
stableToken: usdc,
|
||||
lpAmount: lpAmount,
|
||||
rebalanceStableIn: flashStableIn,
|
||||
minCwFromRebalance: minCwRebalance,
|
||||
minStableFromRemove: minStableRemove,
|
||||
minCwFromRemove: minCwRemove,
|
||||
cwToSellForRepay: cwToSell,
|
||||
minStableFromRepaySwap: minStableRepay,
|
||||
recipient: recipient
|
||||
});
|
||||
AaveUniV2CwStableRebalanceFlashReceiver(receiver).runRebalanceRemove(usdc, flashStableIn, p);
|
||||
vm.stopBroadcast();
|
||||
|
||||
console.log("recipientStableAfter", IERC20(usdc).balanceOf(recipient));
|
||||
console.log("recipientCwAfter", IERC20(cw).balanceOf(recipient));
|
||||
}
|
||||
|
||||
function _loadPlan(string memory path)
|
||||
internal
|
||||
view
|
||||
returns (
|
||||
address pair,
|
||||
address router,
|
||||
address cw,
|
||||
address usdc,
|
||||
address lpHolder,
|
||||
address recipient,
|
||||
uint256 lpAmount,
|
||||
uint256 flashStableIn,
|
||||
uint256 minCwRebalance,
|
||||
uint256 minCwRemove,
|
||||
uint256 minStableRemove,
|
||||
uint256 cwToSell,
|
||||
uint256 minStableRepay
|
||||
)
|
||||
{
|
||||
string memory json = vm.readFile(path);
|
||||
pair = vm.parseJsonAddress(json, ".pair");
|
||||
router = vm.parseJsonAddress(json, ".router");
|
||||
cw = vm.parseJsonAddress(json, ".cwToken");
|
||||
usdc = vm.parseJsonAddress(json, ".stableToken");
|
||||
lpHolder = vm.parseJsonAddress(json, ".lpHolder");
|
||||
recipient = vm.parseJsonAddress(json, ".recipient");
|
||||
lpAmount = vm.parseJsonUint(json, ".lpAmountRaw");
|
||||
flashStableIn = vm.parseJsonUint(json, ".flashLoan.stableBorrowRaw");
|
||||
minCwRebalance = vm.parseJsonUint(json, ".rebalanceSwap.minCwOutRaw");
|
||||
minCwRemove = vm.parseJsonUint(json, ".removeLiquidity.minCwOutRaw");
|
||||
minStableRemove = vm.parseJsonUint(json, ".removeLiquidity.minStableOutRaw");
|
||||
cwToSell = vm.parseJsonUint(json, ".repaySwap.cwToSellRaw");
|
||||
minStableRepay = vm.parseJsonUint(json, ".repaySwap.minStableOutRaw");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user