- CCIP/trustless bridge contracts, GRU tokens, DEX/PMM tests, reserve vault. - Token-aggregation service routes, planner, chain config, relay env templates. - Config snapshots and multi-chain deployment markdown updates. - gitignore services/btc-intake/dist/ (tsc output); do not track dist. Run forge build && forge test before deploy (large solc graph). Made-with: Cursor
62 lines
2.1 KiB
Solidity
62 lines
2.1 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.20;
|
|
|
|
import {Script, console} from "forge-std/Script.sol";
|
|
import {CWAssetReserveVerifier} from "../contracts/bridge/integration/CWAssetReserveVerifier.sol";
|
|
|
|
interface ICWMultiTokenBridgeL1AdminV2 {
|
|
function setReserveVerifier(address newVerifier) external;
|
|
}
|
|
|
|
/**
|
|
* @title DeployCWAssetReserveVerifier
|
|
* @notice Deploy a generic reserve verifier for stable, monetary-unit, or gas-native c* lanes.
|
|
*
|
|
* Env:
|
|
* PRIVATE_KEY (required)
|
|
* CW_L1_BRIDGE or CHAIN138_L1_BRIDGE (required)
|
|
* CW_ASSET_RESERVE_VAULT (optional)
|
|
* CW_ASSET_RESERVE_SYSTEM (optional)
|
|
* CW_ATTACH_VERIFIER_TO_L1=1 (optional, default 0)
|
|
*/
|
|
contract DeployCWAssetReserveVerifier is Script {
|
|
function run() external {
|
|
uint256 privateKey = vm.envUint("PRIVATE_KEY");
|
|
|
|
address l1Bridge = vm.envOr("CW_L1_BRIDGE", address(0));
|
|
if (l1Bridge == address(0)) {
|
|
l1Bridge = vm.envOr("CHAIN138_L1_BRIDGE", address(0));
|
|
}
|
|
if (l1Bridge == address(0)) {
|
|
l1Bridge = vm.envOr("CW_L1_BRIDGE_CHAIN138", address(0));
|
|
}
|
|
|
|
address assetReserveVault = vm.envOr("CW_ASSET_RESERVE_VAULT", address(0));
|
|
address reserveSystem = vm.envOr("CW_ASSET_RESERVE_SYSTEM", address(0));
|
|
bool attachVerifierToBridge = vm.envOr("CW_ATTACH_VERIFIER_TO_L1", uint256(0)) == 1;
|
|
|
|
require(l1Bridge != address(0), "CW_L1_BRIDGE or CHAIN138_L1_BRIDGE required");
|
|
|
|
vm.startBroadcast(privateKey);
|
|
|
|
CWAssetReserveVerifier verifier = new CWAssetReserveVerifier(
|
|
vm.addr(privateKey),
|
|
l1Bridge,
|
|
assetReserveVault,
|
|
reserveSystem
|
|
);
|
|
|
|
if (attachVerifierToBridge) {
|
|
ICWMultiTokenBridgeL1AdminV2(l1Bridge).setReserveVerifier(address(verifier));
|
|
}
|
|
|
|
vm.stopBroadcast();
|
|
|
|
console.log("CWAssetReserveVerifier:", address(verifier));
|
|
console.log(" L1 bridge:", l1Bridge);
|
|
console.log(" attached to bridge:", attachVerifierToBridge);
|
|
console.log(" asset reserve vault:", assetReserveVault);
|
|
console.log(" reserve system:", reserveSystem);
|
|
}
|
|
}
|