// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import "forge-std/Test.sol"; import "../../contracts/bridge/UniversalCCIPBridge.sol"; import "../../contracts/registry/UniversalAssetRegistry.sol"; import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; /** * @title Bridge Amounts Fuzzing Tests * @notice Fuzz tests for edge cases in bridge amounts */ contract BridgeAmountsFuzzTest is Test { UniversalCCIPBridge public bridge; UniversalAssetRegistry public registry; address public admin; function setUp() public { admin = makeAddr("admin"); vm.startPrank(admin); UniversalAssetRegistry regImpl = new UniversalAssetRegistry(); bytes memory regInitData = abi.encodeWithSelector(UniversalAssetRegistry.initialize.selector, admin); ERC1967Proxy regProxy = new ERC1967Proxy(address(regImpl), regInitData); registry = UniversalAssetRegistry(address(regProxy)); UniversalCCIPBridge bridgeImpl = new UniversalCCIPBridge(); bytes memory bridgeInitData = abi.encodeWithSelector( UniversalCCIPBridge.initialize.selector, address(registry), makeAddr("router"), admin ); ERC1967Proxy bridgeProxy = new ERC1967Proxy(address(bridgeImpl), bridgeInitData); bridge = UniversalCCIPBridge(payable(address(bridgeProxy))); vm.stopPrank(); } function testFuzzBridgeAmounts(uint256 amount) public { // Bound amount to reasonable range amount = bound(amount, 1, type(uint128).max); // Test that bridge handles various amounts correctly // This would require proper setup with mock tokens } function testFuzzMinMaxLimits( uint256 minAmount, uint256 maxAmount, uint256 bridgeAmount ) public { vm.assume(minAmount > 0); vm.assume(maxAmount > minAmount); vm.assume(bridgeAmount >= minAmount && bridgeAmount <= maxAmount); // Test that limits are enforced correctly } function testFuzzGasPrice(uint256 gasPrice) public { gasPrice = bound(gasPrice, 1, 1000 gwei); // Test gas price handling } function testFuzzDestinationChain(uint64 chainSelector) public { // Test various chain selectors } }