Some checks failed
CI/CD Pipeline / Lint and Format (push) Failing after 46s
CI/CD Pipeline / Terraform Validation (push) Failing after 35s
CI/CD Pipeline / Kubernetes Validation (push) Successful in 37s
Deploy ChainID 138 / Deploy ChainID 138 (push) Failing after 1m50s
HYBX OMNL TypeScript & anchor / token-aggregation build + reconcile artifact (push) Failing after 2m19s
Validation / validate-genesis (push) Successful in 51s
Validation / validate-terraform (push) Failing after 39s
Validation / validate-kubernetes (push) Failing after 10s
CI/CD Pipeline / Solidity Contracts (push) Failing after 12m56s
Validation / validate-smart-contracts (push) Failing after 12s
CI/CD Pipeline / Security Scanning (push) Failing after 15m52s
Validation / validate-security (push) Failing after 10m59s
Validation / validate-documentation (push) Failing after 17s
Validate Token List / validate (push) Failing after 30s
OMNL reconcile anchor / Run omnl:reconcile and upload artifacts (push) Failing after 26s
Verify Deployment / Verify Deployment (push) Failing after 56s
61 lines
2.6 KiB
Solidity
61 lines
2.6 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.20;
|
|
|
|
import {Test} from "forge-std/Test.sol";
|
|
import {console2} from "forge-std/console2.sol";
|
|
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
|
import {DODOIntegrationExternalUnwinder} from "../../contracts/flash/DODOIntegrationExternalUnwinder.sol";
|
|
|
|
contract EstimateMainnetCwUnwindForkTest is Test {
|
|
address constant DODO_PMM_INTEGRATION_MAINNET = 0xa9F284eD010f4F7d7F8F201742b49b9f58e29b84;
|
|
address constant POOL_CWUSDC_USDC = 0x69776fc607e9edA8042e320e7e43f54d06c68f0E;
|
|
address constant POOL_CWUSDT_USDT = 0x79156F6B7bf71a1B72D78189B540A89A6C13F6FC;
|
|
address constant USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
|
|
address constant USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7;
|
|
address constant CWUSDC = 0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a;
|
|
address constant CWUSDT = 0xaF5017d0163ecb99D9B5D94e3b4D7b09Af44D8AE;
|
|
|
|
DODOIntegrationExternalUnwinder internal unwinder;
|
|
|
|
function setUp() public {
|
|
string memory rpcUrl = vm.envString("ETHEREUM_MAINNET_RPC");
|
|
vm.createSelectFork(rpcUrl);
|
|
unwinder = new DODOIntegrationExternalUnwinder(DODO_PMM_INTEGRATION_MAINNET);
|
|
}
|
|
|
|
function testEstimateDirectUnwinds() public {
|
|
uint256[] memory sizes = new uint256[](10);
|
|
sizes[0] = 100_000; // 0.1
|
|
sizes[1] = 1_000_000; // 1
|
|
sizes[2] = 5_000_000; // 5
|
|
sizes[3] = 10_000_000; // 10
|
|
sizes[4] = 25_000_000; // 25
|
|
sizes[5] = 50_000_000; // 50
|
|
sizes[6] = 100_000_000; // 100
|
|
sizes[7] = 250_000_000; // 250
|
|
sizes[8] = 500_000_000; // 500
|
|
sizes[9] = 1_000_000_000; // 1000
|
|
|
|
console2.log("cWUSDC -> USDC");
|
|
_logCurve(CWUSDC, USDC, POOL_CWUSDC_USDC, sizes);
|
|
|
|
console2.log("cWUSDT -> USDT");
|
|
_logCurve(CWUSDT, USDT, POOL_CWUSDT_USDT, sizes);
|
|
}
|
|
|
|
function _logCurve(address tokenIn, address tokenOut, address pool, uint256[] memory sizes) internal {
|
|
for (uint256 i = 0; i < sizes.length; i++) {
|
|
uint256 snap = vm.snapshotState();
|
|
uint256 amountIn = sizes[i];
|
|
deal(tokenIn, address(this), amountIn);
|
|
IERC20(tokenIn).approve(address(unwinder), amountIn);
|
|
try unwinder.unwind(tokenIn, tokenOut, amountIn, 1, abi.encode(pool)) returns (uint256 amountOut) {
|
|
console2.log("in_raw", amountIn, "out_raw", amountOut);
|
|
} catch {
|
|
console2.log("in_raw", amountIn, "out_raw", uint256(0));
|
|
}
|
|
vm.revertToState(snap);
|
|
}
|
|
}
|
|
}
|