75 lines
3.5 KiB
Solidity
75 lines
3.5 KiB
Solidity
// 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));
|
|
}
|
|
}
|