74 lines
3.8 KiB
Solidity
74 lines
3.8 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.20;
|
|
|
|
import {Script, console} from "forge-std/Script.sol";
|
|
import "../../../contracts/bridge/atomic/AtomicBridgeCoordinator.sol";
|
|
import "../../../contracts/bridge/atomic/AtomicFeePolicy.sol";
|
|
import "../../../contracts/bridge/atomic/AtomicSettlementRouter.sol";
|
|
import "../../../contracts/bridge/atomic/AtomicTypes.sol";
|
|
|
|
contract ConfigureAtomicX402PolygonIntent is Script {
|
|
uint64 internal constant SOURCE_CHAIN_138 = 138;
|
|
uint64 internal constant POLYGON_SELECTOR = 4051577828743386545;
|
|
address internal constant CUSDC_V2_CHAIN138 = 0x219522c60e83dEe01FC5b0329d6fA8fD84b9D13d;
|
|
address internal constant CWUSDC_V2_POLYGON = 0x7476a64B37732698b9f729fdB373a7B65e9677e9;
|
|
bytes32 internal constant SETTLEMENT_MODE = keccak256("CW_POLYGON_CUSDCV2_X402");
|
|
|
|
function run() external {
|
|
uint256 pk = vm.envUint("PRIVATE_KEY");
|
|
AtomicBridgeCoordinator coordinator = AtomicBridgeCoordinator(vm.envAddress("ATOMIC_BRIDGE_COORDINATOR"));
|
|
AtomicFeePolicy feePolicy = AtomicFeePolicy(vm.envAddress("ATOMIC_FEE_POLICY"));
|
|
AtomicSettlementRouter settlementRouter = AtomicSettlementRouter(vm.envAddress("ATOMIC_SETTLEMENT_ROUTER"));
|
|
|
|
address sourceAdapter = vm.envAddress("ATOMIC_X402_SOURCE_ADAPTER");
|
|
address settlementAdapter = vm.envAddress("ATOMIC_CW_SETTLEMENT_ADAPTER");
|
|
|
|
uint256 maxNotional = vm.envOr("ATOMIC_X402_MAX_NOTIONAL", uint256(110_000e6));
|
|
uint16 maxReservedBps = uint16(vm.envOr("ATOMIC_X402_MAX_RESERVED_BPS", uint256(8_000)));
|
|
uint256 targetBuffer = vm.envOr("ATOMIC_X402_TARGET_BUFFER", uint256(10_000e6));
|
|
uint256 maxSettlementBacklog = vm.envOr("ATOMIC_X402_MAX_SETTLEMENT_BACKLOG", uint256(250_000e6));
|
|
uint16 maxOracleDriftBps = uint16(vm.envOr("ATOMIC_X402_MAX_ORACLE_DRIFT_BPS", uint256(100)));
|
|
uint256 fulfilmentTimeout = vm.envOr("ATOMIC_X402_FULFILMENT_TIMEOUT", uint256(30 minutes));
|
|
uint256 settlementTimeout = vm.envOr("ATOMIC_X402_SETTLEMENT_TIMEOUT", uint256(2 days));
|
|
|
|
uint16 fulfillerFeeBps = uint16(vm.envOr("ATOMIC_X402_FILLER_FEE_BPS", uint256(100)));
|
|
uint16 protocolFeeBps = uint16(vm.envOr("ATOMIC_X402_PROTOCOL_FEE_BPS", uint256(50)));
|
|
uint16 bondBps = uint16(vm.envOr("ATOMIC_X402_BOND_BPS", uint256(12_000)));
|
|
uint16 slashPenaltyBps = uint16(vm.envOr("ATOMIC_X402_SLASH_PENALTY_BPS", uint256(1_000)));
|
|
|
|
bytes32 corridorId =
|
|
coordinator.getCorridorId(SOURCE_CHAIN_138, POLYGON_SELECTOR, CUSDC_V2_CHAIN138, CWUSDC_V2_POLYGON);
|
|
|
|
vm.startBroadcast(pk);
|
|
coordinator.configureCorridor(
|
|
AtomicTypes.CorridorConfig({
|
|
enabled: true,
|
|
degraded: false,
|
|
sourceChain: SOURCE_CHAIN_138,
|
|
destinationChain: POLYGON_SELECTOR,
|
|
assetIn: CUSDC_V2_CHAIN138,
|
|
assetOut: CWUSDC_V2_POLYGON,
|
|
maxNotional: maxNotional,
|
|
maxReservedBps: maxReservedBps,
|
|
targetBuffer: targetBuffer,
|
|
maxSettlementBacklog: maxSettlementBacklog,
|
|
maxOracleDriftBps: maxOracleDriftBps,
|
|
fulfilmentTimeout: fulfilmentTimeout,
|
|
settlementTimeout: settlementTimeout,
|
|
defaultSettlementMode: SETTLEMENT_MODE
|
|
})
|
|
);
|
|
coordinator.grantRole(coordinator.INTENT_ADAPTER_ROLE(), sourceAdapter);
|
|
settlementRouter.setAdapter(SETTLEMENT_MODE, settlementAdapter);
|
|
feePolicy.setCorridorPolicy(
|
|
corridorId, fulfillerFeeBps, protocolFeeBps, bondBps, slashPenaltyBps, fulfilmentTimeout, settlementTimeout
|
|
);
|
|
vm.stopBroadcast();
|
|
|
|
console.log("corridorId");
|
|
console.logBytes32(corridorId);
|
|
console.log("settlementMode");
|
|
console.logBytes32(SETTLEMENT_MODE);
|
|
}
|
|
}
|