diff --git a/test/integration/Across.t.sol b/test/integration/Across.t.sol index 2b1133d00..772f5a7f4 100644 --- a/test/integration/Across.t.sol +++ b/test/integration/Across.t.sol @@ -4,7 +4,6 @@ pragma solidity ^0.8.25; import {IERC20} from "@forge-std/interfaces/IERC20.sol"; import {ISignatureTransfer} from "@permit2/interfaces/ISignatureTransfer.sol"; import {BridgeSettlerIntegrationTest} from "./BridgeSettler.t.sol"; -import {ALLOWANCE_HOLDER} from "src/allowanceholder/IAllowanceHolder.sol"; import {IBridgeSettlerActions} from "src/bridge/IBridgeSettlerActions.sol"; import {LibBytes} from "../utils/LibBytes.sol"; import {ISpokePool} from "src/core/Across.sol"; @@ -82,7 +81,7 @@ contract AcrossTest is BridgeSettlerIntegrationTest { deal(address(this), amount); (bool success,) = address(WETH).call{value: amount}(abi.encodeWithSignature("deposit()")); assertTrue(success, "Deposit failed"); - WETH.approve(address(ALLOWANCE_HOLDER), amount); + WETH.approve(address(allowanceHolder), amount); bytes[] memory bridgeActions = ActionDataBuilder.build( _getDefaultTransferFrom(address(WETH), amount), @@ -93,7 +92,7 @@ contract AcrossTest is BridgeSettlerIntegrationTest { uint256 balanceBefore = WETH.balanceOf(spokePool); vm.expectCall(spokePool, acrossCall(2000, 2000)); - ALLOWANCE_HOLDER.exec( + allowanceHolder.exec( address(bridgeSettler), address(WETH), amount, diff --git a/test/integration/BebopPairTest.t.sol b/test/integration/BebopPairTest.t.sol index 0c5beee18..44c26f3be 100644 --- a/test/integration/BebopPairTest.t.sol +++ b/test/integration/BebopPairTest.t.sol @@ -9,7 +9,6 @@ import {ActionDataBuilder} from "../utils/ActionDataBuilder.sol"; import {Settler} from "src/Settler.sol"; import {ISettlerActions} from "src/ISettlerActions.sol"; import {IBebopSettlement} from "src/core/Bebop.sol"; -import {ALLOWANCE_HOLDER} from "src/allowanceholder/IAllowanceHolder.sol"; import {SettlerBasePairTest} from "./SettlerBasePairTest.t.sol"; @@ -368,7 +367,7 @@ abstract contract BebopPairTest is SettlerBasePairTest { Settler _settler = settler; IERC20 _fromToken = fromToken(); - bytes[] memory actions = _buildRestrictedTargetActions(address(ALLOWANCE_HOLDER)); + bytes[] memory actions = _buildRestrictedTargetActions(address(allowanceHolder)); ISettlerBase.AllowedSlippage memory allowedSlippage = ISettlerBase.AllowedSlippage({ recipient: payable(address(0)), buyToken: IERC20(address(0)), minAmountOut: 0 diff --git a/test/integration/CCIP.t.sol b/test/integration/CCIP.t.sol index 7ee4f3f58..f3e570ed6 100644 --- a/test/integration/CCIP.t.sol +++ b/test/integration/CCIP.t.sol @@ -5,7 +5,6 @@ import {IERC20} from "@forge-std/interfaces/IERC20.sol"; import {Vm} from "@forge-std/Vm.sol"; import {ISignatureTransfer} from "@permit2/interfaces/ISignatureTransfer.sol"; import {BridgeSettlerIntegrationTest} from "./BridgeSettler.t.sol"; -import {ALLOWANCE_HOLDER} from "src/allowanceholder/IAllowanceHolder.sol"; import {IBridgeSettlerActions} from "src/bridge/IBridgeSettlerActions.sol"; import {InvalidFeeToken, InvalidTokenAmountsLength} from "src/core/SettlerErrors.sol"; import {LibBytes} from "../utils/LibBytes.sol"; @@ -40,7 +39,7 @@ contract CCIPTest is BridgeSettlerIntegrationTest { deal(address(USDC), address(this), 2000e6); deal(address(this), 10 ether); - USDC.approve(address(ALLOWANCE_HOLDER), 2000e6); + USDC.approve(address(allowanceHolder), 2000e6); } function getOnRamp(uint64 destinationChainSelector) internal view returns (address onRamp) { @@ -97,7 +96,7 @@ contract CCIPTest is BridgeSettlerIntegrationTest { // Execute and verify vm.expectCall(CCIP_ROUTER, fee, abi.encodeCall(IRouterClient.ccipSend, (ARBITRUM_SELECTOR, message))); - ALLOWANCE_HOLDER.exec{value: fee}( + allowanceHolder.exec{value: fee}( address(bridgeSettler), address(USDC), amount, @@ -143,7 +142,7 @@ contract CCIPTest is BridgeSettlerIntegrationTest { // Execute vm.expectCall(CCIP_ROUTER, fee, abi.encodeCall(IRouterClient.ccipSend, (BASE_SELECTOR, message))); - ALLOWANCE_HOLDER.exec{value: fee}( + allowanceHolder.exec{value: fee}( address(bridgeSettler), address(USDC), amount, @@ -199,7 +198,7 @@ contract CCIPTest is BridgeSettlerIntegrationTest { // Execute vm.expectCall(CCIP_ROUTER, fee, abi.encodeCall(IRouterClient.ccipSend, (ARBITRUM_SELECTOR, message))); vm.recordLogs(); - ALLOWANCE_HOLDER.exec{value: fee}( + allowanceHolder.exec{value: fee}( address(bridgeSettler), address(USDC), amount, @@ -256,7 +255,7 @@ contract CCIPTest is BridgeSettlerIntegrationTest { // Should revert because feeToken is not address(0) vm.expectRevert(InvalidFeeToken.selector); - ALLOWANCE_HOLDER.exec( + allowanceHolder.exec( address(bridgeSettler), address(USDC), amount, @@ -296,7 +295,7 @@ contract CCIPTest is BridgeSettlerIntegrationTest { // Should revert because tokenAmounts length is not 1 vm.expectRevert(InvalidTokenAmountsLength.selector); - ALLOWANCE_HOLDER.exec( + allowanceHolder.exec( address(bridgeSettler), address(USDC), amount, diff --git a/test/integration/DeBridge.t.sol b/test/integration/DeBridge.t.sol index c32eeb42c..5dde60fa3 100644 --- a/test/integration/DeBridge.t.sol +++ b/test/integration/DeBridge.t.sol @@ -4,7 +4,6 @@ pragma solidity ^0.8.25; import {IERC20} from "@forge-std/interfaces/IERC20.sol"; import {ISignatureTransfer} from "@permit2/interfaces/ISignatureTransfer.sol"; import {BridgeSettlerIntegrationTest} from "./BridgeSettler.t.sol"; -import {ALLOWANCE_HOLDER} from "src/allowanceholder/IAllowanceHolder.sol"; import {IBridgeSettlerActions} from "src/bridge/IBridgeSettlerActions.sol"; import {DeBridge, DLN_SOURCE, IDlnSource} from "src/core/DeBridge.sol"; import {ActionDataBuilder} from "../utils/ActionDataBuilder.sol"; @@ -72,7 +71,7 @@ contract DeBridgeTest is BridgeSettlerIntegrationTest { deal(address(this), globalFee); deal(address(USDC), address(this), amount); - USDC.approve(address(ALLOWANCE_HOLDER), amount); + USDC.approve(address(allowanceHolder), amount); bytes[] memory bridgeActions = ActionDataBuilder.build( _getDefaultTransferFrom(address(USDC), amount), @@ -84,7 +83,7 @@ contract DeBridgeTest is BridgeSettlerIntegrationTest { uint256 usdcBalanceBefore = USDC.balanceOf(address(DLN_SOURCE)); uint256 ethBalanceBefore = address(DLN_SOURCE).balance; vm.expectCall(address(DLN_SOURCE), globalFee, deBridgecall(address(USDC), amount)); - ALLOWANCE_HOLDER.exec{value: globalFee}( + allowanceHolder.exec{value: globalFee}( address(bridgeSettler), address(USDC), amount, diff --git a/test/integration/DodoV2PairTest.t.sol b/test/integration/DodoV2PairTest.t.sol index 35eed4953..4b9dfa673 100644 --- a/test/integration/DodoV2PairTest.t.sol +++ b/test/integration/DodoV2PairTest.t.sol @@ -4,21 +4,18 @@ pragma solidity ^0.8.25; import {IERC20} from "@forge-std/interfaces/IERC20.sol"; import {ISignatureTransfer} from "@permit2/interfaces/ISignatureTransfer.sol"; import {ISettlerBase} from "src/interfaces/ISettlerBase.sol"; -import {BasePairTest} from "./BasePairTest.t.sol"; +import {SettlerBasePairTest} from "./SettlerBasePairTest.t.sol"; import {ISettlerActions} from "src/ISettlerActions.sol"; import {ActionDataBuilder} from "../utils/ActionDataBuilder.sol"; -import {MainnetSettler as Settler} from "src/chains/Mainnet/TakerSubmitted.sol"; -import {Shim} from "./SettlerBasePairTest.t.sol"; +import {Settler} from "src/Settler.sol"; import {IAllowanceHolder} from "src/allowanceholder/IAllowanceHolder.sol"; -contract DodoV2PairTest is BasePairTest { +contract DodoV2PairTest is SettlerBasePairTest { function _testName() internal pure override returns (string memory) { return "USDT-DAI"; } - Settler internal settler; - IAllowanceHolder internal allowanceHolder; uint256 private _amount; function setUp() public override { @@ -38,14 +35,6 @@ contract DodoV2PairTest is BasePairTest { safeApproveIfBelow(fromToken(), FROM, address(PERMIT2), amount()); warmPermit2Nonce(FROM); - allowanceHolder = IAllowanceHolder(0x0000000000001fF3684f28c67538d4D072C22734); - - uint256 forkChainId = (new Shim()).chainId(); - vm.chainId(31337); - settler = new Settler(bytes20(0)); - vm.etch(address(allowanceHolder), vm.getDeployedCode("AllowanceHolder.sol:AllowanceHolder")); - vm.chainId(forkChainId); - // USDT is obnoxious about throwing errors, so let's check here before // we run into something inscrutable. Do this here to avoid incorrectly // warming storage. diff --git a/test/integration/LayerZeroOFT.t.sol b/test/integration/LayerZeroOFT.t.sol index 295545b84..d8884264c 100644 --- a/test/integration/LayerZeroOFT.t.sol +++ b/test/integration/LayerZeroOFT.t.sol @@ -4,7 +4,6 @@ pragma solidity ^0.8.25; import {IERC20} from "@forge-std/interfaces/IERC20.sol"; import {ISignatureTransfer} from "@permit2/interfaces/ISignatureTransfer.sol"; import {BridgeSettlerIntegrationTest} from "./BridgeSettler.t.sol"; -import {ALLOWANCE_HOLDER} from "src/allowanceholder/IAllowanceHolder.sol"; import {IBridgeSettlerActions} from "src/bridge/IBridgeSettlerActions.sol"; import {PlasmaBridgeSettler} from "src/chains/Plasma/BridgeSettler.sol"; import {SafeTransferLib} from "src/vendor/SafeTransferLib.sol"; @@ -25,7 +24,7 @@ contract LayerZeroOFTEthereumTest is BridgeSettlerIntegrationTest { function testBridgeERC20() public { uint256 amount = 10000000; deal(address(USDT), address(this), amount, true); - USDT.safeApprove(address(ALLOWANCE_HOLDER), amount); + USDT.safeApprove(address(allowanceHolder), amount); IOFT.SendParam memory sendParam = IOFT.SendParam({ dstEid: uint32(30110), // ARBITRUM @@ -56,7 +55,7 @@ contract LayerZeroOFTEthereumTest is BridgeSettlerIntegrationTest { deal(address(this), fee); uint256 balanceBefore = USDT.balanceOf(oft); vm.expectCall(oft, fee, abi.encodeCall(IOFT.send, (sendParam, messagingFee, address(this)))); - ALLOWANCE_HOLDER.exec{value: fee}( + allowanceHolder.exec{value: fee}( address(bridgeSettler), address(USDT), amount, diff --git a/test/integration/MakerPSMLite.t.sol b/test/integration/MakerPSMLite.t.sol index 7b7e37915..f44cb4574 100644 --- a/test/integration/MakerPSMLite.t.sol +++ b/test/integration/MakerPSMLite.t.sol @@ -7,7 +7,6 @@ import {ISettlerBase} from "src/interfaces/ISettlerBase.sol"; import {IPSM, WAD, DAI, USDS, USDD, USDT, UsddPSM} from "src/core/MakerPSM.sol"; -import {Shim} from "./SettlerBasePairTest.t.sol"; import {MainnetSettlerMetaTxn as SettlerMetaTxn} from "src/chains/Mainnet/MetaTxn.sol"; import {Settler} from "src/Settler.sol"; @@ -51,7 +50,7 @@ contract MakerPsmLiteTest is SettlerMetaTxnPairTest { } modifier setMakerPsmLiteBlockNumber() { - uint256 blockNumber = (new Shim()).blockNumber(); + uint256 blockNumber = vm.getBlockNumber(); vm.rollFork(makerPsmLiteBlockNumber()); vm.setEvmVersion("osaka"); assert(address(makerPsm()).code.length > 0); diff --git a/test/integration/MaverickV2PairTest.t.sol b/test/integration/MaverickV2PairTest.t.sol index 7148c74bd..5badf36b9 100644 --- a/test/integration/MaverickV2PairTest.t.sol +++ b/test/integration/MaverickV2PairTest.t.sol @@ -5,7 +5,6 @@ import {IERC20} from "@forge-std/interfaces/IERC20.sol"; import {ISignatureTransfer} from "@permit2/interfaces/ISignatureTransfer.sol"; import {ISettlerBase} from "src/interfaces/ISettlerBase.sol"; -import {Shim} from "./SettlerBasePairTest.t.sol"; import {ActionDataBuilder} from "../utils/ActionDataBuilder.sol"; import {MainnetSettlerMetaTxn as SettlerMetaTxn} from "src/chains/Mainnet/MetaTxn.sol"; import {Settler} from "src/Settler.sol"; @@ -34,7 +33,7 @@ abstract contract MaverickV2PairTest is SettlerMetaTxnPairTest { } modifier setMaverickV2Block() { - uint256 blockNumber = (new Shim()).blockNumber(); + uint256 blockNumber = vm.getBlockNumber(); vm.rollFork(maverickV2BlockNumber()); vm.setEvmVersion("osaka"); _; diff --git a/test/integration/Mayan.t.sol b/test/integration/Mayan.t.sol index dabd5fd46..248be5c00 100644 --- a/test/integration/Mayan.t.sol +++ b/test/integration/Mayan.t.sol @@ -4,7 +4,6 @@ pragma solidity ^0.8.25; import {IERC20} from "@forge-std/interfaces/IERC20.sol"; import {ISignatureTransfer} from "@permit2/interfaces/ISignatureTransfer.sol"; import {BridgeSettlerIntegrationTest} from "./BridgeSettler.t.sol"; -import {ALLOWANCE_HOLDER} from "src/allowanceholder/IAllowanceHolder.sol"; import {IBridgeSettlerActions} from "src/bridge/IBridgeSettlerActions.sol"; import {ArbitrumBridgeSettler} from "src/chains/Arbitrum/BridgeSettler.sol"; import {IMayanForwarder} from "src/core/Mayan.sol"; @@ -64,7 +63,7 @@ contract MayanTest is BridgeSettlerIntegrationTest { bytes32 someExtraBytes = keccak256("someExtraBytesForERC20Transfer"); deal(address(token), address(this), amount); - token.approve(address(ALLOWANCE_HOLDER), amount); + token.approve(address(allowanceHolder), amount); bytes[] memory bridgeActions = ActionDataBuilder.build( _getDefaultTransferFrom(address(token), amount), @@ -86,7 +85,7 @@ contract MayanTest is BridgeSettlerIntegrationTest { address(mayanProtocol), abi.encodeCall(MayanProtocolDummy.mayanERC20Receiver, (address(token), amount, someExtraBytes)) ); - ALLOWANCE_HOLDER.exec( + allowanceHolder.exec( address(bridgeSettler), address(token), amount, diff --git a/test/integration/NucleusTeller.t.sol b/test/integration/NucleusTeller.t.sol index 0b93398d1..591cb164e 100644 --- a/test/integration/NucleusTeller.t.sol +++ b/test/integration/NucleusTeller.t.sol @@ -5,7 +5,6 @@ import {IERC20} from "@forge-std/interfaces/IERC20.sol"; import {Vm} from "@forge-std/Vm.sol"; import {ISignatureTransfer} from "@permit2/interfaces/ISignatureTransfer.sol"; import {BridgeSettlerIntegrationTest} from "./BridgeSettler.t.sol"; -import {ALLOWANCE_HOLDER} from "src/allowanceholder/IAllowanceHolder.sol"; import {IBridgeSettlerActions} from "src/bridge/IBridgeSettlerActions.sol"; import {INucleusTeller} from "src/core/NucleusTeller.sol"; import {SafeTransferLib} from "src/vendor/SafeTransferLib.sol"; @@ -76,7 +75,7 @@ contract NucleusTellerMainnetTest is BridgeSettlerIntegrationTest { uint256 shareAmount = 1e18; deal(address(WPAXG), address(this), shareAmount, true); - WPAXG.safeApprove(address(ALLOWANCE_HOLDER), shareAmount); + WPAXG.safeApprove(address(allowanceHolder), shareAmount); INucleusTeller.BridgeData memory data = _bridgeData(); uint256 fee = INucleusTeller(TELLER).previewFee(shareAmount, data); @@ -94,7 +93,7 @@ contract NucleusTellerMainnetTest is BridgeSettlerIntegrationTest { vm.expectCall(TELLER, fee, abi.encodeCall(INucleusTeller.bridge, (shareAmount, data))); vm.recordLogs(); - ALLOWANCE_HOLDER.exec{value: fee}( + allowanceHolder.exec{value: fee}( address(bridgeSettler), address(WPAXG), shareAmount, @@ -112,7 +111,7 @@ contract NucleusTellerMainnetTest is BridgeSettlerIntegrationTest { uint256 shareAmount = 1e18; deal(address(WPAXG), address(this), shareAmount, true); - WPAXG.safeApprove(address(ALLOWANCE_HOLDER), shareAmount); + WPAXG.safeApprove(address(allowanceHolder), shareAmount); INucleusTeller.BridgeData memory data = _bridgeData(); uint256 fee = INucleusTeller(TELLER).previewFee(shareAmount, data); @@ -128,7 +127,7 @@ contract NucleusTellerMainnetTest is BridgeSettlerIntegrationTest { uint256 supplyBefore = WPAXG.totalSupply(); vm.recordLogs(); - ALLOWANCE_HOLDER.exec{value: fee + excess}( + allowanceHolder.exec{value: fee + excess}( address(bridgeSettler), address(WPAXG), shareAmount, @@ -146,7 +145,7 @@ contract NucleusTellerMainnetTest is BridgeSettlerIntegrationTest { uint256 depositAmount = 1e18; deal(address(PAXG), address(this), depositAmount, true); - PAXG.safeApprove(address(ALLOWANCE_HOLDER), depositAmount); + PAXG.safeApprove(address(allowanceHolder), depositAmount); INucleusTeller.BridgeData memory data = _bridgeData(); // PAXG → WPAXG is a 1:1 wrap, so the resulting share count equals the deposit amount. @@ -169,7 +168,7 @@ contract NucleusTellerMainnetTest is BridgeSettlerIntegrationTest { TELLER, fee, abi.encodeCall(INucleusTeller.depositAndBridge, (PAXG, depositAmount, expectedShares, data)) ); vm.recordLogs(); - ALLOWANCE_HOLDER.exec{value: fee}( + allowanceHolder.exec{value: fee}( address(bridgeSettler), address(PAXG), depositAmount, diff --git a/test/integration/SettlerBasePairTest.t.sol b/test/integration/SettlerBasePairTest.t.sol index 554f6bdf2..85f53d48e 100644 --- a/test/integration/SettlerBasePairTest.t.sol +++ b/test/integration/SettlerBasePairTest.t.sol @@ -11,20 +11,9 @@ import {IERC20} from "@forge-std/interfaces/IERC20.sol"; import {LibBytes} from "../utils/LibBytes.sol"; import {SafeTransferLib} from "src/vendor/SafeTransferLib.sol"; -import {IAllowanceHolder} from "src/allowanceholder/IAllowanceHolder.sol"; -import {MainnetSettler as Settler} from "src/chains/Mainnet/TakerSubmitted.sol"; - -contract Shim { - // forgefmt: disable-next-line - function chainId() external returns (uint256) { // this is non-view (mutable) on purpose - return block.chainid; - } - - // forgefmt: disable-next-line - function blockNumber() external returns (uint256) { // this is non-view (mutable) on purpose - return block.number; - } -} +import {IAllowanceHolder, ALLOWANCE_HOLDER} from "src/allowanceholder/IAllowanceHolder.sol"; +import {MainnetSettler} from "src/chains/Mainnet/TakerSubmitted.sol"; +import {Settler} from "src/Settler.sol"; abstract contract SettlerBasePairTest is BasePairTest { using SafeTransferLib for IERC20; @@ -33,11 +22,11 @@ abstract contract SettlerBasePairTest is BasePairTest { uint256 internal constant PERMIT2_MAKER_NONCE = 1; Settler internal settler; - IAllowanceHolder internal allowanceHolder; + IAllowanceHolder constant allowanceHolder = ALLOWANCE_HOLDER; IZeroEx internal ZERO_EX = IZeroEx(0xDef1C0ded9bec7F1a1670819833240f027b25EfF); function settlerInitCode() internal virtual returns (bytes memory) { - return bytes.concat(type(Settler).creationCode, abi.encode(bytes20(0))); + return bytes.concat(type(MainnetSettler).creationCode, abi.encode(bytes20(0))); } function _deploySettler() private returns (Settler r) { @@ -50,9 +39,8 @@ abstract contract SettlerBasePairTest is BasePairTest { function setUp() public virtual override { super.setUp(); - allowanceHolder = IAllowanceHolder(0x0000000000001fF3684f28c67538d4D072C22734); - uint256 forkChainId = (new Shim()).chainId(); + uint256 forkChainId = vm.getChainId(); vm.chainId(31337); settler = _deploySettler(); vm.label(address(settler), "Settler"); diff --git a/test/integration/SettlerMetaTxnPairTest.t.sol b/test/integration/SettlerMetaTxnPairTest.t.sol index 0faa70b72..4e09b6484 100644 --- a/test/integration/SettlerMetaTxnPairTest.t.sol +++ b/test/integration/SettlerMetaTxnPairTest.t.sol @@ -5,7 +5,7 @@ import {IERC20} from "@forge-std/interfaces/IERC20.sol"; import {ISignatureTransfer} from "@permit2/interfaces/ISignatureTransfer.sol"; import {ISettlerBase} from "src/interfaces/ISettlerBase.sol"; -import {SettlerBasePairTest, Shim} from "./SettlerBasePairTest.t.sol"; +import {SettlerBasePairTest} from "./SettlerBasePairTest.t.sol"; import {ICurveV2Pool} from "./vendor/ICurveV2Pool.sol"; import {IZeroEx} from "./vendor/IZeroEx.sol"; @@ -42,10 +42,12 @@ abstract contract SettlerMetaTxnPairTest is SettlerBasePairTest { function setUp() public virtual override { super.setUp(); - uint256 forkChainId = (new Shim()).chainId(); + uint256 forkChainId = vm.getChainId(); vm.chainId(31337); // Preserve the settlerMetaTxn address for the hardcoded signing hash. new NonceBump(); + new NonceBump(); + new NonceBump(); settlerMetaTxn = _deploySettlerMetaTxn(); vm.chainId(forkChainId); diff --git a/test/integration/StargateV2.t.sol b/test/integration/StargateV2.t.sol index 60a7cb6a3..1484289ab 100644 --- a/test/integration/StargateV2.t.sol +++ b/test/integration/StargateV2.t.sol @@ -4,7 +4,6 @@ pragma solidity ^0.8.25; import {IERC20} from "@forge-std/interfaces/IERC20.sol"; import {ISignatureTransfer} from "@permit2/interfaces/ISignatureTransfer.sol"; import {BridgeSettlerIntegrationTest} from "./BridgeSettler.t.sol"; -import {ALLOWANCE_HOLDER} from "src/allowanceholder/IAllowanceHolder.sol"; import {IBridgeSettlerActions} from "src/bridge/IBridgeSettlerActions.sol"; import {ArbitrumBridgeSettler} from "src/chains/Arbitrum/BridgeSettler.sol"; import {IStargateV2, IOFT, ETH} from "src/core/StargateV2.sol"; @@ -81,7 +80,7 @@ contract StargateV2Test is BridgeSettlerIntegrationTest { uint256 amount = 10000; deal(address(token), address(this), amount); - token.approve(address(ALLOWANCE_HOLDER), amount); + token.approve(address(allowanceHolder), amount); (IOFT.SendParam memory sendParam, IOFT.MessagingFee memory messagingFee, uint256 fee) = _prepareSendToken(amount); @@ -99,7 +98,7 @@ contract StargateV2Test is BridgeSettlerIntegrationTest { deal(address(this), fee); uint256 balanceBefore = token.balanceOf(pool); vm.expectCall(pool, fee, abi.encodeCall(IStargateV2.sendToken, (sendParam, messagingFee, address(this)))); - ALLOWANCE_HOLDER.exec{value: fee}( + allowanceHolder.exec{value: fee}( address(bridgeSettler), address(token), amount, diff --git a/test/integration/UniV3CallbackPoC.t.sol b/test/integration/UniV3CallbackPoC.t.sol index bebb764b2..18c2ba377 100644 --- a/test/integration/UniV3CallbackPoC.t.sol +++ b/test/integration/UniV3CallbackPoC.t.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.25; import {AllowanceHolder} from "src/allowanceholder/AllowanceHolderOld.sol"; -import {IAllowanceHolder} from "src/allowanceholder/IAllowanceHolder.sol"; +import {IAllowanceHolder, ALLOWANCE_HOLDER} from "src/allowanceholder/IAllowanceHolder.sol"; import {MainnetSettler as Settler} from "src/chains/Mainnet/TakerSubmitted.sol"; import {ISettlerActions} from "src/ISettlerActions.sol"; import {IUniswapV3Pool} from "src/core/UniswapV3Fork.sol"; @@ -47,13 +47,6 @@ contract UniswapV3PoolDummy { } } -contract Shim { - // forgefmt: disable-next-line - function chainId() external returns (uint256) { // this is non-view (mutable) on purpose - return block.chainid; - } -} - contract UniV3CallbackPoC is Utils, Permit2Signature, MainnetDefaultFork { address internal constant ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; @@ -92,9 +85,9 @@ contract UniV3CallbackPoC is Utils, Permit2Signature, MainnetDefaultFork { permit2Domain = permit2.DOMAIN_SEPARATOR(); // Deploy AllowanceHolder - ah = IAllowanceHolder(0x0000000000001fF3684f28c67538d4D072C22734); + ah = ALLOWANCE_HOLDER; { - uint256 forkChainId = (new Shim()).chainId(); + uint256 forkChainId = vm.getChainId(); vm.chainId(31337); vm.etch(address(ah), address(new AllowanceHolder()).code); vm.chainId(forkChainId); @@ -102,7 +95,7 @@ contract UniV3CallbackPoC is Utils, Permit2Signature, MainnetDefaultFork { // Deploy Settler. { - uint256 forkChainId = (new Shim()).chainId(); + uint256 forkChainId = vm.getChainId(); vm.chainId(31337); settler = new Settler(bytes20(0)); vm.chainId(forkChainId); diff --git a/test/integration/VelodromePairTest.t.sol b/test/integration/VelodromePairTest.t.sol index 2241ef006..dfda9f750 100644 --- a/test/integration/VelodromePairTest.t.sol +++ b/test/integration/VelodromePairTest.t.sol @@ -4,23 +4,25 @@ pragma solidity ^0.8.25; import {IERC20} from "@forge-std/interfaces/IERC20.sol"; import {ISignatureTransfer} from "@permit2/interfaces/ISignatureTransfer.sol"; import {ISettlerBase} from "src/interfaces/ISettlerBase.sol"; -import {BasePairTest} from "./BasePairTest.t.sol"; +import {SettlerBasePairTest} from "./SettlerBasePairTest.t.sol"; import {ISettlerActions} from "src/ISettlerActions.sol"; import {ActionDataBuilder} from "../utils/ActionDataBuilder.sol"; -import {BaseSettler as Settler} from "src/chains/Base/TakerSubmitted.sol"; -import {Shim} from "./SettlerBasePairTest.t.sol"; +import {BaseSettler} from "src/chains/Base/TakerSubmitted.sol"; +import {Settler} from "src/Settler.sol"; import {IAllowanceHolder} from "src/allowanceholder/IAllowanceHolder.sol"; -contract VelodromePairTest is BasePairTest { +contract VelodromePairTest is SettlerBasePairTest { function _testName() internal pure override returns (string memory) { return "USDT-USDC"; } - Settler internal settler; - IAllowanceHolder internal allowanceHolder; uint256 private _amount; + function settlerInitCode() internal virtual override returns (bytes memory) { + return bytes.concat(type(BaseSettler).creationCode, abi.encode(bytes20(0))); + } + function setUp() public override { super.setUp(); // the pool specified below doesn't have very much liquidity, so we only swap a small amount @@ -38,14 +40,6 @@ contract VelodromePairTest is BasePairTest { safeApproveIfBelow(fromToken(), FROM, address(PERMIT2), amount()); warmPermit2Nonce(FROM); - allowanceHolder = IAllowanceHolder(0x0000000000001fF3684f28c67538d4D072C22734); - - uint256 forkChainId = (new Shim()).chainId(); - vm.chainId(31337); - settler = new Settler(bytes20(0)); - vm.etch(address(allowanceHolder), vm.getDeployedCode("AllowanceHolder.sol:AllowanceHolder")); - vm.chainId(forkChainId); - // USDT is obnoxious about throwing errors, so let's check here before // we run into something inscrutable. Do this here to avoid incorrectly // warming storage. diff --git a/test/unit/BridgeSettler.t.sol b/test/unit/BridgeSettler.t.sol index 0a3820b6f..bc3ae4c1c 100644 --- a/test/unit/BridgeSettler.t.sol +++ b/test/unit/BridgeSettler.t.sol @@ -4,7 +4,6 @@ pragma solidity ^0.8.25; import {Test} from "@forge-std/Test.sol"; import {IERC20} from "@forge-std/interfaces/IERC20.sol"; import {ISettlerActions} from "src/ISettlerActions.sol"; -import {ALLOWANCE_HOLDER} from "src/allowanceholder/IAllowanceHolder.sol"; import {BridgeSettler, BridgeSettlerBase} from "src/bridge/BridgeSettler.sol"; import {ISettlerTakerSubmitted} from "src/interfaces/ISettlerTakerSubmitted.sol"; import {MainnetSettler} from "src/chains/Mainnet/TakerSubmitted.sol"; @@ -17,6 +16,7 @@ import {DEPLOYER} from "src/deployer/DeployerAddress.sol"; import {IERC721View} from "src/deployer/IDeployer.sol"; import {MockERC20} from "@solmate/test/utils/mocks/MockERC20.sol"; import {ActionDataBuilder} from "../utils/ActionDataBuilder.sol"; +import {IAllowanceHolder, ALLOWANCE_HOLDER} from "src/allowanceholder/IAllowanceHolder.sol"; contract BridgeSettlerDummy is BridgeSettler { constructor(bytes20 gitCommit) BridgeSettlerBase(gitCommit) {} @@ -31,10 +31,10 @@ contract BridgeDummy { } contract BridgeSettlerTestBase is Test { + IAllowanceHolder constant allowanceHolder = ALLOWANCE_HOLDER; BridgeSettler bridgeSettler; ISettlerTakerSubmitted settler; IERC20 token; - BridgeDummy bridgeDummy; function _testBridgeSettler() internal virtual { bridgeSettler = new BridgeSettlerDummy(bytes20(0)); @@ -43,8 +43,8 @@ contract BridgeSettlerTestBase is Test { function setUp() public virtual { _testBridgeSettler(); vm.label(address(bridgeSettler), "BridgeSettler"); - bridgeDummy = new BridgeDummy(); token = IERC20(address(new MockERC20("Test Token", "TT", 18))); + vm.etch(address(allowanceHolder), vm.getDeployedCode("AllowanceHolder.sol:AllowanceHolder")); } function _getDefaultTransferFrom(address token_, uint256 amount) internal returns (bytes memory) { @@ -72,10 +72,13 @@ contract BridgeSettlerTestBase is Test { } contract BridgeSettlerUnitTest is BridgeSettlerTestBase { + BridgeDummy bridgeDummy; + function setUp() public override { super.setUp(); - vm.etch(address(ALLOWANCE_HOLDER), vm.getDeployedCode("AllowanceHolder.sol:AllowanceHolder")); + bridgeDummy = new BridgeDummy(); + // Mock DAI, USDC, USDT, and USDD for MainnetSettler to be usable deployCodeTo("MockERC20", abi.encode("DAI", "DAI", 18), address(DAI)); deployCodeTo("MockERC20", abi.encode("USDC", "USDC", 6), address(USDC)); @@ -142,7 +145,7 @@ contract BridgeSettlerTest is BridgeSettlerUnitTest, Utils { ); vm.prank(user); - token.approve(address(ALLOWANCE_HOLDER), type(uint256).max); + token.approve(address(allowanceHolder), type(uint256).max); deal(address(token), user, amount); _mockExpectCall(address(DEPLOYER), abi.encodeCall(IERC721View.ownerOf, (2)), abi.encode(address(settler))); @@ -151,7 +154,7 @@ contract BridgeSettlerTest is BridgeSettlerUnitTest, Utils { ); vm.expectCall(address(token), abi.encodeCall(IERC20.transfer, (address(bridgeSettler), amount))); vm.prank(user); - ALLOWANCE_HOLDER.exec( + allowanceHolder.exec( address(bridgeSettler), address(token), amount, diff --git a/test/unit/Relay.t.sol b/test/unit/Relay.t.sol index 3a9f4573c..412f4673f 100644 --- a/test/unit/Relay.t.sol +++ b/test/unit/Relay.t.sol @@ -4,7 +4,6 @@ pragma solidity ^0.8.25; import {IERC20} from "@forge-std/interfaces/IERC20.sol"; import {ISignatureTransfer} from "@permit2/interfaces/ISignatureTransfer.sol"; import {IBridgeSettlerActions} from "src/bridge/IBridgeSettlerActions.sol"; -import {ALLOWANCE_HOLDER} from "src/allowanceholder/IAllowanceHolder.sol"; import {BridgeSettlerUnitTest} from "./BridgeSettler.t.sol"; import {Utils} from "./Utils.sol"; import {Relay} from "src/core/Relay.sol"; @@ -39,12 +38,12 @@ contract RelayTest is BridgeSettlerUnitTest, Utils { ); deal(address(token), address(this), amount); - token.approve(address(ALLOWANCE_HOLDER), amount); + token.approve(address(allowanceHolder), amount); vm.expectEmit(true, true, true, true); emit Relay.RelayAction(requestId); vm.expectCall(address(token), abi.encodePacked(abi.encodeCall(IERC20.transfer, (to, amount)), requestId)); - ALLOWANCE_HOLDER.exec( + allowanceHolder.exec( address(bridgeSettler), address(token), amount, diff --git a/test/unit/core/BasicUnitTest.t.sol b/test/unit/core/BasicUnitTest.t.sol index b01bbdeba..07499ed1f 100644 --- a/test/unit/core/BasicUnitTest.t.sol +++ b/test/unit/core/BasicUnitTest.t.sol @@ -5,6 +5,7 @@ import {Basic} from "src/core/Basic.sol"; import {Permit2PaymentTakerSubmitted} from "src/core/Permit2Payment.sol"; import {Permit2PaymentAbstract} from "src/core/Permit2PaymentAbstract.sol"; import {AllowanceHolderContext} from "src/allowanceholder/AllowanceHolderContext.sol"; +import {ALLOWANCE_HOLDER} from "src/allowanceholder/IAllowanceHolder.sol"; import {uint512} from "src/utils/512Math.sol"; @@ -43,7 +44,7 @@ contract BasicDummy is Permit2PaymentTakerSubmitted, Basic { contract BasicUnitTest is Utils, Test { BasicDummy basic; address PERMIT2 = _etchNamedRejectionDummy("PERMIT2", 0x000000000022D473030F116dDEE9F6B43aC78BA3); - address ALLOWANCE_HOLDER = _etchNamedRejectionDummy("ALLOWANCE_HOLDER", 0x0000000000001fF3684f28c67538d4D072C22734); + address ALLOWANCE_HOLDER_ = _etchNamedRejectionDummy("ALLOWANCE_HOLDER", address(ALLOWANCE_HOLDER)); address POOL = _createNamedRejectionDummy("POOL"); IERC20 TOKEN = IERC20(_createNamedRejectionDummy("TOKEN")); @@ -198,7 +199,7 @@ contract BasicUnitTest is Utils, Test { basic.sellToPool(IERC20(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE), bps, PERMIT2, offset, data); vm.expectRevert(); - basic.sellToPool(IERC20(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE), bps, ALLOWANCE_HOLDER, offset, data); + basic.sellToPool(IERC20(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE), bps, ALLOWANCE_HOLDER_, offset, data); } function testBasicBubblesUpRevert() public { diff --git a/test/unit/core/RfqUnitTest.t.sol b/test/unit/core/RfqUnitTest.t.sol index 87e07fcb8..68f56a1e8 100644 --- a/test/unit/core/RfqUnitTest.t.sol +++ b/test/unit/core/RfqUnitTest.t.sol @@ -10,7 +10,7 @@ import { Permit2PaymentBase } from "src/core/Permit2Payment.sol"; import {ISignatureTransfer} from "@permit2/interfaces/ISignatureTransfer.sol"; -import {IAllowanceHolder} from "src/allowanceholder/IAllowanceHolder.sol"; +import {IAllowanceHolder, ALLOWANCE_HOLDER} from "src/allowanceholder/IAllowanceHolder.sol"; import {Context, AbstractContext} from "src/Context.sol"; import {AllowanceHolderContext} from "src/allowanceholder/AllowanceHolderContext.sol"; @@ -170,7 +170,7 @@ contract RfqUnitTest is Utils, Test { RfqOrderSettlementDummy rfq; RfqOrderSettlementMetaTxnDummy rfqMeta; address PERMIT2 = _etchNamedRejectionDummy("PERMIT2", 0x000000000022D473030F116dDEE9F6B43aC78BA3); - address ALLOWANCE_HOLDER = _etchNamedRejectionDummy("ALLOWANCE_HOLDER", 0x0000000000001fF3684f28c67538d4D072C22734); + address ALLOWANCE_HOLDER_ = _etchNamedRejectionDummy("ALLOWANCE_HOLDER", address(ALLOWANCE_HOLDER)); address TOKEN0 = _createNamedRejectionDummy("TOKEN0"); address TOKEN1 = _createNamedRejectionDummy("TOKEN1"); @@ -319,7 +319,7 @@ contract RfqUnitTest is Utils, Test { ); _mockExpectCall( - ALLOWANCE_HOLDER, + ALLOWANCE_HOLDER_, abi.encodeCall(IAllowanceHolder.transferFrom, (TOKEN0, address(this), MAKER, amount)), abi.encode(true) ); @@ -349,7 +349,7 @@ contract RfqUnitTest is Utils, Test { // uint128(amount) // ); - vm.prank(ALLOWANCE_HOLDER); + vm.prank(ALLOWANCE_HOLDER_); (bool success,) = address(rfq) .call( abi.encodePacked( diff --git a/test/unit/core/UniswapV3UnitTest.t.sol b/test/unit/core/UniswapV3UnitTest.t.sol index 37f740b54..29da9e5a0 100644 --- a/test/unit/core/UniswapV3UnitTest.t.sol +++ b/test/unit/core/UniswapV3UnitTest.t.sol @@ -11,7 +11,7 @@ import {uniswapV3InitHash, IUniswapV3Callback} from "src/core/univ3forks/Uniswap import {revertUnknownForkId} from "src/core/SettlerErrors.sol"; import {uint512} from "src/utils/512Math.sol"; -import {IAllowanceHolder} from "src/allowanceholder/IAllowanceHolder.sol"; +import {IAllowanceHolder, ALLOWANCE_HOLDER} from "src/allowanceholder/IAllowanceHolder.sol"; import {Utils} from "../Utils.sol"; import {IERC20} from "@forge-std/interfaces/IERC20.sol"; @@ -105,7 +105,7 @@ contract UniswapV3UnitTest is Utils, Test { UniswapV3Dummy uni; address UNI_FACTORY = _createNamedRejectionDummy("UNI_FACTORY"); address PERMIT2 = _etchNamedRejectionDummy("PERMIT2", 0x000000000022D473030F116dDEE9F6B43aC78BA3); - address ALLOWANCE_HOLDER = _etchNamedRejectionDummy("ALLOWANCE_HOLDER", 0x0000000000001fF3684f28c67538d4D072C22734); + address ALLOWANCE_HOLDER_ = _etchNamedRejectionDummy("ALLOWANCE_HOLDER", address(ALLOWANCE_HOLDER)); address TOKEN0 = _createNamedRejectionDummy("TOKEN0"); address TOKEN1 = _createNamedRejectionDummy("TOKEN1"); @@ -262,12 +262,12 @@ contract UniswapV3UnitTest is Utils, Test { }); _mockExpectCall( - ALLOWANCE_HOLDER, + ALLOWANCE_HOLDER_, abi.encodeCall(IAllowanceHolder.transferFrom, (TOKEN0, address(this), POOL, 1)), abi.encode(true) ); - vm.prank(ALLOWANCE_HOLDER); + vm.prank(ALLOWANCE_HOLDER_); address(uni) .call( abi.encodePacked(