WIP: Chain138 deployment scripts, flash receivers, HYBX OMNL recovery

This commit is contained in:
defiQUG
2026-06-02 06:09:44 -07:00
parent e1560a880b
commit f04a7cb7c8
35 changed files with 2279 additions and 83 deletions

View File

@@ -0,0 +1,74 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import {Script, console} from "forge-std/Script.sol";
import {CWNavOracle} from "../contracts/cw-settlement/CWNavOracle.sol";
import {CWRedemptionQueue} from "../contracts/cw-settlement/CWRedemptionQueue.sol";
import {CWStabilityFund} from "../contracts/cw-settlement/CWStabilityFund.sol";
import {CWBuybackExecutor} from "../contracts/cw-settlement/CWBuybackExecutor.sol";
import {CWProtocolTreasury} from "../contracts/cw-settlement/CWProtocolTreasury.sol";
import {CWReserveVerifier} from "../contracts/bridge/integration/CWReserveVerifier.sol";
interface ICWMultiTokenBridgeL1Admin {
function setReserveVerifier(address newVerifier) external;
}
/**
* @title DeployCWReserveSettlementStack
* @notice Deploy NAV oracle, redemption queue, stability fund, buyback, treasury, and reserve verifier on Chain 138.
*
* Env:
* PRIVATE_KEY, RPC_URL_138
* CW_L1_BRIDGE (default 0x152ed3e9912161b76bdfd368d0c84b7c31c10de7)
* CW_RESERVE_SYSTEM (default 0x607e97cD626f209facfE48c1464815DDE15B5093)
* CW_CANONICAL_USDT / CW_CANONICAL_USDC
* CW_ATTACH_VERIFIER_TO_L1=1
*/
contract DeployCWReserveSettlementStack is Script {
function run() external {
uint256 privateKey = vm.envUint("PRIVATE_KEY");
address admin = vm.addr(privateKey);
address l1Bridge = vm.envOr("CW_L1_BRIDGE", address(0x152eD3e9912161b76BDFd368D0C84B7C31C10dE7));
address reserveSystem = vm.envOr("CW_RESERVE_SYSTEM", address(0x607e97cD626f209facfE48c1464815DDE15B5093));
address canonicalUSDT = vm.envOr("CW_CANONICAL_USDT", address(0x93E66202A11B1772E55407B32B44e5Cd8eda7f22));
address canonicalUSDC = vm.envOr("CW_CANONICAL_USDC", address(0xf22258f57794CC8E06237084b353Ab30fFfa640b));
bool attachVerifier = vm.envOr("CW_ATTACH_VERIFIER_TO_L1", uint256(0)) == 1;
bool skipVerifierDeploy = vm.envOr("CW_SKIP_RESERVE_VERIFIER", uint256(1)) == 1;
vm.startBroadcast(privateKey);
address verifierAddr;
if (skipVerifierDeploy) {
verifierAddr = address(0);
} else {
CWReserveVerifier verifier = new CWReserveVerifier(admin, l1Bridge, address(0), reserveSystem);
verifierAddr = address(verifier);
if (attachVerifier) {
ICWMultiTokenBridgeL1Admin(l1Bridge).setReserveVerifier(verifierAddr);
}
verifier.configureToken(canonicalUSDT, address(0), false, false, false);
verifier.configureToken(canonicalUSDC, address(0), false, false, false);
}
CWNavOracle navOracle = new CWNavOracle(admin, l1Bridge, reserveSystem);
CWRedemptionQueue redemptionQueue = new CWRedemptionQueue(admin);
CWStabilityFund stabilityFund = new CWStabilityFund(admin);
CWProtocolTreasury treasury = new CWProtocolTreasury(admin, address(0));
CWBuybackExecutor buyback = new CWBuybackExecutor(admin, verifierAddr, address(treasury));
treasury.setBuybackExecutor(address(buyback));
navOracle.configureToken(canonicalUSDT, address(0));
navOracle.configureToken(canonicalUSDC, address(0));
vm.stopBroadcast();
console.log("CWReserveVerifier:", verifierAddr);
console.log("CWNavOracle:", address(navOracle));
console.log("CWRedemptionQueue:", address(redemptionQueue));
console.log("CWStabilityFund:", address(stabilityFund));
console.log("CWProtocolTreasury:", address(treasury));
console.log("CWBuybackExecutor:", address(buyback));
}
}