From f8ef3f8dc5a3c21046d20fa235de6271586cb1a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Bene=C5=A1?= Date: Mon, 31 Oct 2022 10:49:41 -0500 Subject: [PATCH] Rollup encoder as an external dependency (#262) * refactor: WIP on using external encoder * refactor: using new encoder version + big cleanup * refactor: importing IRollupProcessor from rollup-encoder lib * fix: commited dependency * test: added assert that was removed by accident when rebasing * chore: solhinignore cleanup --- .gitmodules | 3 + .solhintignore | 4 +- README.md | 2 +- foundry.toml | 2 +- lib/rollup-encoder | 1 + src/aztec/DataProvider.sol | 4 +- src/aztec/interfaces/IDefiBridge.sol | 2 +- src/aztec/interfaces/IRollupProcessor.sol | 116 ---- src/aztec/libraries/AztecTypes.sol | 18 - src/bridges/angle/AngleSLPBridge.sol | 4 +- src/bridges/base/BridgeBase.sol | 2 +- src/bridges/curve/CurveStEthBridge.sol | 5 +- src/bridges/dca/BiDCABridge.sol | 5 +- src/bridges/donation/DonationBridge.sol | 2 +- src/bridges/element/ElementBridge.sol | 4 +- src/bridges/erc4626/ERC4626Bridge.sol | 4 +- src/bridges/example/ExampleBridge.sol | 2 +- src/bridges/lido/LidoBridge.sol | 5 +- src/bridges/liquity/StabilityPoolBridge.sol | 2 +- src/bridges/liquity/StakingBridge.sol | 2 +- src/bridges/liquity/TroveBridge.sol | 4 +- src/bridges/uniswap/UniswapBridge.sol | 4 +- src/bridges/yearn/YearnBridge.sol | 4 +- src/deployment/AggregateDeployment.s.sol | 2 +- src/deployment/base/BaseDeployment.s.sol | 2 +- .../dataprovider/DataProviderDeployment.s.sol | 2 +- src/deployment/erc4626/ERC4626Lister.s.sol | 2 +- src/gas/angle/AngleSLPGas.s.sol | 2 +- src/gas/base/GasBase.sol | 2 +- src/gas/curve/CurveGas.s.sol | 2 +- src/gas/curve/CurveLpGas.s.sol | 2 +- src/gas/dca/DCAGas.s.sol | 2 +- src/gas/erc4626/ERC4626Gas.s.sol | 2 +- src/gas/yearn/YearnGas.s.sol | 2 +- src/test/aztec/base/BridgeTestBase.sol | 519 +----------------- src/test/aztec/base/BridgeTestBase.t.sol | 104 ---- .../aztec/dataprovider/DataProvider.t.sol | 26 +- src/test/bridges/angle/AngleSLPE2E.t.sol | 34 +- src/test/bridges/angle/AngleSLPUnit.t.sol | 16 +- src/test/bridges/curve/CurveStEthBridge.t.sol | 54 +- src/test/bridges/curve/CurveStEthLPUnit.t.sol | 8 +- src/test/bridges/curve/CurveStEthLpE2E.t.sol | 42 +- src/test/bridges/dca/BiDCABridge.t.sol | 2 +- src/test/bridges/dca/BiDCABridgeArber.t.sol | 2 +- src/test/bridges/dca/BiDCABridgeE2E.t.sol | 20 +- .../bridges/donation/DonateBridgeE2E.t.sol | 106 +++- src/test/bridges/element/Element.t.sol | 2 +- .../element/aztecmocks/DefiBridgeProxy.sol | 2 +- .../element/aztecmocks/RollupProcessor.sol | 2 +- src/test/bridges/erc4626/ERC4626.t.sol | 97 +++- src/test/bridges/example/ExampleE2E.t.sol | 16 +- src/test/bridges/example/ExampleUnit.t.sol | 4 +- src/test/bridges/lido/Lido.t.sol | 54 +- .../liquity/StabilityPoolBridgeE2E.t.sol | 34 +- .../liquity/StabilityPoolBridgeUnit.t.sol | 2 +- .../bridges/liquity/StakingBridgeE2E.t.sol | 34 +- .../bridges/liquity/StakingBridgeUnit.t.sol | 2 +- src/test/bridges/liquity/TroveBridgeE2E.t.sol | 16 +- .../bridges/liquity/TroveBridgeTestBase.sol | 2 +- .../bridges/liquity/TroveBridgeUnit.t.sol | 2 +- src/test/bridges/liquity/utils/TestUtil.sol | 2 +- .../bridges/uniswap/UniswapBridgeE2E.t.sol | 46 +- .../bridges/uniswap/UniswapBridgeUnit.t.sol | 2 +- src/test/bridges/yearn/YearnBridgeE2E.t.sol | 67 ++- .../yearn/YearnBridgeE2EApproval.t.sol | 2 +- src/test/bridges/yearn/YearnUnit.t.sol | 2 +- 66 files changed, 522 insertions(+), 1024 deletions(-) create mode 160000 lib/rollup-encoder delete mode 100644 src/aztec/interfaces/IRollupProcessor.sol delete mode 100644 src/aztec/libraries/AztecTypes.sol delete mode 100644 src/test/aztec/base/BridgeTestBase.t.sol diff --git a/.gitmodules b/.gitmodules index 888d42dcd..d8df6248f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "lib/forge-std"] path = lib/forge-std url = https://github.com/foundry-rs/forge-std +[submodule "lib/rollup-encoder"] + path = lib/rollup-encoder + url = https://github.com/AztecProtocol/rollup-encoder diff --git a/.solhintignore b/.solhintignore index 370580802..a867e4ed1 100644 --- a/.solhintignore +++ b/.solhintignore @@ -3,6 +3,4 @@ src/libraries/ src/test/bridges/element/MockDeploymentValidator.sol # TODO: remove the following 2 lines once the bridge is deprecated src/bridges/element/ -src/test/bridges/element/aztecmocks -# TODO: remove the following line once linting rules are unified between internal and this repo -src/aztec/interfaces/IRollupProcessor.sol \ No newline at end of file +src/test/bridges/element/aztecmocks \ No newline at end of file diff --git a/README.md b/README.md index e99493124..fc6ff1a5a 100644 --- a/README.md +++ b/README.md @@ -150,7 +150,7 @@ We decided to have 2 separate approaches of bridge testing: We encourage you to first write all tests as unit tests to be able to leverage simple traces while you are debugging the bridge. Once you make the bridge work in the unit tests environment convert the relevant tests to E2E. -Converting unit tests to E2E is straightforward because we made the `BridgeTestBase.sendDefiRollup(...)` function return the same values as `IDefiBridge.convert(...)`. +Converting unit tests to E2E is straightforward because we made the `ROLLUP_ENCODER.processRollupAndGetBridgeResult()` function return the same values as `IDefiBridge.convert(...)`. In production, the rollup contract will supply `_totalInputValue` of both input assets and use the `_interactionNonce` as a globally unique ID. For testing, you may provide this value. diff --git a/foundry.toml b/foundry.toml index 38b558090..2c1409184 100644 --- a/foundry.toml +++ b/foundry.toml @@ -2,7 +2,7 @@ src = 'src' out = 'out' libs = ['lib'] -remappings = ['@openzeppelin/=node_modules/@openzeppelin/', 'forge-std/=lib/forge-std/src'] +remappings = ['@openzeppelin/=node_modules/@openzeppelin/', 'forge-std/=lib/forge-std/src', 'rollup-encoder/=lib/rollup-encoder/src'] fuzz_runs = 256 gas_reports = ["*"] eth-rpc-url = 'https://mainnet.infura.io/v3/9928b52099854248b3a096be07a6b23c' diff --git a/lib/rollup-encoder b/lib/rollup-encoder new file mode 160000 index 000000000..04407b438 --- /dev/null +++ b/lib/rollup-encoder @@ -0,0 +1 @@ +Subproject commit 04407b438fa5a0d4690cfcb1c206346ebb3cdb7c diff --git a/src/aztec/DataProvider.sol b/src/aztec/DataProvider.sol index 85c986a3b..35d65f09c 100644 --- a/src/aztec/DataProvider.sol +++ b/src/aztec/DataProvider.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 // Copyright 2022 Aztec. pragma solidity >=0.8.4; -import {AztecTypes} from "./libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; -import {IRollupProcessor} from "./interfaces/IRollupProcessor.sol"; +import {IRollupProcessor} from "rollup-encoder/interfaces/IRollupProcessor.sol"; import {BridgeBase} from "../bridges/base/BridgeBase.sol"; import {ISubsidy} from "./interfaces/ISubsidy.sol"; diff --git a/src/aztec/interfaces/IDefiBridge.sol b/src/aztec/interfaces/IDefiBridge.sol index 0f910cb80..b4540ceb6 100644 --- a/src/aztec/interfaces/IDefiBridge.sol +++ b/src/aztec/interfaces/IDefiBridge.sol @@ -2,7 +2,7 @@ // Copyright 2022 Aztec pragma solidity >=0.8.4; -import {AztecTypes} from "../libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; interface IDefiBridge { /** diff --git a/src/aztec/interfaces/IRollupProcessor.sol b/src/aztec/interfaces/IRollupProcessor.sol deleted file mode 100644 index 690b2e13f..000000000 --- a/src/aztec/interfaces/IRollupProcessor.sol +++ /dev/null @@ -1,116 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Copyright 2022 Aztec -pragma solidity >=0.8.4; - -// @dev For documentation of the functions within this interface see RollupProcessor contract -interface IRollupProcessor { - /*---------------------------------------- - EVENTS - ----------------------------------------*/ - event OffchainData(uint256 indexed rollupId, uint256 chunk, uint256 totalChunks, address sender); - event RollupProcessed(uint256 indexed rollupId, bytes32[] nextExpectedDefiHashes, address sender); - event DefiBridgeProcessed( - uint256 indexed encodedBridgeCallData, - uint256 indexed nonce, - uint256 totalInputValue, - uint256 totalOutputValueA, - uint256 totalOutputValueB, - bool result, - bytes errorReason - ); - event AsyncDefiBridgeProcessed( - uint256 indexed encodedBridgeCallData, - uint256 indexed nonce, - uint256 totalInputValue - ); - event Deposit(uint256 indexed assetId, address indexed depositorAddress, uint256 depositValue); - event WithdrawError(bytes errorReason); - event AssetAdded(uint256 indexed assetId, address indexed assetAddress, uint256 assetGasLimit); - event BridgeAdded(uint256 indexed bridgeAddressId, address indexed bridgeAddress, uint256 bridgeGasLimit); - event RollupProviderUpdated(address indexed providerAddress, bool valid); - event VerifierUpdated(address indexed verifierAddress); - event Paused(address account); - event Unpaused(address account); - - /*---------------------------------------- - MUTATING FUNCTIONS - ----------------------------------------*/ - - function pause() external; - - function unpause() external; - - function setRollupProvider(address _provider, bool _valid) external; - - function setVerifier(address _verifier) external; - - function setAllowThirdPartyContracts(bool _allowThirdPartyContracts) external; - - function setDefiBridgeProxy(address _defiBridgeProxy) external; - - function setSupportedAsset(address _token, uint256 _gasLimit) external; - - function setSupportedBridge(address _bridge, uint256 _gasLimit) external; - - function processRollup(bytes calldata _encodedProofData, bytes calldata _signatures) external; - - function receiveEthFromBridge(uint256 _interactionNonce) external payable; - - function approveProof(bytes32 _proofHash) external; - - function depositPendingFunds( - uint256 _assetId, - uint256 _amount, - address _owner, - bytes32 _proofHash - ) external payable; - - function offchainData( - uint256 _rollupId, - uint256 _chunk, - uint256 _totalChunks, - bytes calldata _offchainTxData - ) external; - - function processAsyncDefiInteraction(uint256 _interactionNonce) external returns (bool); - - /*---------------------------------------- - NON-MUTATING FUNCTIONS - ----------------------------------------*/ - - function rollupStateHash() external view returns (bytes32); - - function userPendingDeposits(uint256 _assetId, address _user) external view returns (uint256); - - function defiBridgeProxy() external view returns (address); - - function prevDefiInteractionsHash() external view returns (bytes32); - - function paused() external view returns (bool); - - function verifier() external view returns (address); - - function getDataSize() external view returns (uint256); - - function getPendingDefiInteractionHashesLength() external view returns (uint256); - - function getDefiInteractionHashesLength() external view returns (uint256); - - function getAsyncDefiInteractionHashesLength() external view returns (uint256); - - function getSupportedBridge(uint256 _bridgeAddressId) external view returns (address); - - function getSupportedBridgesLength() external view returns (uint256); - - function getSupportedAssetsLength() external view returns (uint256); - - function getSupportedAsset(uint256 _assetId) external view returns (address); - - function getEscapeHatchStatus() external view returns (bool, uint256); - - function assetGasLimits(uint256 _bridgeAddressId) external view returns (uint256); - - function bridgeGasLimits(uint256 _bridgeAddressId) external view returns (uint256); - - function allowThirdPartyContracts() external view returns (bool); -} diff --git a/src/aztec/libraries/AztecTypes.sol b/src/aztec/libraries/AztecTypes.sol deleted file mode 100644 index c3a8a77ab..000000000 --- a/src/aztec/libraries/AztecTypes.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Copyright 2022 Aztec -pragma solidity >=0.8.4; - -library AztecTypes { - enum AztecAssetType { - NOT_USED, - ETH, - ERC20, - VIRTUAL - } - - struct AztecAsset { - uint256 id; - address erc20Address; - AztecAssetType assetType; - } -} diff --git a/src/bridges/angle/AngleSLPBridge.sol b/src/bridges/angle/AngleSLPBridge.sol index 352a999f6..49d07ff26 100644 --- a/src/bridges/angle/AngleSLPBridge.sol +++ b/src/bridges/angle/AngleSLPBridge.sol @@ -3,13 +3,13 @@ pragma solidity >=0.8.4; import {SafeERC20, IERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; -import {AztecTypes} from "../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {ErrorLib} from "../base/ErrorLib.sol"; import {BridgeBase} from "../base/BridgeBase.sol"; import {IStableMaster} from "../../interfaces/angle/IStableMaster.sol"; import {IPoolManager, IStrategy} from "../../interfaces/angle/IPoolManager.sol"; import {IWETH} from "../../interfaces/IWETH.sol"; -import {IRollupProcessor} from "../../aztec/interfaces/IRollupProcessor.sol"; +import {IRollupProcessor} from "rollup-encoder/interfaces/IRollupProcessor.sol"; /** * @title Angle Protocol bridge contract. diff --git a/src/bridges/base/BridgeBase.sol b/src/bridges/base/BridgeBase.sol index 221645aa0..8b49de83e 100644 --- a/src/bridges/base/BridgeBase.sol +++ b/src/bridges/base/BridgeBase.sol @@ -4,7 +4,7 @@ pragma solidity >=0.8.4; import {IDefiBridge} from "../../aztec/interfaces/IDefiBridge.sol"; import {ISubsidy} from "../../aztec/interfaces/ISubsidy.sol"; -import {AztecTypes} from "../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {ErrorLib} from "./ErrorLib.sol"; /** diff --git a/src/bridges/curve/CurveStEthBridge.sol b/src/bridges/curve/CurveStEthBridge.sol index d3607123c..1ad5815ac 100644 --- a/src/bridges/curve/CurveStEthBridge.sol +++ b/src/bridges/curve/CurveStEthBridge.sol @@ -5,12 +5,11 @@ pragma solidity >=0.8.4; import {ICurvePool} from "../../interfaces/curve/ICurvePool.sol"; import {ILido} from "../../interfaces/lido/ILido.sol"; import {IWstETH} from "../../interfaces/lido/IWstETH.sol"; -import {IRollupProcessor} from "../../aztec/interfaces/IRollupProcessor.sol"; +import {IRollupProcessor} from "rollup-encoder/interfaces/IRollupProcessor.sol"; import {BridgeBase} from "../base/BridgeBase.sol"; import {ErrorLib} from "../base/ErrorLib.sol"; -import {AztecTypes} from "../../aztec/libraries/AztecTypes.sol"; - +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; /** diff --git a/src/bridges/dca/BiDCABridge.sol b/src/bridges/dca/BiDCABridge.sol index 004d490d8..08fcaad22 100644 --- a/src/bridges/dca/BiDCABridge.sol +++ b/src/bridges/dca/BiDCABridge.sol @@ -5,11 +5,10 @@ pragma solidity >=0.8.4; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; -import {IRollupProcessor} from "../../aztec/interfaces/IRollupProcessor.sol"; +import {IRollupProcessor} from "rollup-encoder/interfaces/IRollupProcessor.sol"; import {BridgeBase} from "../base/BridgeBase.sol"; import {ErrorLib} from "../base/ErrorLib.sol"; -import {AztecTypes} from "../../aztec/libraries/AztecTypes.sol"; - +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {IWETH} from "../../interfaces/IWETH.sol"; import {SafeCastLib} from "./SafeCastLib.sol"; diff --git a/src/bridges/donation/DonationBridge.sol b/src/bridges/donation/DonationBridge.sol index 2047dc4e0..b157ff62e 100644 --- a/src/bridges/donation/DonationBridge.sol +++ b/src/bridges/donation/DonationBridge.sol @@ -7,7 +7,7 @@ import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol import {BridgeBase} from "../base/BridgeBase.sol"; import {ErrorLib} from "../base/ErrorLib.sol"; -import {AztecTypes} from "../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; /** * @notice Bridge that allows users to collectively donate funds to an L1 address diff --git a/src/bridges/element/ElementBridge.sol b/src/bridges/element/ElementBridge.sol index ccf94b9f5..563dfe1cd 100644 --- a/src/bridges/element/ElementBridge.sol +++ b/src/bridges/element/ElementBridge.sol @@ -8,14 +8,14 @@ import {IPool} from "../../interfaces/element/IPool.sol"; import {ITranche} from "../../interfaces/element/ITranche.sol"; import {IDeploymentValidator} from "../../interfaces/element/IDeploymentValidator.sol"; import {IWrappedPosition} from "../../interfaces/element/IWrappedPosition.sol"; -import {IRollupProcessor} from "../../aztec/interfaces/IRollupProcessor.sol"; +import {IRollupProcessor} from "rollup-encoder/interfaces/IRollupProcessor.sol"; import {MinHeap} from "./MinHeap.sol"; import {FullMath} from "../../libraries/uniswapv3/FullMath.sol"; import {BridgeBase} from "../base/BridgeBase.sol"; import {ErrorLib} from "../base/ErrorLib.sol"; -import {AztecTypes} from "../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; /** * @title Element Bridge diff --git a/src/bridges/erc4626/ERC4626Bridge.sol b/src/bridges/erc4626/ERC4626Bridge.sol index ad79df148..85e54475b 100644 --- a/src/bridges/erc4626/ERC4626Bridge.sol +++ b/src/bridges/erc4626/ERC4626Bridge.sol @@ -5,8 +5,8 @@ pragma solidity >=0.8.4; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import {IERC4626} from "@openzeppelin/contracts/interfaces/IERC4626.sol"; -import {IRollupProcessor} from "../../aztec/interfaces/IRollupProcessor.sol"; -import {AztecTypes} from "../../aztec/libraries/AztecTypes.sol"; +import {IRollupProcessor} from "rollup-encoder/interfaces/IRollupProcessor.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {BridgeBase} from "../base/BridgeBase.sol"; import {ErrorLib} from "../base/ErrorLib.sol"; import {IWETH} from "../../interfaces/IWETH.sol"; diff --git a/src/bridges/example/ExampleBridge.sol b/src/bridges/example/ExampleBridge.sol index 61f6795f1..404965efb 100644 --- a/src/bridges/example/ExampleBridge.sol +++ b/src/bridges/example/ExampleBridge.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.4; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import {AztecTypes} from "../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {ErrorLib} from "../base/ErrorLib.sol"; import {BridgeBase} from "../base/BridgeBase.sol"; diff --git a/src/bridges/lido/LidoBridge.sol b/src/bridges/lido/LidoBridge.sol index 057299fbc..7f5fcd921 100644 --- a/src/bridges/lido/LidoBridge.sol +++ b/src/bridges/lido/LidoBridge.sol @@ -5,12 +5,11 @@ import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {ICurvePool} from "../../interfaces/curve/ICurvePool.sol"; import {ILido} from "../../interfaces/lido/ILido.sol"; import {IWstETH} from "../../interfaces/lido/IWstETH.sol"; -import {IRollupProcessor} from "../../aztec/interfaces/IRollupProcessor.sol"; +import {IRollupProcessor} from "rollup-encoder/interfaces/IRollupProcessor.sol"; import {BridgeBase} from "../base/BridgeBase.sol"; import {ErrorLib} from "../base/ErrorLib.sol"; -import {AztecTypes} from "../../aztec/libraries/AztecTypes.sol"; - +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; contract LidoBridge is BridgeBase { diff --git a/src/bridges/liquity/StabilityPoolBridge.sol b/src/bridges/liquity/StabilityPoolBridge.sol index 0c02e2457..c15762242 100644 --- a/src/bridges/liquity/StabilityPoolBridge.sol +++ b/src/bridges/liquity/StabilityPoolBridge.sol @@ -4,7 +4,7 @@ pragma solidity >=0.8.4; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; -import {AztecTypes} from "../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {IWETH} from "../../interfaces/IWETH.sol"; import {BridgeBase} from "../base/BridgeBase.sol"; import {ErrorLib} from "../base/ErrorLib.sol"; diff --git a/src/bridges/liquity/StakingBridge.sol b/src/bridges/liquity/StakingBridge.sol index a2d06a210..571f3f29b 100644 --- a/src/bridges/liquity/StakingBridge.sol +++ b/src/bridges/liquity/StakingBridge.sol @@ -4,7 +4,7 @@ pragma solidity >=0.8.4; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; -import {AztecTypes} from "../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {IWETH} from "../../interfaces/IWETH.sol"; import {BridgeBase} from "../base/BridgeBase.sol"; import {ErrorLib} from "../base/ErrorLib.sol"; diff --git a/src/bridges/liquity/TroveBridge.sol b/src/bridges/liquity/TroveBridge.sol index 1f0f2a5f1..48ec21a3f 100644 --- a/src/bridges/liquity/TroveBridge.sol +++ b/src/bridges/liquity/TroveBridge.sol @@ -6,8 +6,8 @@ import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {Strings} from "@openzeppelin/contracts/utils/Strings.sol"; -import {AztecTypes} from "../../aztec/libraries/AztecTypes.sol"; -import {IRollupProcessor} from "../../aztec/interfaces/IRollupProcessor.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; +import {IRollupProcessor} from "rollup-encoder/interfaces/IRollupProcessor.sol"; import {BridgeBase} from "../base/BridgeBase.sol"; import {ErrorLib} from "../base/ErrorLib.sol"; import {IWETH} from "../../interfaces/IWETH.sol"; diff --git a/src/bridges/uniswap/UniswapBridge.sol b/src/bridges/uniswap/UniswapBridge.sol index f5121dfc6..301fe9c62 100644 --- a/src/bridges/uniswap/UniswapBridge.sol +++ b/src/bridges/uniswap/UniswapBridge.sol @@ -5,8 +5,8 @@ pragma solidity >=0.8.4; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; -import {AztecTypes} from "../../aztec/libraries/AztecTypes.sol"; -import {IRollupProcessor} from "../../aztec/interfaces/IRollupProcessor.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; +import {IRollupProcessor} from "rollup-encoder/interfaces/IRollupProcessor.sol"; import {ErrorLib} from "../base/ErrorLib.sol"; import {BridgeBase} from "../base/BridgeBase.sol"; import {ISwapRouter} from "../../interfaces/uniswapv3/ISwapRouter.sol"; diff --git a/src/bridges/yearn/YearnBridge.sol b/src/bridges/yearn/YearnBridge.sol index fef5548d1..e5b344979 100644 --- a/src/bridges/yearn/YearnBridge.sol +++ b/src/bridges/yearn/YearnBridge.sol @@ -2,8 +2,8 @@ // Copyright 2022 Aztec pragma solidity >=0.8.4; -import {AztecTypes} from "../../aztec/libraries/AztecTypes.sol"; -import {IRollupProcessor} from "../../aztec/interfaces/IRollupProcessor.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; +import {IRollupProcessor} from "rollup-encoder/interfaces/IRollupProcessor.sol"; import {IYearnRegistry} from "../../interfaces/yearn/IYearnRegistry.sol"; import {IYearnVault} from "../../interfaces/yearn/IYearnVault.sol"; import {IWETH} from "../../interfaces/IWETH.sol"; diff --git a/src/deployment/AggregateDeployment.s.sol b/src/deployment/AggregateDeployment.s.sol index e176d385c..eb2fe99b2 100644 --- a/src/deployment/AggregateDeployment.s.sol +++ b/src/deployment/AggregateDeployment.s.sol @@ -6,7 +6,7 @@ import {Strings} from "@openzeppelin/contracts/utils/Strings.sol"; import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import {BaseDeployment} from "./base/BaseDeployment.s.sol"; -import {IRollupProcessor} from "../aztec/interfaces/IRollupProcessor.sol"; +import {IRollupProcessor} from "rollup-encoder/interfaces/IRollupProcessor.sol"; import {DataProvider} from "../aztec/DataProvider.sol"; import {CurveDeployment} from "./curve/CurveDeployment.s.sol"; diff --git a/src/deployment/base/BaseDeployment.s.sol b/src/deployment/base/BaseDeployment.s.sol index 88f3d5ab3..3153d2fa2 100644 --- a/src/deployment/base/BaseDeployment.s.sol +++ b/src/deployment/base/BaseDeployment.s.sol @@ -2,7 +2,7 @@ // Copyright 2022 Aztec. pragma solidity >=0.8.4; -import {IRollupProcessor} from "../../aztec/interfaces/IRollupProcessor.sol"; +import {IRollupProcessor} from "rollup-encoder/interfaces/IRollupProcessor.sol"; import {Test} from "forge-std/Test.sol"; import {stdJson} from "forge-std/StdJson.sol"; diff --git a/src/deployment/dataprovider/DataProviderDeployment.s.sol b/src/deployment/dataprovider/DataProviderDeployment.s.sol index 7840b6446..d897eac39 100644 --- a/src/deployment/dataprovider/DataProviderDeployment.s.sol +++ b/src/deployment/dataprovider/DataProviderDeployment.s.sol @@ -6,7 +6,7 @@ import {Strings} from "@openzeppelin/contracts/utils/Strings.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {BaseDeployment} from "../base/BaseDeployment.s.sol"; import {DataProvider} from "../../aztec/DataProvider.sol"; -import {IRollupProcessor} from "../../aztec/interfaces/IRollupProcessor.sol"; +import {IRollupProcessor} from "rollup-encoder/interfaces/IRollupProcessor.sol"; contract DataProviderDeployment is BaseDeployment { function deploy() public returns (address) { diff --git a/src/deployment/erc4626/ERC4626Lister.s.sol b/src/deployment/erc4626/ERC4626Lister.s.sol index 22b1156cf..8b7aeb6de 100644 --- a/src/deployment/erc4626/ERC4626Lister.s.sol +++ b/src/deployment/erc4626/ERC4626Lister.s.sol @@ -6,7 +6,7 @@ import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {BaseDeployment} from "../base/BaseDeployment.s.sol"; import {ERC4626Bridge} from "../../bridges/erc4626/ERC4626Bridge.sol"; import {IERC4626} from "@openzeppelin/contracts/interfaces/IERC4626.sol"; -import {IRollupProcessor} from "../../aztec/interfaces/IRollupProcessor.sol"; +import {IRollupProcessor} from "rollup-encoder/interfaces/IRollupProcessor.sol"; contract ERC4626Lister is BaseDeployment { function listVault(address _bridge, address _vault) public { diff --git a/src/gas/angle/AngleSLPGas.s.sol b/src/gas/angle/AngleSLPGas.s.sol index 56d24e673..1876da154 100644 --- a/src/gas/angle/AngleSLPGas.s.sol +++ b/src/gas/angle/AngleSLPGas.s.sol @@ -4,7 +4,7 @@ pragma solidity >=0.8.4; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {AngleSLPBridge, IWETH} from "../../bridges/angle/AngleSLPBridge.sol"; -import {AztecTypes} from "../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {ISubsidy} from "../../aztec/interfaces/ISubsidy.sol"; import {AngleSLPDeployment, BaseDeployment} from "../../deployment/angle/AngleSLPDeployment.s.sol"; diff --git a/src/gas/base/GasBase.sol b/src/gas/base/GasBase.sol index 448a47e20..8a2fbea5a 100644 --- a/src/gas/base/GasBase.sol +++ b/src/gas/base/GasBase.sol @@ -2,7 +2,7 @@ // Copyright 2022 Aztec. pragma solidity >=0.8.4; -import {AztecTypes} from "../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; contract GasBase { bytes4 private constant DEFI_BRIDGE_PROXY_CONVERT_SELECTOR = 0x4bd947a8; diff --git a/src/gas/curve/CurveGas.s.sol b/src/gas/curve/CurveGas.s.sol index 69db87ff1..2b95c1105 100644 --- a/src/gas/curve/CurveGas.s.sol +++ b/src/gas/curve/CurveGas.s.sol @@ -4,7 +4,7 @@ pragma solidity >=0.8.4; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {CurveStEthBridge} from "../../bridges/curve/CurveStEthBridge.sol"; -import {AztecTypes} from "../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {ISubsidy} from "../../aztec/interfaces/ISubsidy.sol"; import {CurveDeployment} from "../../deployment/curve/CurveDeployment.s.sol"; diff --git a/src/gas/curve/CurveLpGas.s.sol b/src/gas/curve/CurveLpGas.s.sol index 4d3bd1a32..a1162ee17 100644 --- a/src/gas/curve/CurveLpGas.s.sol +++ b/src/gas/curve/CurveLpGas.s.sol @@ -4,7 +4,7 @@ pragma solidity >=0.8.4; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {CurveStEthBridge} from "../../bridges/curve/CurveStEthBridge.sol"; -import {AztecTypes} from "../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {ISubsidy} from "../../aztec/interfaces/ISubsidy.sol"; import {CurveStethLpDeployment} from "../../deployment/curve/CurveStethLpDeployment.s.sol"; diff --git a/src/gas/dca/DCAGas.s.sol b/src/gas/dca/DCAGas.s.sol index b80d7c36e..235fcd169 100644 --- a/src/gas/dca/DCAGas.s.sol +++ b/src/gas/dca/DCAGas.s.sol @@ -4,7 +4,7 @@ pragma solidity >=0.8.4; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {UniswapDCABridge} from "../../bridges/dca/UniswapDCABridge.sol"; -import {AztecTypes} from "../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {ISubsidy} from "../../aztec/interfaces/ISubsidy.sol"; import {DCADeployment} from "../../deployment/dca/DCADeployment.s.sol"; diff --git a/src/gas/erc4626/ERC4626Gas.s.sol b/src/gas/erc4626/ERC4626Gas.s.sol index 1e5cea4d6..9de8bcc3b 100644 --- a/src/gas/erc4626/ERC4626Gas.s.sol +++ b/src/gas/erc4626/ERC4626Gas.s.sol @@ -4,7 +4,7 @@ pragma solidity >=0.8.4; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {ERC4626Bridge} from "../../bridges/erc4626/ERC4626Bridge.sol"; -import {AztecTypes} from "../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {ISubsidy} from "../../aztec/interfaces/ISubsidy.sol"; import {IWETH} from "../../interfaces/IWETH.sol"; diff --git a/src/gas/yearn/YearnGas.s.sol b/src/gas/yearn/YearnGas.s.sol index 3a23a0544..9fc5361d1 100644 --- a/src/gas/yearn/YearnGas.s.sol +++ b/src/gas/yearn/YearnGas.s.sol @@ -4,7 +4,7 @@ pragma solidity >=0.8.4; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {YearnBridge} from "../../bridges/yearn/YearnBridge.sol"; -import {AztecTypes} from "../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {ISubsidy} from "../../aztec/interfaces/ISubsidy.sol"; import {YearnDeployment} from "../../deployment/yearn/YearnDeployment.s.sol"; diff --git a/src/test/aztec/base/BridgeTestBase.sol b/src/test/aztec/base/BridgeTestBase.sol index 42603861a..b1d2966ae 100644 --- a/src/test/aztec/base/BridgeTestBase.sol +++ b/src/test/aztec/base/BridgeTestBase.sol @@ -3,9 +3,10 @@ pragma solidity >=0.8.4; import {Test, Vm} from "forge-std/Test.sol"; -import {AztecTypes} from "./../../../aztec/libraries/AztecTypes.sol"; -import {IRollupProcessor} from "./../../../aztec/interfaces/IRollupProcessor.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; +import {IRollupProcessorV2} from "rollup-encoder/interfaces/IRollupProcessorV2.sol"; import {ISubsidy} from "../../../aztec/interfaces/ISubsidy.sol"; +import {RollupEncoder} from "rollup-encoder/RollupEncoder.sol"; /** * @notice Helper contract that allow us to test bridges against the live rollup by sending mock rollups with defi interactions @@ -13,522 +14,16 @@ import {ISubsidy} from "../../../aztec/interfaces/ISubsidy.sol"; * @author Lasse Herskind */ abstract contract BridgeTestBase is Test { - /* solhint-disable error-name-mixedcase */ - error PAUSED(); - error NOT_PAUSED(); - error LOCKED_NO_REENTER(); - error INVALID_PROVIDER(); - error THIRD_PARTY_CONTRACTS_FLAG_NOT_SET(); - error INSUFFICIENT_DEPOSIT(); - error INVALID_ASSET_ID(); - error INVALID_ASSET_ADDRESS(); - error INVALID_LINKED_TOKEN_ADDRESS(); - error INVALID_LINKED_BRIDGE_ADDRESS(); - error INVALID_BRIDGE_ID(); // TODO: replace with INVALID_BRIDGE_CALL_DATA() once rollup processor is redeployed - error INVALID_BRIDGE_ADDRESS(); - error BRIDGE_ID_IS_INCONSISTENT(); // TODO: replace with INCONSISTENT_BRIDGE_CALL_DATA() - error BRIDGE_WITH_IDENTICAL_INPUT_ASSETS(uint256 inputAssetId); - error BRIDGE_WITH_IDENTICAL_OUTPUT_ASSETS(uint256 outputAssetId); - error ZERO_TOTAL_INPUT_VALUE(); - error ARRAY_OVERFLOW(); - error MSG_VALUE_WRONG_AMOUNT(); - error INSUFFICIENT_ETH_PAYMENT(); - error WITHDRAW_TO_ZERO_ADDRESS(); - error DEPOSIT_TOKENS_WRONG_PAYMENT_TYPE(); - error INSUFFICIENT_TOKEN_APPROVAL(); - error NONZERO_OUTPUT_VALUE_ON_NOT_USED_ASSET(uint256 outputValue); - error INCORRECT_STATE_HASH(bytes32 oldStateHash, bytes32 newStateHash); - error INCORRECT_DATA_START_INDEX(uint256 providedIndex, uint256 expectedIndex); - error INCORRECT_PREVIOUS_DEFI_INTERACTION_HASH( - bytes32 providedDefiInteractionHash, - bytes32 expectedDefiInteractionHash - ); - error PUBLIC_INPUTS_HASH_VERIFICATION_FAILED(uint256, uint256); - error PROOF_VERIFICATION_FAILED(); - error ASYNC_NONZERO_OUTPUT_VALUES(uint256 outputValueA, uint256 outputValueB); - error OUTPUT_A_EXCEEDS_252_BITS(uint256 outputValueA); - error OUTPUT_B_EXCEEDS_252_BITS(uint256 outputValueb); - /* solhint-enable error-name-mixedcase */ - error UnsupportedAsset(address); - - // error lib errors - error InvalidCaller(); - error InputAssetAAndOutputAssetAIsEth(); - error InputAssetANotERC20OrEth(); - error OutputAssetANotERC20OrEth(); - error InputAssetBNotEmpty(); - error OutputAssetBNotEmpty(); - error InputAssetInvalid(); - error OutputAssetInvalid(); - error InputAssetNotEqZkAToken(); - error InvalidAToken(); - error ZkTokenAlreadyExists(); - error ZkTokenDontExist(); - error ZeroValue(); - error AsyncDisabled(); - - event OffchainData(uint256 indexed rollupId, uint256 chunk, uint256 totalChunks, address sender); - event RollupProcessed(uint256 indexed rollupId, bytes32[] nextExpectedDefiHashes, address sender); - event DefiBridgeProcessed( - uint256 indexed bridgeCallData, - uint256 indexed nonce, - uint256 totalInputValue, - uint256 totalOutputValueA, - uint256 totalOutputValueB, - bool result, - bytes errorReason - ); - event AsyncDefiBridgeProcessed(uint256 indexed bridgeCallData, uint256 indexed nonce, uint256 totalInputValue); - event Deposit(uint256 indexed assetId, address indexed depositorAddress, uint256 depositValue); - event WithdrawError(bytes errorReason); - event AssetAdded(uint256 indexed assetId, address indexed assetAddress, uint256 assetGasLimit); - event BridgeAdded(uint256 indexed bridgeAddressId, address indexed bridgeAddress, uint256 bridgeGasLimit); - event RollupProviderUpdated(address indexed providerAddress, bool valid); - event VerifierUpdated(address indexed verifierAddress); - event Paused(address account); - event Unpaused(address account); - - uint256 private constant INPUT_ASSET_ID_A_SHIFT = 32; - uint256 private constant INPUT_ASSET_ID_B_SHIFT = 62; - uint256 private constant OUTPUT_ASSET_ID_A_SHIFT = 92; - uint256 private constant OUTPUT_ASSET_ID_B_SHIFT = 122; - uint256 private constant BITCONFIG_SHIFT = 152; - uint256 private constant AUX_DATA_SHIFT = 184; - uint256 private constant VIRTUAL_ASSET_ID_FLAG_SHIFT = 29; - uint256 private constant VIRTUAL_ASSET_ID_FLAG = 0x20000000; // 2 ** 29 - uint256 private constant MASK_THIRTY_TWO_BITS = 0xffffffff; - uint256 private constant MASK_THIRTY_BITS = 0x3fffffff; - uint256 private constant MASK_SIXTY_FOUR_BITS = 0xffffffffffffffff; - // offset we add to `proofData` to point to rollupBeneficiary - uint256 internal constant ROLLUP_BENEFICIARY_OFFSET = 4512; // ROLLUP_HEADER_LENGTH - 0x20 - - IRollupProcessor internal constant ROLLUP_PROCESSOR = IRollupProcessor(0xFF1F2B4ADb9dF6FC8eAFecDcbF96A2B351680455); - IRollupProcessor internal constant IMPLEMENTATION = IRollupProcessor(0x3f972e325CecD99a6be267fd36ceB46DCa7C3F28); - + IRollupProcessorV2 internal constant ROLLUP_PROCESSOR = + IRollupProcessorV2(0xFF1F2B4ADb9dF6FC8eAFecDcbF96A2B351680455); ISubsidy internal constant SUBSIDY = ISubsidy(0xABc30E831B5Cc173A9Ed5941714A7845c909e7fA); - - address internal constant ROLLUP_PROVIDER = payable(0xA173BDdF4953C1E8be2cA0695CFc07502Ff3B1e7); address internal constant MULTI_SIG = 0xE298a76986336686CC3566469e3520d23D1a8aaD; - bytes32 public constant BRIDGE_PROCESSED_EVENT_SIG = - keccak256("DefiBridgeProcessed(uint256,uint256,uint256,uint256,uint256,bool,bytes)"); - bytes32 public constant ASYNC_BRIDGE_PROCESSED_EVENT_SIG = - keccak256("AsyncDefiBridgeProcessed(uint256,uint256,uint256)"); + RollupEncoder internal immutable ROLLUP_ENCODER; AztecTypes.AztecAsset internal emptyAsset; - address public rollupBeneficiary; - uint256 public nextRollupId = 0; - constructor() { - vm.label(address(ROLLUP_PROCESSOR), "Rollup"); - vm.label(address(IMPLEMENTATION), "Implementation"); - vm.label(address(SUBSIDY), "Subsidy"); - vm.label(ROLLUP_PROVIDER, "Rollup Provider"); - vm.label(MULTI_SIG, "Multisig"); - vm.label(ROLLUP_PROCESSOR.verifier(), "Verifier"); - vm.label(ROLLUP_PROCESSOR.defiBridgeProxy(), "DefiBridgeProxy"); - } - - /** - * @notice Helper function to fetch nonce for the next interaction - * @return The nonce of the next defi interaction - */ - function getNextNonce() public view returns (uint256) { - return nextRollupId * 32; - } - - /** - * @notice Helper function to get an `AztecAsset` object for the supported `_asset` - * @dev if `_asset` is not supported will revert with `UnsupportedAsset(_asset)`. - * @param _asset The address of the asset to fetch - * @return A populated supported `AztecAsset` - */ - function getRealAztecAsset(address _asset) public view returns (AztecTypes.AztecAsset memory) { - if (_asset == address(0)) { - return AztecTypes.AztecAsset({id: 0, erc20Address: address(0), assetType: AztecTypes.AztecAssetType.ETH}); - } else { - return - AztecTypes.AztecAsset({ - id: tokenToId(_asset), - erc20Address: _asset, - assetType: AztecTypes.AztecAssetType.ERC20 - }); - } - } - - /** - * @notice Helper function to get the id a given `_asset` - * @dev if `_asset` is not supported will revert with `UnsupportedAsset(_asset)` - * @param _asset The address of the asset to fetch id for - * @return The id matching `_asset` - */ - function tokenToId(address _asset) public view returns (uint256) { - if (_asset == address(0)) { - return 0; - } - uint256 length = ROLLUP_PROCESSOR.getSupportedAssetsLength(); - for (uint256 i = 1; i <= length; i++) { - address fetched = ROLLUP_PROCESSOR.getSupportedAsset(i); - if (fetched == _asset) { - return i; - } - } - revert UnsupportedAsset(_asset); - } - - /** - * @notice Helper function to check if `_asset` is supported or not - * @param _asset The address of the asset - * @return True if the asset is supported, false otherwise - */ - function isSupportedAsset(address _asset) public view returns (bool) { - if (_asset == address(0)) { - return true; - } - uint256 length = ROLLUP_PROCESSOR.getSupportedAssetsLength(); - for (uint256 i = 1; i <= length; i++) { - address fetched = ROLLUP_PROCESSOR.getSupportedAsset(i); - if (fetched == _asset) { - return true; - } - } - return false; - } - - /** - * @notice Helper function to encode bridge call data into a bit-string - * @dev For more info see the rollup implementation at "rollup.aztec.eth" that decodes - * @param _bridgeAddressId id of the specific bridge (index in supportedBridge + 1) - * @param _inputAssetA The first input asset - * @param _inputAssetB The second input asset - * @param _outputAssetA The first output asset - * @param _outputAssetB The second output asset - * @param _auxData Auxiliary data that is passed to the bridge - * @return encodedBridgeCallData - The encoded bitmap containing encoded information about the call - */ - function encodeBridgeCallData( - uint256 _bridgeAddressId, - AztecTypes.AztecAsset memory _inputAssetA, - AztecTypes.AztecAsset memory _inputAssetB, - AztecTypes.AztecAsset memory _outputAssetA, - AztecTypes.AztecAsset memory _outputAssetB, - uint256 _auxData - ) public pure returns (uint256 encodedBridgeCallData) { - encodedBridgeCallData = _bridgeAddressId & MASK_THIRTY_TWO_BITS; - - // Input assets - encodedBridgeCallData = encodedBridgeCallData | (_encodeAsset(_inputAssetA) << INPUT_ASSET_ID_A_SHIFT); - encodedBridgeCallData = encodedBridgeCallData | (_encodeAsset(_inputAssetB) << INPUT_ASSET_ID_B_SHIFT); - encodedBridgeCallData = encodedBridgeCallData | (_encodeAsset(_outputAssetA) << OUTPUT_ASSET_ID_A_SHIFT); - encodedBridgeCallData = encodedBridgeCallData | (_encodeAsset(_outputAssetB) << OUTPUT_ASSET_ID_B_SHIFT); - - // Aux data - encodedBridgeCallData = encodedBridgeCallData | ((_auxData & MASK_SIXTY_FOUR_BITS) << AUX_DATA_SHIFT); - - // bitconfig - uint256 bitConfig = (_inputAssetB.assetType != AztecTypes.AztecAssetType.NOT_USED ? 1 : 0) | - (_outputAssetB.assetType != AztecTypes.AztecAssetType.NOT_USED ? 2 : 0); - encodedBridgeCallData = encodedBridgeCallData | (bitConfig << BITCONFIG_SHIFT); - } - - /** - * @notice Helper function for processing a rollup with a specific call data and `_totalInputValue` - * @dev will impersonate the rollup processor and update rollup state - * @param _encodedBridgeCallData The encoded bridge call data for the action, e.g., output from `encodeBridgeCallData()` - * @param _totalInputValue The value of inputAssetA and inputAssetB to transfer to the bridge - * @return outputValueA The amount of outputAssetA returned from the DeFi bridge interaction in this rollup - * @return outputValueB The amount of outputAssetB returned from the DeFi bridge interaction in this rollup - * @return isAsync A flag indicating whether the DeFi bridge interaction in this rollup was async - */ - function sendDefiRollup(uint256 _encodedBridgeCallData, uint256 _totalInputValue) - public - returns ( - uint256 outputValueA, - uint256 outputValueB, - bool isAsync - ) - { - _prepareRollup(); - bytes memory proofData = _getProofData(_encodedBridgeCallData, _totalInputValue); - - vm.recordLogs(); - vm.prank(ROLLUP_PROVIDER); - ROLLUP_PROCESSOR.processRollup(proofData, ""); - nextRollupId++; - - return _getDefiBridgeProcessedData(); - } - - /** - * @notice Sets `rollupBeneficiary` storage variable - * @param _rollupBeneficiary An address which receives rollup block's fee - */ - function setRollupBeneficiary(address _rollupBeneficiary) public { - rollupBeneficiary = _rollupBeneficiary; - } - - /** - * @notice A function which iterates through logs, decodes relevant events and returns values which were originally - * returned from bridge's `convert(...)` function. - * @dev You have to call `vm.recordLogs()` before calling this function - * @dev If there are multiple DefiBridgeProcessed events, values of the last one are returned --> this occurs when - * the bridge finalises interactions within it's convert functions. Returning values of the last ones works - * because the last emitted DefiBridgeProcessed event corresponds to the `convert(...)` call. - * @return outputValueA the amount of outputAssetA returned from the DeFi bridge interaction in this rollup - * @return outputValueB the amount of outputAssetB returned from the DeFi bridge interaction in this rollup - * @return isAsync a flag indicating whether the DeFi bridge interaction in this rollup was async - */ - function _getDefiBridgeProcessedData() - internal - returns ( - uint256 outputValueA, - uint256 outputValueB, - bool isAsync - ) - { - Vm.Log[] memory logs = vm.getRecordedLogs(); - - for (uint256 i; i < logs.length; ++i) { - if (logs[i].topics[0] == BRIDGE_PROCESSED_EVENT_SIG) { - (, outputValueA, outputValueB) = abi.decode(logs[i].data, (uint256, uint256, uint256)); - } else if (logs[i].topics[0] == ASYNC_BRIDGE_PROCESSED_EVENT_SIG) { - // We don't return totalInputValue so there is no need to decode the event's data - return (0, 0, true); - } - } - } - - /** - * @notice Helper function that will overwrite the rollup state to let us mock the rollup proof - * @dev Resets the rollupState to the initial state - * @dev if first run, also resets the data size and start index of the rollup - * @dev Mock any verifier call to return true to let builder focus on contract side of things - */ - function _prepareRollup() internal { - // Overwrite the rollup state hash - { - bytes32 rollupStateHash = keccak256( - abi.encode( - uint256(nextRollupId), - 0x18ceb5cd201e1cee669a5c3ad96d3c4e933a365b37046fc3178264bede32c68d, - 0x298329c7d0936453f354e4a5eef4897296cc0bf5a66f2a528318508d2088dafa, - 0x2fd2364bfe47ccb410eba3a958be9f39a8c6aca07db1abd15f5a211f51505071, - 0x2e4ab7889ab3139204945f9e722c7a8fdb84e66439d787bd066c3d896dba04ea - ) - ); - vm.store(address(ROLLUP_PROCESSOR), bytes32(uint256(9)), rollupStateHash); - } - - if (nextRollupId == 0) { - // Overwrite the start index and data size. Resets rollup state. - vm.store( - address(ROLLUP_PROCESSOR), - bytes32(uint256(2)), - bytes32(uint256(uint160(ROLLUP_PROCESSOR.verifier()))) - ); - } - - // Overwrite the previous defi interaction hash - vm.store( - address(ROLLUP_PROCESSOR), - bytes32(uint256(16)), - 0x14e0f351ade4ba10438e9b15f66ab2e6389eea5ae870d6e8b2df1418b2e6fd5b - ); - - vm.mockCall(ROLLUP_PROCESSOR.verifier(), "", abi.encode(true)); - } - - function _encodeAsset(AztecTypes.AztecAsset memory _asset) internal pure returns (uint256) { - if (_asset.assetType == AztecTypes.AztecAssetType.VIRTUAL) { - return (_asset.id & MASK_THIRTY_BITS) | VIRTUAL_ASSET_ID_FLAG; - } - return _asset.id & MASK_THIRTY_BITS; - } - - /** - * @notice Helper function to generate a mock rollup proof that calls a specific bridge with `_totalInputValue` - * @param _encodedBridgeCallData The encoded call, e.g., output from `encodeBridgeCallData()` - * @param _totalInputValue The amount of inputAssetA and inputAssetB to transfer to the defi bridge. - * @return data Encoded mock proof data. - */ - function _getProofData(uint256 _encodedBridgeCallData, uint256 _totalInputValue) - internal - view - returns (bytes memory data) - { - uint256 nextRollupId_ = nextRollupId; - - // SLOADing rollupBeneficiary directly from storage in YUL could cause issues because address could be packed - // into a slot with other data. I could solve this issue by simply moving rollupBeneficiary between two 256 bit - // vars but I think this is more robust because we might modify this contract and run into the issue gain. - address rollupBeneficiaryUnpacked = rollupBeneficiary; - - /* solhint-disable no-inline-assembly */ - assembly { - data := mload(0x40) - let length := 0x12c0 - mstore(0x40, add(add(data, length), 0x20)) - - mstore(data, length) - mstore(add(data, 0x20), nextRollupId_) - mstore(add(data, 0x60), mul(nextRollupId_, 2)) - mstore(add(data, 0x180), _encodedBridgeCallData) - mstore(add(data, 0x580), _totalInputValue) - mstore(add(data, 0x11a0), rollupBeneficiaryUnpacked) - - // Mock values - // mstore(add(data, 0x20), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x40), 0x0000000000000000000000000000000000000000000000000000000000000001) - //mstore(add(data, 0x60), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x80), 0x18ceb5cd201e1cee669a5c3ad96d3c4e933a365b37046fc3178264bede32c68d) - mstore(add(data, 0xa0), 0x18ceb5cd201e1cee669a5c3ad96d3c4e933a365b37046fc3178264bede32c68d) - mstore(add(data, 0xc0), 0x298329c7d0936453f354e4a5eef4897296cc0bf5a66f2a528318508d2088dafa) - mstore(add(data, 0xe0), 0x298329c7d0936453f354e4a5eef4897296cc0bf5a66f2a528318508d2088dafa) - mstore(add(data, 0x100), 0x2fd2364bfe47ccb410eba3a958be9f39a8c6aca07db1abd15f5a211f51505071) - mstore(add(data, 0x120), 0x2fd2364bfe47ccb410eba3a958be9f39a8c6aca07db1abd15f5a211f51505071) - mstore(add(data, 0x140), 0x2e4ab7889ab3139204945f9e722c7a8fdb84e66439d787bd066c3d896dba04ea) - mstore(add(data, 0x160), 0x2e4ab7889ab3139204945f9e722c7a8fdb84e66439d787bd066c3d896dba04ea) - // mstore(add(data, 0x180), 0x0000000000000000000000000000000000000000000000000000000100000002) - mstore(add(data, 0x1a0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x1c0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x1e0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x200), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x220), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x240), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x260), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x280), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x2a0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x2c0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x2e0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x300), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x320), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x340), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x360), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x380), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x3a0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x3c0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x3e0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x400), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x420), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x440), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x460), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x480), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x4a0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x4c0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x4e0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x500), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x520), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x540), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x560), 0x0000000000000000000000000000000000000000000000000000000000000000) - // mstore(add(data, 0x580), 0x0000000000000000000000000000000000000000000000000000000000000014) - mstore(add(data, 0x5a0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x5c0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x5e0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x600), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x620), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x640), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x660), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x680), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x6a0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x6c0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x6e0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x700), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x720), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x740), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x760), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x780), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x7a0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x7c0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x7e0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x800), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x820), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x840), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x860), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x880), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x8a0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x8c0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x8e0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x900), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x920), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x940), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x960), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x980), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x9a0), 0x0000000000000000000000000000000000000000000000000000000040000000) - mstore(add(data, 0x9c0), 0x0000000000000000000000000000000000000000000000000000000040000000) - mstore(add(data, 0x9e0), 0x0000000000000000000000000000000000000000000000000000000040000000) - mstore(add(data, 0xa00), 0x0000000000000000000000000000000000000000000000000000000040000000) - mstore(add(data, 0xa20), 0x0000000000000000000000000000000000000000000000000000000040000000) - mstore(add(data, 0xa40), 0x0000000000000000000000000000000000000000000000000000000040000000) - mstore(add(data, 0xa60), 0x0000000000000000000000000000000000000000000000000000000040000000) - mstore(add(data, 0xa80), 0x0000000000000000000000000000000000000000000000000000000040000000) - mstore(add(data, 0xaa0), 0x0000000000000000000000000000000000000000000000000000000040000000) - mstore(add(data, 0xac0), 0x0000000000000000000000000000000000000000000000000000000040000000) - mstore(add(data, 0xae0), 0x0000000000000000000000000000000000000000000000000000000040000000) - mstore(add(data, 0xb00), 0x0000000000000000000000000000000000000000000000000000000040000000) - mstore(add(data, 0xb20), 0x0000000000000000000000000000000000000000000000000000000040000000) - mstore(add(data, 0xb40), 0x0000000000000000000000000000000000000000000000000000000040000000) - mstore(add(data, 0xb60), 0x0000000000000000000000000000000000000000000000000000000040000000) - mstore(add(data, 0xb80), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xba0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xbc0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xbe0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xc00), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xc20), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xc40), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xc60), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xc80), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xca0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xcc0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xce0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xd00), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xd20), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xd40), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xd60), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xd80), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xda0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xdc0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xde0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xe00), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xe20), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xe40), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xe60), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xe80), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xea0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xec0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xee0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xf00), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xf20), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xf40), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xf60), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xf80), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xfa0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xfc0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0xfe0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x1000), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x1020), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x1040), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x1060), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x1080), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x10a0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x10c0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x10e0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x1100), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x1120), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x1140), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x1160), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x1180), 0x14e0f351ade4ba10438e9b15f66ab2e6389eea5ae870d6e8b2df1418b2e6fd5b) - // mstore(add(data, 0x11a0), 0x000000000000000000000000ddb3b44eaf58792a5a8dded7da7561a671138b80) - mstore(add(data, 0x11c0), 0x0000000000000000000000000000000000000000000000000000000000000001) - mstore(add(data, 0x11e0), 0x0000000000000000000000000000000000000000000000000000000000000003) - mstore(add(data, 0x1200), 0xc7336c7aeff11bdfcb8203789aea9cfbaf54d9a60a590d3dbc3bac681126be84) - mstore(add(data, 0x1220), 0xbf057586ee1142613502b8a6476690f8ed27f0acee5bf4d7a3bb763d86ff092a) - mstore(add(data, 0x1240), 0x0000000000000000000000000000000056fe413cadb2e67b0b3656d623451b3b) - mstore(add(data, 0x1260), 0x00000000000000000000000000000000aa89cf7553765b24c54589bbcedfc4ef) - mstore(add(data, 0x1280), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x12a0), 0x0000000000000000000000000000000000000000000000000000000000000000) - mstore(add(data, 0x12c0), 0x0000000000000000000000000000000000000000000000000000000000000000) - } - /* solhint-enable no-inline-assembly */ + ROLLUP_ENCODER = new RollupEncoder(address(ROLLUP_PROCESSOR)); } } diff --git a/src/test/aztec/base/BridgeTestBase.t.sol b/src/test/aztec/base/BridgeTestBase.t.sol deleted file mode 100644 index 5ccc531e0..000000000 --- a/src/test/aztec/base/BridgeTestBase.t.sol +++ /dev/null @@ -1,104 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Copyright 2022 Aztec. -pragma solidity >=0.8.4; - -import {AztecTypes} from "./../../../aztec/libraries/AztecTypes.sol"; -import {BridgeTestBase} from "./BridgeTestBase.sol"; - -contract BridgeTestBaseTest is BridgeTestBase { - uint256 private constant VIRTUAL_ASSET_ID_FLAG_SHIFT = 29; - uint256 private constant VIRTUAL_ASSET_ID_FLAG = 0x20000000; // 2 ** 29 - uint256 internal constant ADDRESS_MASK = 0x00ffffffffffffffffffffffffffffffffffffffff; - - function testVirtualAssetFlagApplied(uint32 _assetId) public { - uint256 assetId = bound(_assetId, 0, VIRTUAL_ASSET_ID_FLAG - 1); - uint256 virtualAsset = assetId + VIRTUAL_ASSET_ID_FLAG; - - AztecTypes.AztecAsset memory decoded = _decodeAsset(virtualAsset); - assertEq(decoded.erc20Address, address(0), "Virtual asset has erc20 address"); - assertEq(decoded.id, assetId, "Asset Id not matching"); - assertTrue(decoded.assetType == AztecTypes.AztecAssetType.VIRTUAL, "Not virtual"); - } - - function testNonVirtual(uint32 _assetId) public { - uint256 assetId = bound(_assetId, 0, ROLLUP_PROCESSOR.getSupportedAssetsLength()); - - address assetAddress = ROLLUP_PROCESSOR.getSupportedAsset(assetId); - - AztecTypes.AztecAsset memory decoded = _decodeAsset(assetId); - - assertEq(decoded.erc20Address, assetAddress, "asset address not matching"); - assertEq(decoded.id, assetId, "Asset Id not matching"); - if (assetAddress == address(0)) { - assertTrue(decoded.assetType == AztecTypes.AztecAssetType.ETH, "Not eth"); - } else { - assertTrue(decoded.assetType == AztecTypes.AztecAssetType.ERC20, "Not erc20"); - } - } - - function testGetDefiBridgeProcessedData() public { - uint256 outputValueAReference = 896; - uint256 outputValueBReference = 351; - - vm.recordLogs(); - emit DefiBridgeProcessed(126, 12, 41, outputValueAReference, outputValueBReference, true, ""); - (uint256 outputValueA, uint256 outputValueB, bool isAsync) = _getDefiBridgeProcessedData(); - - assertEq(outputValueA, outputValueAReference, "Incorrect outputValueA"); - assertEq(outputValueB, outputValueBReference, "Incorrect outputValueB"); - assertFalse(isAsync, "Interaction unexpectedly async"); - } - - function testGetDefiBridgeProcessedDataAsync() public { - vm.recordLogs(); - emit AsyncDefiBridgeProcessed(126, 12, 1e18); - (uint256 outputValueA, uint256 outputValueB, bool isAsync) = _getDefiBridgeProcessedData(); - - assertEq(outputValueA, 0, "Incorrect outputValueA"); - assertEq(outputValueB, 0, "Incorrect outputValueB"); - assertTrue(isAsync, "Interaction unexpectedly async"); - } - - function testRollupBeneficiaryEncoding() public { - address beneficiary = 0x508383c4cbD351dC2d4F632C65Ee9d2BC79612EC; - this.setRollupBeneficiary(beneficiary); - uint256 bridgeCallData = encodeBridgeCallData(5, emptyAsset, emptyAsset, emptyAsset, emptyAsset, 0); - bytes memory proofData = _getProofData(bridgeCallData, 1e18); - address decodedBeneficiary = _extractRollupBeneficiary(proofData); - assertEq(decodedBeneficiary, beneficiary, "Decoded address does not match"); - } - - function _decodeAsset(uint256 _assetId) internal view returns (AztecTypes.AztecAsset memory) { - if (_assetId >> VIRTUAL_ASSET_ID_FLAG_SHIFT == 1) { - return - AztecTypes.AztecAsset({ - id: _assetId - VIRTUAL_ASSET_ID_FLAG, - erc20Address: address(0), - assetType: AztecTypes.AztecAssetType.VIRTUAL - }); - } else { - address erc20Address = ROLLUP_PROCESSOR.getSupportedAsset(_assetId); - return - AztecTypes.AztecAsset({ - id: _assetId, - erc20Address: erc20Address, - assetType: erc20Address == address(0) - ? AztecTypes.AztecAssetType.ETH - : AztecTypes.AztecAssetType.ERC20 - }); - } - } - - // copied from Decoder.sol - function _extractRollupBeneficiary(bytes memory _proofData) internal pure returns (address rollupBeneficiary) { - /* solhint-disable no-inline-assembly */ - assembly { - rollupBeneficiary := mload(add(_proofData, ROLLUP_BENEFICIARY_OFFSET)) - // Validate `rollupBeneficiary` is an address - if gt(rollupBeneficiary, ADDRESS_MASK) { - revert(0, 0) - } - } - /* solhint-enable no-inline-assembly */ - } -} diff --git a/src/test/aztec/dataprovider/DataProvider.t.sol b/src/test/aztec/dataprovider/DataProvider.t.sol index fb6c26576..262854a85 100644 --- a/src/test/aztec/dataprovider/DataProvider.t.sol +++ b/src/test/aztec/dataprovider/DataProvider.t.sol @@ -2,7 +2,7 @@ // Copyright 2022 Aztec. pragma solidity >=0.8.4; -import {AztecTypes} from "./../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {BridgeTestBase} from "../base/BridgeTestBase.sol"; import {DataProvider} from "../../../aztec/DataProvider.sol"; @@ -180,18 +180,20 @@ contract DataProviderTest is BridgeTestBase { function testHappySubsidyHelper() public { AztecTypes.AztecAsset memory empty; - AztecTypes.AztecAsset memory eth = getRealAztecAsset(address(0)); - AztecTypes.AztecAsset memory vyvault = getRealAztecAsset(0xa258C4606Ca8206D8aA700cE2143D7db854D168c); + AztecTypes.AztecAsset memory eth = ROLLUP_ENCODER.getRealAztecAsset(address(0)); + AztecTypes.AztecAsset memory vyvault = ROLLUP_ENCODER.getRealAztecAsset( + 0xa258C4606Ca8206D8aA700cE2143D7db854D168c + ); vm.warp(block.timestamp + 1 days); - uint256 bridgeCallData = encodeBridgeCallData(7, eth, empty, vyvault, empty, 0); + uint256 bridgeCallData = ROLLUP_ENCODER.encodeBridgeCallData(7, eth, empty, vyvault, empty, 0); (uint256 criteria, uint256 subsidy) = provider.getAccumulatedSubsidyAmount(bridgeCallData); assertEq(criteria, 0, "Subsidy have accrued"); assertGt(subsidy, 0, "No subsidy accrued"); { - uint256 bridgeCallData = encodeBridgeCallData(7, vyvault, empty, eth, empty, 1); + uint256 bridgeCallData = ROLLUP_ENCODER.encodeBridgeCallData(7, vyvault, empty, eth, empty, 1); (uint256 criteria, uint256 subsidy) = provider.getAccumulatedSubsidyAmount(bridgeCallData); assertEq(criteria, 1, "Wrong criteria"); assertEq(subsidy, 0, "Subsidy accrued"); @@ -199,23 +201,23 @@ contract DataProviderTest is BridgeTestBase { } function testHappySubsidyHelper2InOut() public { - AztecTypes.AztecAsset memory eth = getRealAztecAsset(address(0)); - AztecTypes.AztecAsset memory dai = getRealAztecAsset(0x6B175474E89094C44Da98b954EedeAC495271d0F); - uint256 bridgeCallData = encodeBridgeCallData(7, dai, eth, dai, eth, 0); + AztecTypes.AztecAsset memory eth = ROLLUP_ENCODER.getRealAztecAsset(address(0)); + AztecTypes.AztecAsset memory dai = ROLLUP_ENCODER.getRealAztecAsset(0x6B175474E89094C44Da98b954EedeAC495271d0F); + uint256 bridgeCallData = ROLLUP_ENCODER.encodeBridgeCallData(7, dai, eth, dai, eth, 0); (uint256 criteria, uint256 subsidy) = provider.getAccumulatedSubsidyAmount(bridgeCallData); assertEq(criteria, 0, "Wrong criteria"); assertGt(subsidy, 0, "No subsidy accrued"); } function testHappySubsidyHelperVirtual() public { - AztecTypes.AztecAsset memory eth = getRealAztecAsset(address(0)); + AztecTypes.AztecAsset memory eth = ROLLUP_ENCODER.getRealAztecAsset(address(0)); AztecTypes.AztecAsset memory virtualAsset = AztecTypes.AztecAsset({ id: 0, erc20Address: address(0), assetType: AztecTypes.AztecAssetType.VIRTUAL }); - uint256 bridgeCallData = encodeBridgeCallData(7, virtualAsset, eth, virtualAsset, eth, 0); + uint256 bridgeCallData = ROLLUP_ENCODER.encodeBridgeCallData(7, virtualAsset, eth, virtualAsset, eth, 0); (uint256 criteria, uint256 subsidy) = provider.getAccumulatedSubsidyAmount(bridgeCallData); assertEq(criteria, 0, "Wrong criteria"); assertGt(subsidy, 0, "No subsidy accrued"); @@ -223,8 +225,8 @@ contract DataProviderTest is BridgeTestBase { function testUnHappySubsidyHelper() public { AztecTypes.AztecAsset memory empty; - AztecTypes.AztecAsset memory dai = getRealAztecAsset(0x6B175474E89094C44Da98b954EedeAC495271d0F); - uint256 bridgeCallData = encodeBridgeCallData(1, dai, empty, dai, empty, 0); + AztecTypes.AztecAsset memory dai = ROLLUP_ENCODER.getRealAztecAsset(0x6B175474E89094C44Da98b954EedeAC495271d0F); + uint256 bridgeCallData = ROLLUP_ENCODER.encodeBridgeCallData(1, dai, empty, dai, empty, 0); (uint256 criteria, uint256 subsidy) = provider.getAccumulatedSubsidyAmount(bridgeCallData); assertEq(criteria, 0, "Wrong criteria"); assertEq(subsidy, 0, "Subsidy have accrued"); diff --git a/src/test/bridges/angle/AngleSLPE2E.t.sol b/src/test/bridges/angle/AngleSLPE2E.t.sol index 5563a201d..fd5999d8b 100644 --- a/src/test/bridges/angle/AngleSLPE2E.t.sol +++ b/src/test/bridges/angle/AngleSLPE2E.t.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.4; import {BridgeTestBase} from "./../../aztec/base/BridgeTestBase.sol"; -import {AztecTypes} from "../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; @@ -47,16 +47,16 @@ contract AngleSLPE2ETest is BridgeTestBase { id = ROLLUP_PROCESSOR.getSupportedBridgesLength(); - ethAsset = getRealAztecAsset(address(0)); + ethAsset = ROLLUP_ENCODER.getRealAztecAsset(address(0)); - daiAsset = getRealAztecAsset(0x6B175474E89094C44Da98b954EedeAC495271d0F); - sanDaiAsset = getRealAztecAsset(0x7B8E89b0cE7BAC2cfEC92A371Da899eA8CBdb450); + daiAsset = ROLLUP_ENCODER.getRealAztecAsset(0x6B175474E89094C44Da98b954EedeAC495271d0F); + sanDaiAsset = ROLLUP_ENCODER.getRealAztecAsset(0x7B8E89b0cE7BAC2cfEC92A371Da899eA8CBdb450); - usdcAsset = getRealAztecAsset(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48); - sanUsdcAsset = getRealAztecAsset(0x9C215206Da4bf108aE5aEEf9dA7caD3352A36Dad); + usdcAsset = ROLLUP_ENCODER.getRealAztecAsset(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48); + sanUsdcAsset = ROLLUP_ENCODER.getRealAztecAsset(0x9C215206Da4bf108aE5aEEf9dA7caD3352A36Dad); - wethAsset = getRealAztecAsset(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); - sanWethAsset = getRealAztecAsset(0x30c955906735e48D73080fD20CB488518A6333C8); + wethAsset = ROLLUP_ENCODER.getRealAztecAsset(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); + sanWethAsset = ROLLUP_ENCODER.getRealAztecAsset(0x30c955906735e48D73080fD20CB488518A6333C8); deal(daiAsset.erc20Address, address(bridge), DUST); deal(sanDaiAsset.erc20Address, address(bridge), DUST); @@ -73,7 +73,7 @@ contract AngleSLPE2ETest is BridgeTestBase { SUBSIDY.subsidize{value: 10 ether}(address(bridge), 1, 500); SUBSIDY.registerBeneficiary(BENEFICIARY); - setRollupBeneficiary(BENEFICIARY); + ROLLUP_ENCODER.setRollupBeneficiary(BENEFICIARY); } function testValidDeposit(uint96 _amount) public { @@ -90,8 +90,8 @@ contract AngleSLPE2ETest is BridgeTestBase { uint256 balanceRollupBeforeSanWETH = IERC20(sanWethAsset.erc20Address).balanceOf(address(ROLLUP_PROCESSOR)); - uint256 bridgeCallData = encodeBridgeCallData(id, ethAsset, emptyAsset, sanWethAsset, emptyAsset, 0); - (uint256 outputValueA, , ) = sendDefiRollup(bridgeCallData, amount); + ROLLUP_ENCODER.defiInteractionL2(id, ethAsset, emptyAsset, sanWethAsset, emptyAsset, 0, amount); + (uint256 outputValueA, , ) = ROLLUP_ENCODER.processRollupAndGetBridgeResult(); (, , , , , uint256 sanRate, , , ) = bridge.STABLE_MASTER().collateralMap(bridge.POOLMANAGER_WETH()); @@ -124,8 +124,8 @@ contract AngleSLPE2ETest is BridgeTestBase { uint256 balanceRollupBeforeETH = address(ROLLUP_PROCESSOR).balance; - uint256 bridgeCallData = encodeBridgeCallData(id, sanWethAsset, emptyAsset, ethAsset, emptyAsset, 1); - (uint256 outputValueA, , ) = sendDefiRollup(bridgeCallData, amount); + ROLLUP_ENCODER.defiInteractionL2(id, sanWethAsset, emptyAsset, ethAsset, emptyAsset, 1, amount); + (uint256 outputValueA, , ) = ROLLUP_ENCODER.processRollupAndGetBridgeResult(); (, , , , , uint256 sanRate, , , ) = bridge.STABLE_MASTER().collateralMap(bridge.POOLMANAGER_WETH()); @@ -166,8 +166,8 @@ contract AngleSLPE2ETest is BridgeTestBase { uint256 balanceRollupBeforeOutput = IERC20(_outputAsset.erc20Address).balanceOf(address(ROLLUP_PROCESSOR)); - uint256 bridgeCallData = encodeBridgeCallData(id, _inputAsset, emptyAsset, _outputAsset, emptyAsset, 0); - (uint256 outputValueA, , ) = sendDefiRollup(bridgeCallData, amount); + ROLLUP_ENCODER.defiInteractionL2(id, _inputAsset, emptyAsset, _outputAsset, emptyAsset, 0, amount); + (uint256 outputValueA, , ) = ROLLUP_ENCODER.processRollupAndGetBridgeResult(); (, , , , , uint256 sanRate, , , ) = bridge.STABLE_MASTER().collateralMap(_poolManager); @@ -193,8 +193,8 @@ contract AngleSLPE2ETest is BridgeTestBase { uint256 balanceRollupBeforeOutput = IERC20(_outputAsset.erc20Address).balanceOf(address(ROLLUP_PROCESSOR)); uint256 balanceRollupBeforeInput = IERC20(_inputAsset.erc20Address).balanceOf(address(ROLLUP_PROCESSOR)); - uint256 bridgeCallData = encodeBridgeCallData(id, _inputAsset, emptyAsset, _outputAsset, emptyAsset, 1); - (uint256 outputValueA, , ) = sendDefiRollup(bridgeCallData, _amount); + ROLLUP_ENCODER.defiInteractionL2(id, _inputAsset, emptyAsset, _outputAsset, emptyAsset, 1, _amount); + (uint256 outputValueA, , ) = ROLLUP_ENCODER.processRollupAndGetBridgeResult(); (, , , , , uint256 sanRate, , , ) = bridge.STABLE_MASTER().collateralMap(_poolManager); diff --git a/src/test/bridges/angle/AngleSLPUnit.t.sol b/src/test/bridges/angle/AngleSLPUnit.t.sol index c90b68d49..a58da29d2 100644 --- a/src/test/bridges/angle/AngleSLPUnit.t.sol +++ b/src/test/bridges/angle/AngleSLPUnit.t.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.4; import {BridgeTestBase} from "./../../aztec/base/BridgeTestBase.sol"; -import {AztecTypes} from "../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; @@ -45,13 +45,13 @@ contract AngleSLPUnitTest is BridgeTestBase { id = ROLLUP_PROCESSOR.getSupportedBridgesLength(); - daiAsset = getRealAztecAsset(0x6B175474E89094C44Da98b954EedeAC495271d0F); - usdcAsset = getRealAztecAsset(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48); - ethAsset = getRealAztecAsset(address(0)); - wethAsset = getRealAztecAsset(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); - sanWethAsset = getRealAztecAsset(0x30c955906735e48D73080fD20CB488518A6333C8); - sanDaiAsset = getRealAztecAsset(0x7B8E89b0cE7BAC2cfEC92A371Da899eA8CBdb450); - sanUsdcAsset = getRealAztecAsset(0x9C215206Da4bf108aE5aEEf9dA7caD3352A36Dad); + daiAsset = ROLLUP_ENCODER.getRealAztecAsset(0x6B175474E89094C44Da98b954EedeAC495271d0F); + usdcAsset = ROLLUP_ENCODER.getRealAztecAsset(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48); + ethAsset = ROLLUP_ENCODER.getRealAztecAsset(address(0)); + wethAsset = ROLLUP_ENCODER.getRealAztecAsset(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); + sanWethAsset = ROLLUP_ENCODER.getRealAztecAsset(0x30c955906735e48D73080fD20CB488518A6333C8); + sanDaiAsset = ROLLUP_ENCODER.getRealAztecAsset(0x7B8E89b0cE7BAC2cfEC92A371Da899eA8CBdb450); + sanUsdcAsset = ROLLUP_ENCODER.getRealAztecAsset(0x9C215206Da4bf108aE5aEEf9dA7caD3352A36Dad); unsupportedAsset = AztecTypes.AztecAsset({ id: 456, erc20Address: 0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5, diff --git a/src/test/bridges/curve/CurveStEthBridge.t.sol b/src/test/bridges/curve/CurveStEthBridge.t.sol index cd2b202e1..45d6d9d4c 100644 --- a/src/test/bridges/curve/CurveStEthBridge.t.sol +++ b/src/test/bridges/curve/CurveStEthBridge.t.sol @@ -11,7 +11,7 @@ import {ILido} from "../../../interfaces/lido/ILido.sol"; import {IWstETH} from "../../../interfaces/lido/IWstETH.sol"; import {CurveStEthBridge} from "../../../bridges/curve/CurveStEthBridge.sol"; -import {AztecTypes} from "../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {ErrorLib} from "../../../bridges/base/ErrorLib.sol"; contract CurveStEthBridgeTest is BridgeTestBase { @@ -34,8 +34,8 @@ contract CurveStEthBridgeTest is BridgeTestBase { ROLLUP_PROCESSOR.setSupportedBridge(address(bridge), 175000); id = ROLLUP_PROCESSOR.getSupportedBridgesLength(); - ethAsset = getRealAztecAsset(address(0)); - wstETHAsset = getRealAztecAsset(address(WRAPPED_STETH)); + ethAsset = ROLLUP_ENCODER.getRealAztecAsset(address(0)); + wstETHAsset = ROLLUP_ENCODER.getRealAztecAsset(address(WRAPPED_STETH)); // Prefund to save gas deal(address(WRAPPED_STETH), address(ROLLUP_PROCESSOR), WRAPPED_STETH.balanceOf(address(ROLLUP_PROCESSOR)) + 1); @@ -159,10 +159,26 @@ contract CurveStEthBridgeTest is BridgeTestBase { uint256 wstEthIncrease = _computeEthToWST(_depositAmount); - uint256 bridgeCallData = encodeBridgeCallData(id, ethAsset, emptyAsset, wstETHAsset, emptyAsset, minPrice); - vm.expectEmit(true, true, false, true); - emit DefiBridgeProcessed(bridgeCallData, getNextNonce(), _depositAmount, wstEthIncrease, 0, true, ""); - sendDefiRollup(bridgeCallData, _depositAmount); + uint256 bridgeCallData = ROLLUP_ENCODER.defiInteractionL2( + id, + ethAsset, + emptyAsset, + wstETHAsset, + emptyAsset, + minPrice, + _depositAmount + ); + + ROLLUP_ENCODER.registerEventToBeChecked( + bridgeCallData, + ROLLUP_ENCODER.getNextNonce(), + _depositAmount, + wstEthIncrease, + 0, + true, + "" + ); + ROLLUP_ENCODER.processRollup(); assertEq(address(ROLLUP_PROCESSOR).balance, beforeETHBalance - _depositAmount, "ETH balance not matching"); assertEq( @@ -183,10 +199,26 @@ contract CurveStEthBridgeTest is BridgeTestBase { uint256 expectedEth = _computeWSTHToEth(_depositAmount); - uint256 bridgeCallData = encodeBridgeCallData(id, wstETHAsset, emptyAsset, ethAsset, emptyAsset, minPrice); - vm.expectEmit(true, true, false, true); - emit DefiBridgeProcessed(bridgeCallData, getNextNonce(), _depositAmount, expectedEth, 0, true, ""); - sendDefiRollup(bridgeCallData, _depositAmount); + uint256 bridgeCallData = ROLLUP_ENCODER.defiInteractionL2( + id, + wstETHAsset, + emptyAsset, + ethAsset, + emptyAsset, + minPrice, + _depositAmount + ); + + ROLLUP_ENCODER.registerEventToBeChecked( + bridgeCallData, + ROLLUP_ENCODER.getNextNonce(), + _depositAmount, + expectedEth, + 0, + true, + "" + ); + ROLLUP_ENCODER.processRollupAndGetBridgeResult(); assertEq(address(ROLLUP_PROCESSOR).balance, beforeETHBalance + expectedEth, "ETH balance not matching"); assertEq( diff --git a/src/test/bridges/curve/CurveStEthLPUnit.t.sol b/src/test/bridges/curve/CurveStEthLPUnit.t.sol index 955103ab9..4d76620b6 100644 --- a/src/test/bridges/curve/CurveStEthLPUnit.t.sol +++ b/src/test/bridges/curve/CurveStEthLPUnit.t.sol @@ -12,7 +12,7 @@ import {IWstETH} from "../../../interfaces/lido/IWstETH.sol"; import {IDefiBridge} from "../../../aztec/interfaces/IDefiBridge.sol"; import {ISubsidy} from "../../../aztec/interfaces/ISubsidy.sol"; -import {AztecTypes} from "../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {ErrorLib} from "../../../bridges/base/ErrorLib.sol"; import {Deployer} from "../../../bridges/curve/Deployer.sol"; @@ -51,12 +51,12 @@ contract CurveLpUnitTest is BridgeTestBase { ROLLUP_PROCESSOR.setSupportedBridge(address(bridge), 500000); bridgeAddressId = ROLLUP_PROCESSOR.getSupportedBridgesLength(); - ethAsset = getRealAztecAsset(address(0)); - wstETHAsset = getRealAztecAsset(address(WRAPPED_STETH)); + ethAsset = ROLLUP_ENCODER.getRealAztecAsset(address(0)); + wstETHAsset = ROLLUP_ENCODER.getRealAztecAsset(address(WRAPPED_STETH)); vm.prank(MULTI_SIG); ROLLUP_PROCESSOR.setSupportedAsset(address(LP_TOKEN), 100000); - lpAsset = getRealAztecAsset(address(LP_TOKEN)); + lpAsset = ROLLUP_ENCODER.getRealAztecAsset(address(LP_TOKEN)); // Prefund to save gas deal(address(WRAPPED_STETH), address(ROLLUP_PROCESSOR), WRAPPED_STETH.balanceOf(address(ROLLUP_PROCESSOR)) + 1); diff --git a/src/test/bridges/curve/CurveStEthLpE2E.t.sol b/src/test/bridges/curve/CurveStEthLpE2E.t.sol index 54af65026..528c77639 100644 --- a/src/test/bridges/curve/CurveStEthLpE2E.t.sol +++ b/src/test/bridges/curve/CurveStEthLpE2E.t.sol @@ -13,7 +13,7 @@ import {IDefiBridge} from "../../../aztec/interfaces/IDefiBridge.sol"; import {ISubsidy} from "../../../aztec/interfaces/ISubsidy.sol"; import {CurveStEthBridge} from "../../../bridges/curve/CurveStEthBridge.sol"; -import {AztecTypes} from "../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {ErrorLib} from "../../../bridges/base/ErrorLib.sol"; import {Deployer} from "../../../bridges/curve/Deployer.sol"; @@ -25,7 +25,7 @@ contract CurveLpE2ETest is BridgeTestBase { IWstETH public constant WRAPPED_STETH = IWstETH(0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0); ICurvePool public constant CURVE_POOL = ICurvePool(0xDC24316b9AE028F1497c275EB9192a3Ea0f67022); - address public constant BENEFICAIRY = address(0xbeef); + address public constant BENEFICIARY = address(0xbeef); AztecTypes.AztecAsset private ethAsset; AztecTypes.AztecAsset private wstETHAsset; @@ -52,12 +52,12 @@ contract CurveLpE2ETest is BridgeTestBase { ROLLUP_PROCESSOR.setSupportedBridge(address(bridge), 500000); bridgeAddressId = ROLLUP_PROCESSOR.getSupportedBridgesLength(); - ethAsset = getRealAztecAsset(address(0)); - wstETHAsset = getRealAztecAsset(address(WRAPPED_STETH)); + ethAsset = ROLLUP_ENCODER.getRealAztecAsset(address(0)); + wstETHAsset = ROLLUP_ENCODER.getRealAztecAsset(address(WRAPPED_STETH)); vm.prank(MULTI_SIG); ROLLUP_PROCESSOR.setSupportedAsset(address(LP_TOKEN), 100000); - lpAsset = getRealAztecAsset(address(LP_TOKEN)); + lpAsset = ROLLUP_ENCODER.getRealAztecAsset(address(LP_TOKEN)); // Prefund to save gas deal(address(WRAPPED_STETH), address(ROLLUP_PROCESSOR), WRAPPED_STETH.balanceOf(address(ROLLUP_PROCESSOR)) + 1); @@ -65,9 +65,9 @@ contract CurveLpE2ETest is BridgeTestBase { STETH.submit{value: 10}(address(0)); STETH.transfer(address(bridge), 10); - SUBSIDY.registerBeneficiary(BENEFICAIRY); + SUBSIDY.registerBeneficiary(BENEFICIARY); SUBSIDY.subsidize{value: 1 ether}(bridgeAddress, 0, 180); - setRollupBeneficiary(BENEFICAIRY); + ROLLUP_ENCODER.setRollupBeneficiary(BENEFICIARY); vm.warp(block.timestamp + 180 minutes); ISubsidy.Subsidy memory sub = SUBSIDY.getSubsidy(bridgeAddress, 0); @@ -76,15 +76,15 @@ contract CurveLpE2ETest is BridgeTestBase { } function testDepositEth(uint72 _depositAmount) public { - uint256 claimableBefore = SUBSIDY.claimableAmount(BENEFICAIRY); + uint256 claimableBefore = SUBSIDY.claimableAmount(BENEFICIARY); testDeposit(true, _depositAmount); - assertGt(SUBSIDY.claimableAmount(BENEFICAIRY), claimableBefore, "No subsidy accumulated"); + assertGt(SUBSIDY.claimableAmount(BENEFICIARY), claimableBefore, "No subsidy accumulated"); } function testDepositWstETH(uint72 _depositAmount) public { - uint256 claimableBefore = SUBSIDY.claimableAmount(BENEFICAIRY); + uint256 claimableBefore = SUBSIDY.claimableAmount(BENEFICIARY); testDeposit(false, _depositAmount); - assertGt(SUBSIDY.claimableAmount(BENEFICAIRY), claimableBefore, "No subsidy accumulated"); + assertGt(SUBSIDY.claimableAmount(BENEFICIARY), claimableBefore, "No subsidy accumulated"); } function testDeposit(bool _isEth, uint72 _depositAmount) public { @@ -130,13 +130,21 @@ contract CurveLpE2ETest is BridgeTestBase { ? address(ROLLUP_PROCESSOR).balance : WRAPPED_STETH.balanceOf(address(ROLLUP_PROCESSOR)); - uint256 bridgeCallData = encodeBridgeCallData(bridgeAddressId, _inputAsset, emptyAsset, lpAsset, emptyAsset, 0); + ROLLUP_ENCODER.defiInteractionL2( + bridgeAddressId, + _inputAsset, + emptyAsset, + lpAsset, + emptyAsset, + 0, + _depositAmount + ); - uint256 claimableBefore = SUBSIDY.claimableAmount(BENEFICAIRY); + uint256 claimableBefore = SUBSIDY.claimableAmount(BENEFICIARY); - (uint256 outputValueA, uint256 outputValueB, bool isAsync) = sendDefiRollup(bridgeCallData, _depositAmount); + (uint256 outputValueA, uint256 outputValueB, bool isAsync) = ROLLUP_ENCODER.processRollupAndGetBridgeResult(); - assertGt(SUBSIDY.claimableAmount(BENEFICAIRY), claimableBefore, "No subsidy accumulated"); + assertGt(SUBSIDY.claimableAmount(BENEFICIARY), claimableBefore, "No subsidy accumulated"); uint256 rollupLpBalanceAfter = LP_TOKEN.balanceOf(address(ROLLUP_PROCESSOR)); uint256 rollupInputBalanceAfter = isEth @@ -154,8 +162,8 @@ contract CurveLpE2ETest is BridgeTestBase { uint256 rollupEthBalance = address(ROLLUP_PROCESSOR).balance; uint256 rollupWstEThBalance = WRAPPED_STETH.balanceOf(address(ROLLUP_PROCESSOR)); - uint256 bridgeCallData = encodeBridgeCallData(bridgeAddressId, lpAsset, emptyAsset, ethAsset, wstETHAsset, 0); - (uint256 outputValueA, uint256 outputValueB, bool isAsync) = sendDefiRollup(bridgeCallData, _inputAmount); + ROLLUP_ENCODER.defiInteractionL2(bridgeAddressId, lpAsset, emptyAsset, ethAsset, wstETHAsset, 0, _inputAmount); + (uint256 outputValueA, uint256 outputValueB, bool isAsync) = ROLLUP_ENCODER.processRollupAndGetBridgeResult(); uint256 rollupLpBalanceAfter = LP_TOKEN.balanceOf(address(ROLLUP_PROCESSOR)); uint256 rollupEthBalanceAfter = address(ROLLUP_PROCESSOR).balance; diff --git a/src/test/bridges/dca/BiDCABridge.t.sol b/src/test/bridges/dca/BiDCABridge.t.sol index 0767786db..52b632c7a 100644 --- a/src/test/bridges/dca/BiDCABridge.t.sol +++ b/src/test/bridges/dca/BiDCABridge.t.sol @@ -8,7 +8,7 @@ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IER import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import {Test} from "forge-std/Test.sol"; -import {AztecTypes} from "../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {ErrorLib} from "../../../bridges/base/ErrorLib.sol"; import {IWETH} from "../../../interfaces/IWETH.sol"; diff --git a/src/test/bridges/dca/BiDCABridgeArber.t.sol b/src/test/bridges/dca/BiDCABridgeArber.t.sol index 7c6947049..495528354 100644 --- a/src/test/bridges/dca/BiDCABridgeArber.t.sol +++ b/src/test/bridges/dca/BiDCABridgeArber.t.sol @@ -8,7 +8,7 @@ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IER import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import {Test} from "forge-std/Test.sol"; -import {AztecTypes} from "../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {ErrorLib} from "../../../bridges/base/ErrorLib.sol"; import {IWETH} from "../../../interfaces/IWETH.sol"; diff --git a/src/test/bridges/dca/BiDCABridgeE2E.t.sol b/src/test/bridges/dca/BiDCABridgeE2E.t.sol index 9e157bb6f..f21a72886 100644 --- a/src/test/bridges/dca/BiDCABridgeE2E.t.sol +++ b/src/test/bridges/dca/BiDCABridgeE2E.t.sol @@ -8,7 +8,7 @@ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IER import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import {Test} from "forge-std/Test.sol"; -import {AztecTypes} from "../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {ErrorLib} from "../../../bridges/base/ErrorLib.sol"; import {IWETH} from "../../../interfaces/IWETH.sol"; import {BridgeTestBase} from "./../../aztec/base/BridgeTestBase.sol"; @@ -65,8 +65,8 @@ contract BiDCATestE2E is BridgeTestBase { vm.stopPrank(); - aztecAssetA = getRealAztecAsset(address(assetA)); - aztecAssetB = getRealAztecAsset(address(assetB)); + aztecAssetA = ROLLUP_ENCODER.getRealAztecAsset(address(assetA)); + aztecAssetB = ROLLUP_ENCODER.getRealAztecAsset(address(assetB)); vm.label(address(assetA), "DAI"); vm.label(address(assetB), "WETH"); @@ -127,16 +127,17 @@ contract BiDCATestE2E is BridgeTestBase { // Deposit with asset A deal(address(_aFirst ? assetA : assetB), address(ROLLUP_PROCESSOR), deposit1); - uint256 encodedBridgeCallData = encodeBridgeCallData( + ROLLUP_ENCODER.defiInteractionL2( bridgeAddressId, _aFirst ? aztecAssetA : aztecAssetB, emptyAsset, _aFirst ? aztecAssetB : aztecAssetA, emptyAsset, - uint64(length1) + uint64(length1), + deposit1 ); - sendDefiRollup(encodedBridgeCallData, deposit1); + ROLLUP_ENCODER.processRollup(); vm.warp(block.timestamp + timediff * 1 days); } @@ -145,16 +146,17 @@ contract BiDCATestE2E is BridgeTestBase { // Deposit2 deal(address(_aFirst ? assetB : assetA), address(ROLLUP_PROCESSOR), deposit2); - uint256 encodedBridgeCallData = encodeBridgeCallData( + ROLLUP_ENCODER.defiInteractionL2( bridgeAddressId, _aFirst ? aztecAssetB : aztecAssetA, emptyAsset, _aFirst ? aztecAssetA : aztecAssetB, emptyAsset, - uint64(length2) + uint64(length2), + deposit2 ); - sendDefiRollup(encodedBridgeCallData, deposit2); + ROLLUP_ENCODER.processRollup(); vm.warp(endTime); } } diff --git a/src/test/bridges/donation/DonateBridgeE2E.t.sol b/src/test/bridges/donation/DonateBridgeE2E.t.sol index 541e1432f..f8d1265fe 100644 --- a/src/test/bridges/donation/DonateBridgeE2E.t.sol +++ b/src/test/bridges/donation/DonateBridgeE2E.t.sol @@ -4,9 +4,9 @@ pragma solidity >=0.8.4; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {BridgeTestBase} from "./../../aztec/base/BridgeTestBase.sol"; -import {AztecTypes} from "../../../aztec/libraries/AztecTypes.sol"; import {ErrorLib} from "../../../bridges/base/ErrorLib.sol"; import {DonationBridge} from "../../../bridges/donation/DonationBridge.sol"; @@ -43,7 +43,7 @@ contract DonationBridgeE2ETest is BridgeTestBase { } function setUp() public { - ethAsset = getRealAztecAsset(address(0)); + ethAsset = ROLLUP_ENCODER.getRealAztecAsset(address(0)); bridge = new DonationBridge(address(ROLLUP_PROCESSOR)); bridge.listDonee(DONEE); @@ -61,10 +61,18 @@ contract DonationBridgeE2ETest is BridgeTestBase { uint256 doneeBalanceBefore = DONEE.balance; - uint256 bridgeCallData = encodeBridgeCallData(bridgeAddressId, ethAsset, emptyAsset, emptyAsset, emptyAsset, 1); - vm.expectEmit(true, true, false, true); - emit DefiBridgeProcessed(bridgeCallData, getNextNonce(), _amount, 0, 0, true, ""); - sendDefiRollup(bridgeCallData, _amount); + uint256 bridgeCallData = ROLLUP_ENCODER.defiInteractionL2( + bridgeAddressId, + ethAsset, + emptyAsset, + emptyAsset, + emptyAsset, + 1, + _amount + ); + + ROLLUP_ENCODER.registerEventToBeChecked(bridgeCallData, ROLLUP_ENCODER.getNextNonce(), _amount, 0, 0, true, ""); + ROLLUP_ENCODER.processRollup(); assertEq(DONEE.balance, doneeBalanceBefore + _amount, "Donee did not receive eth"); } @@ -75,7 +83,7 @@ contract DonationBridgeE2ETest is BridgeTestBase { uint8 decimals = token.decimals(); uint256 amount = bound(_amount, 10**decimals, 1e6 * 10**decimals); - if (!isSupportedAsset(address(token))) { + if (!ROLLUP_ENCODER.isSupportedAsset(address(token))) { vm.prank(address(MULTI_SIG)); ROLLUP_PROCESSOR.setSupportedAsset(address(token), 100000); } @@ -84,17 +92,26 @@ contract DonationBridgeE2ETest is BridgeTestBase { uint256 doneeBalanceBefore = token.balanceOf(DONEE); - uint256 bridgeCallData = encodeBridgeCallData( + uint256 bridgeCallData = ROLLUP_ENCODER.defiInteractionL2( bridgeAddressId, - getRealAztecAsset(address(token)), + ROLLUP_ENCODER.getRealAztecAsset(address(token)), emptyAsset, emptyAsset, emptyAsset, - 1 + 1, + amount + ); + + ROLLUP_ENCODER.registerEventToBeChecked( + bridgeCallData, + ROLLUP_ENCODER.getNextNonce(), + _amount, + 0, + 0, + true, + "" ); - vm.expectEmit(true, true, false, true); - emit DefiBridgeProcessed(bridgeCallData, getNextNonce(), amount, 0, 0, true, ""); - sendDefiRollup(bridgeCallData, amount); + ROLLUP_ENCODER.processRollup(); assertEq(token.balanceOf(DONEE), doneeBalanceBefore + amount, "Donee did not receive token"); } @@ -104,11 +121,28 @@ contract DonationBridgeE2ETest is BridgeTestBase { vm.assume(_amount > 0); vm.deal(address(ROLLUP_PROCESSOR), _amount); - uint256 bridgeCallData = encodeBridgeCallData(bridgeAddressId, ethAsset, emptyAsset, emptyAsset, emptyAsset, 2); - vm.expectEmit(true, true, false, true); + uint256 bridgeCallData = ROLLUP_ENCODER.defiInteractionL2( + bridgeAddressId, + ethAsset, + emptyAsset, + emptyAsset, + emptyAsset, + 2, + _amount + ); + bytes memory err = abi.encodePacked(ErrorLib.InvalidAuxData.selector); - emit DefiBridgeProcessed(bridgeCallData, getNextNonce(), _amount, 0, 0, false, err); - sendDefiRollup(bridgeCallData, _amount); + + ROLLUP_ENCODER.registerEventToBeChecked( + bridgeCallData, + ROLLUP_ENCODER.getNextNonce(), + _amount, + 0, + 0, + false, + err + ); + ROLLUP_ENCODER.processRollup(); } function testDonateEthToGasHeavy(uint96 _amount) public { @@ -117,18 +151,28 @@ contract DonationBridgeE2ETest is BridgeTestBase { uint256 doneeId = bridge.listDonee(address(this)); - uint256 bridgeCallData = encodeBridgeCallData( + uint256 bridgeCallData = ROLLUP_ENCODER.defiInteractionL2( bridgeAddressId, ethAsset, emptyAsset, emptyAsset, emptyAsset, - doneeId + uint64(doneeId), + _amount ); - vm.expectEmit(true, true, false, true); + bytes memory err = abi.encodePacked(EthTransferFailed.selector); - emit DefiBridgeProcessed(bridgeCallData, getNextNonce(), _amount, 0, 0, false, err); - sendDefiRollup(bridgeCallData, _amount); + + ROLLUP_ENCODER.registerEventToBeChecked( + bridgeCallData, + ROLLUP_ENCODER.getNextNonce(), + _amount, + 0, + 0, + false, + err + ); + ROLLUP_ENCODER.processRollup(); } function testDonateWrongAsset(uint96 _amount) public { @@ -143,18 +187,26 @@ contract DonationBridgeE2ETest is BridgeTestBase { assetType: AztecTypes.AztecAssetType.VIRTUAL }); - uint256 bridgeCallData = encodeBridgeCallData( + uint256 bridgeCallData = ROLLUP_ENCODER.defiInteractionL2( bridgeAddressId, fakeAsset, emptyAsset, emptyAsset, emptyAsset, - doneeId + uint64(doneeId), + _amount ); - vm.expectEmit(true, true, false, true); bytes memory err = abi.encodePacked(ErrorLib.InvalidInputA.selector); - emit DefiBridgeProcessed(bridgeCallData, getNextNonce(), _amount, 0, 0, false, err); - sendDefiRollup(bridgeCallData, _amount); + ROLLUP_ENCODER.registerEventToBeChecked( + bridgeCallData, + ROLLUP_ENCODER.getNextNonce(), + _amount, + 0, + 0, + false, + err + ); + ROLLUP_ENCODER.processRollup(); } function testInvalidDoneeAddress() public { diff --git a/src/test/bridges/element/Element.t.sol b/src/test/bridges/element/Element.t.sol index 593e8a826..7a8891eef 100644 --- a/src/test/bridges/element/Element.t.sol +++ b/src/test/bridges/element/Element.t.sol @@ -17,7 +17,7 @@ import {IWrappedPosition} from "../../../interfaces/element/IWrappedPosition.sol import {MockDeploymentValidator} from "./MockDeploymentValidator.sol"; import {ErrorLib} from "../../../bridges/base/ErrorLib.sol"; -import {AztecTypes} from "../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; // @dev Note: these tests are deprecated and will be replaced once Element v2 is released contract ElementTest is Test { diff --git a/src/test/bridges/element/aztecmocks/DefiBridgeProxy.sol b/src/test/bridges/element/aztecmocks/DefiBridgeProxy.sol index 62470a598..445b981dc 100644 --- a/src/test/bridges/element/aztecmocks/DefiBridgeProxy.sol +++ b/src/test/bridges/element/aztecmocks/DefiBridgeProxy.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.4; import {IDefiBridge} from "../../../../aztec/interfaces/IDefiBridge.sol"; -import {AztecTypes} from "../../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {TokenTransfers} from "./libraries/TokenTransfers.sol"; contract DefiBridgeProxy { diff --git a/src/test/bridges/element/aztecmocks/RollupProcessor.sol b/src/test/bridges/element/aztecmocks/RollupProcessor.sol index c875b6745..1cc1a53f3 100644 --- a/src/test/bridges/element/aztecmocks/RollupProcessor.sol +++ b/src/test/bridges/element/aztecmocks/RollupProcessor.sol @@ -4,7 +4,7 @@ pragma solidity >=0.8.4; import {IDefiBridge} from "../../../../aztec/interfaces/IDefiBridge.sol"; import {DefiBridgeProxy} from "./DefiBridgeProxy.sol"; -import {AztecTypes} from "../../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {TokenTransfers} from "./libraries/TokenTransfers.sol"; /** diff --git a/src/test/bridges/erc4626/ERC4626.t.sol b/src/test/bridges/erc4626/ERC4626.t.sol index 8eaac5cbe..2bcf72d46 100644 --- a/src/test/bridges/erc4626/ERC4626.t.sol +++ b/src/test/bridges/erc4626/ERC4626.t.sol @@ -2,11 +2,11 @@ // Copyright 2022 Aztec. pragma solidity >=0.8.4; -import {BridgeTestBase} from "./../../aztec/base/BridgeTestBase.sol"; -import {AztecTypes} from "../../../aztec/libraries/AztecTypes.sol"; +import {BridgeTestBase} from "../../aztec/base/BridgeTestBase.sol"; import {IERC20} from "@openzeppelin/contracts/interfaces/IERC20.sol"; import {IERC20Metadata} from "@openzeppelin/contracts/interfaces/IERC20Metadata.sol"; import {IERC4626} from "@openzeppelin/contracts/interfaces/IERC4626.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {ERC4626Bridge} from "../../../bridges/erc4626/ERC4626Bridge.sol"; import {ErrorLib} from "../../../bridges/base/ErrorLib.sol"; import {WETHVault} from "./mocks/WETHVault.sol"; @@ -19,9 +19,9 @@ contract ERC4626Test is BridgeTestBase { 0x3c66B18F67CA6C1A71F829E2F6a0c987f97462d0, // ERC4626-Wrapped Euler WETH (weWETH) 0x20706baA0F89e2dccF48eA549ea5A13B9b30462f, // ERC4626-Wrapped Euler oSQTH (weoSQTH) 0x60897720AA966452e8706e74296B018990aEc527, // ERC4626-Wrapped Euler wstETH (wewstETH) - 0x4169Df1B7820702f566cc10938DA51F6F597d264, // ERC4626-Wrapped Euler DAI (weDAI) - 0xbcb91e0B4Ad56b0d41e0C168E3090361c0039abC, // ERC4626-Wrapped AAVE V2 DAI (wa2DAI) - 0xc21F107933612eCF5677894d45fc060767479A9b // ERC4626-Wrapped AAVE V2 WETH (wa2WETH) + 0x4169Df1B7820702f566cc10938DA51F6F597d264 // ERC4626-Wrapped Euler DAI (weDAI) + // 0xbcb91e0B4Ad56b0d41e0C168E3090361c0039abC, // ERC4626-Wrapped AAVE V2 DAI (wa2DAI) + // 0xc21F107933612eCF5677894d45fc060767479A9b // ERC4626-Wrapped AAVE V2 WETH (wa2WETH) ]; AztecTypes.AztecAsset[] private shares; AztecTypes.AztecAsset[] private assets; @@ -57,8 +57,8 @@ contract ERC4626Test is BridgeTestBase { ROLLUP_PROCESSOR.setSupportedAsset(asset, 30000); vm.stopPrank(); - shares.push(getRealAztecAsset(share)); - assets.push(getRealAztecAsset(asset)); + shares.push(ROLLUP_ENCODER.getRealAztecAsset(share)); + assets.push(ROLLUP_ENCODER.getRealAztecAsset(asset)); // EIP-1087 optimization related mints deal(share, address(bridge), 1); @@ -111,8 +111,17 @@ contract ERC4626Test is BridgeTestBase { bridge.listVault(shares[i].erc20Address); - uint256 bridgeCallData = encodeBridgeCallData(id, assets[i], emptyAsset, shares[i], emptyAsset, 0); - (uint256 outputValueA, uint256 outputValueB, bool isAsync) = sendDefiRollup(bridgeCallData, assetAmount); + uint256 bridgeCallData = ROLLUP_ENCODER.defiInteractionL2( + id, + assets[i], + emptyAsset, + shares[i], + emptyAsset, + 0, + assetAmount + ); + (uint256 outputValueA, uint256 outputValueB, bool isAsync) = ROLLUP_ENCODER + .processRollupAndGetBridgeResult(); assertEq(outputValueA, expectedAmount, "Received amount of shares differs from the expected one"); assertEq(outputValueB, 0, "Non-zero outputValueB"); @@ -126,8 +135,16 @@ contract ERC4626Test is BridgeTestBase { uint256 redeemAmount = bound(_shareAmount, 10, outputValueA); uint256 expectedAssetAmountReturned = IERC4626(shares[i].erc20Address).previewRedeem(redeemAmount); - bridgeCallData = encodeBridgeCallData(id, shares[i], emptyAsset, assets[i], emptyAsset, 1); - (outputValueA, outputValueB, isAsync) = sendDefiRollup(bridgeCallData, redeemAmount); + bridgeCallData = ROLLUP_ENCODER.defiInteractionL2( + id, + shares[i], + emptyAsset, + assets[i], + emptyAsset, + 1, + redeemAmount + ); + (outputValueA, outputValueB, isAsync) = ROLLUP_ENCODER.processRollupAndGetBridgeResult(); assertEq( IERC20(shares[i].erc20Address).balanceOf(address(ROLLUP_PROCESSOR)) + redeemAmount, @@ -150,16 +167,24 @@ contract ERC4626Test is BridgeTestBase { bridge.listVault(wethVault); - AztecTypes.AztecAsset memory shareAsset = getRealAztecAsset(wethVault); - AztecTypes.AztecAsset memory ethAsset = getRealAztecAsset(address(0)); + AztecTypes.AztecAsset memory shareAsset = ROLLUP_ENCODER.getRealAztecAsset(wethVault); + AztecTypes.AztecAsset memory ethAsset = ROLLUP_ENCODER.getRealAztecAsset(address(0)); // Mint ETH to RollupProcessor deal(address(ROLLUP_PROCESSOR), assetAmount); uint256 expectedAmount = IERC4626(shareAsset.erc20Address).previewDeposit(assetAmount); - uint256 bridgeCallData = encodeBridgeCallData(id, ethAsset, emptyAsset, shareAsset, emptyAsset, 0); - (uint256 outputValueA, uint256 outputValueB, bool isAsync) = sendDefiRollup(bridgeCallData, assetAmount); + uint256 bridgeCallData = ROLLUP_ENCODER.defiInteractionL2( + id, + ethAsset, + emptyAsset, + shareAsset, + emptyAsset, + 0, + assetAmount + ); + (uint256 outputValueA, uint256 outputValueB, bool isAsync) = ROLLUP_ENCODER.processRollupAndGetBridgeResult(); assertEq(outputValueA, expectedAmount, "Received amount of shares differs from the expected one"); assertEq(weth.balanceOf(wethVault), assetAmount, "Unexpected vault WETH balance"); @@ -169,8 +194,16 @@ contract ERC4626Test is BridgeTestBase { // Immediately redeem the shares uint256 redeemAmount = outputValueA; - bridgeCallData = encodeBridgeCallData(id, shareAsset, emptyAsset, ethAsset, emptyAsset, 1); - (outputValueA, outputValueB, isAsync) = sendDefiRollup(bridgeCallData, redeemAmount); + bridgeCallData = ROLLUP_ENCODER.defiInteractionL2( + id, + shareAsset, + emptyAsset, + ethAsset, + emptyAsset, + 1, + redeemAmount + ); + (outputValueA, outputValueB, isAsync) = ROLLUP_ENCODER.processRollupAndGetBridgeResult(); assertApproxEqAbs(outputValueA, assetAmount, 2, "Received amount of asset differs from the expected one"); assertEq(weth.balanceOf(wethVault), 0, "Non-zero vault WETH balance"); @@ -192,12 +225,12 @@ contract ERC4626Test is BridgeTestBase { IERC20 weth = IERC20(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); address beneficiary = address(11); - setRollupBeneficiary(beneficiary); + ROLLUP_ENCODER.setRollupBeneficiary(beneficiary); bridge.listVault(wethVault); - AztecTypes.AztecAsset memory ethAsset = getRealAztecAsset(address(0)); - AztecTypes.AztecAsset memory shareAsset = getRealAztecAsset(wethVault); + AztecTypes.AztecAsset memory ethAsset = ROLLUP_ENCODER.getRealAztecAsset(address(0)); + AztecTypes.AztecAsset memory shareAsset = ROLLUP_ENCODER.getRealAztecAsset(wethVault); { // Subsidize deposit @@ -221,8 +254,16 @@ contract ERC4626Test is BridgeTestBase { uint256 expectedAmount = IERC4626(shareAsset.erc20Address).previewDeposit(assetAmount); - uint256 bridgeCallData = encodeBridgeCallData(id, ethAsset, emptyAsset, shareAsset, emptyAsset, 0); - (uint256 outputValueA, uint256 outputValueB, bool isAsync) = sendDefiRollup(bridgeCallData, assetAmount); + uint256 bridgeCallData = ROLLUP_ENCODER.defiInteractionL2( + id, + ethAsset, + emptyAsset, + shareAsset, + emptyAsset, + 0, + assetAmount + ); + (uint256 outputValueA, uint256 outputValueB, bool isAsync) = ROLLUP_ENCODER.processRollupAndGetBridgeResult(); assertEq(outputValueA, expectedAmount, "Received amount of shares differs from the expected one"); assertEq(weth.balanceOf(wethVault), assetAmount, "Unexpected vault WETH balance"); @@ -239,8 +280,16 @@ contract ERC4626Test is BridgeTestBase { uint256 redeemAmount = bound(_shareAmount, 1, outputValueA); uint256 expectedAssetAmountReturned = IERC4626(shareAsset.erc20Address).previewRedeem(redeemAmount); - bridgeCallData = encodeBridgeCallData(id, shareAsset, emptyAsset, ethAsset, emptyAsset, 1); - (outputValueA, outputValueB, isAsync) = sendDefiRollup(bridgeCallData, redeemAmount); + bridgeCallData = ROLLUP_ENCODER.defiInteractionL2( + id, + shareAsset, + emptyAsset, + ethAsset, + emptyAsset, + 1, + redeemAmount + ); + (outputValueA, outputValueB, isAsync) = ROLLUP_ENCODER.processRollupAndGetBridgeResult(); assertEq( IERC20(shareAsset.erc20Address).balanceOf(address(ROLLUP_PROCESSOR)) + redeemAmount, diff --git a/src/test/bridges/example/ExampleE2E.t.sol b/src/test/bridges/example/ExampleE2E.t.sol index 6325a1955..fe33c7023 100644 --- a/src/test/bridges/example/ExampleE2E.t.sol +++ b/src/test/bridges/example/ExampleE2E.t.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.4; import {BridgeTestBase} from "./../../aztec/base/BridgeTestBase.sol"; -import {AztecTypes} from "../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; // Example-specific imports import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; @@ -50,7 +50,7 @@ contract ExampleE2ETest is BridgeTestBase { id = ROLLUP_PROCESSOR.getSupportedBridgesLength(); // Subsidize the bridge when used with USDC and register a beneficiary - AztecTypes.AztecAsset memory usdcAsset = getRealAztecAsset(USDC); + AztecTypes.AztecAsset memory usdcAsset = ROLLUP_ENCODER.getRealAztecAsset(USDC); uint256 criteria = bridge.computeCriteria(usdcAsset, emptyAsset, usdcAsset, emptyAsset, 0); uint32 gasPerMinute = 200; SUBSIDY.subsidize{value: 1 ether}(address(bridge), criteria, gasPerMinute); @@ -58,7 +58,7 @@ contract ExampleE2ETest is BridgeTestBase { SUBSIDY.registerBeneficiary(BENEFICIARY); // Set the rollupBeneficiary on BridgeTestBase so that it gets included in the proofData - setRollupBeneficiary(BENEFICIARY); + ROLLUP_ENCODER.setRollupBeneficiary(BENEFICIARY); } // @dev In order to avoid overflows we set _depositAmount to be uint96 instead of uint256. @@ -67,16 +67,16 @@ contract ExampleE2ETest is BridgeTestBase { vm.warp(block.timestamp + 1 days); // Use the helper function to fetch the support AztecAsset for DAI - AztecTypes.AztecAsset memory usdcAsset = getRealAztecAsset(address(USDC)); + AztecTypes.AztecAsset memory usdcAsset = ROLLUP_ENCODER.getRealAztecAsset(address(USDC)); // Mint the depositAmount of Dai to rollupProcessor deal(USDC, address(ROLLUP_PROCESSOR), _depositAmount); // Computes the encoded data for the specific bridge interaction - uint256 bridgeCallData = encodeBridgeCallData(id, usdcAsset, emptyAsset, usdcAsset, emptyAsset, 0); + ROLLUP_ENCODER.defiInteractionL2(id, usdcAsset, emptyAsset, usdcAsset, emptyAsset, 0, _depositAmount); // Execute the rollup with the bridge interaction. Ensure that event as seen above is emitted. - (uint256 outputValueA, uint256 outputValueB, bool isAsync) = sendDefiRollup(bridgeCallData, _depositAmount); + (uint256 outputValueA, uint256 outputValueB, bool isAsync) = ROLLUP_ENCODER.processRollupAndGetBridgeResult(); // Note: Unlike in unit tests there is no need to manually transfer the tokens - RollupProcessor does this @@ -91,8 +91,10 @@ contract ExampleE2ETest is BridgeTestBase { // Perform a second rollup with half the deposit, perform similar checks. uint256 secondDeposit = _depositAmount / 2; + ROLLUP_ENCODER.defiInteractionL2(id, usdcAsset, emptyAsset, usdcAsset, emptyAsset, 0, secondDeposit); + // Execute the rollup with the bridge interaction. Ensure that event as seen above is emitted. - (outputValueA, outputValueB, isAsync) = sendDefiRollup(bridgeCallData, secondDeposit); + (outputValueA, outputValueB, isAsync) = ROLLUP_ENCODER.processRollupAndGetBridgeResult(); // Check the output values are as expected assertEq(outputValueA, secondDeposit, "outputValueA doesn't equal second deposit"); diff --git a/src/test/bridges/example/ExampleUnit.t.sol b/src/test/bridges/example/ExampleUnit.t.sol index 839472010..fd883b4da 100644 --- a/src/test/bridges/example/ExampleUnit.t.sol +++ b/src/test/bridges/example/ExampleUnit.t.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.4; import {BridgeTestBase} from "./../../aztec/base/BridgeTestBase.sol"; -import {AztecTypes} from "../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; // Example-specific imports import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; @@ -38,7 +38,7 @@ contract ExampleUnitTest is BridgeTestBase { vm.label(address(bridge), "Example Bridge"); // Subsidize the bridge when used with Dai and register a beneficiary - AztecTypes.AztecAsset memory daiAsset = getRealAztecAsset(DAI); + AztecTypes.AztecAsset memory daiAsset = ROLLUP_ENCODER.getRealAztecAsset(DAI); uint256 criteria = bridge.computeCriteria(daiAsset, emptyAsset, daiAsset, emptyAsset, 0); uint32 gasPerMinute = 200; SUBSIDY.subsidize{value: 1 ether}(address(bridge), criteria, gasPerMinute); diff --git a/src/test/bridges/lido/Lido.t.sol b/src/test/bridges/lido/Lido.t.sol index b2fa799a9..8881f4b6a 100644 --- a/src/test/bridges/lido/Lido.t.sol +++ b/src/test/bridges/lido/Lido.t.sol @@ -10,7 +10,7 @@ import {ILido} from "../../../interfaces/lido/ILido.sol"; import {IWstETH} from "../../../interfaces/lido/IWstETH.sol"; import {LidoBridge} from "../../../bridges/lido/LidoBridge.sol"; -import {AztecTypes} from "../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {ErrorLib} from "../../../bridges/base/ErrorLib.sol"; contract LidoTest is BridgeTestBase { @@ -38,8 +38,8 @@ contract LidoTest is BridgeTestBase { ROLLUP_PROCESSOR.setSupportedBridge(address(bridge), 500000); idOut = ROLLUP_PROCESSOR.getSupportedBridgesLength(); - ethAsset = getRealAztecAsset(address(0)); - wstETHAsset = getRealAztecAsset(address(WRAPPED_STETH)); + ethAsset = ROLLUP_ENCODER.getRealAztecAsset(address(0)); + wstETHAsset = ROLLUP_ENCODER.getRealAztecAsset(address(WRAPPED_STETH)); // Prefund to save gas deal(address(WRAPPED_STETH), address(ROLLUP_PROCESSOR), WRAPPED_STETH.balanceOf(address(ROLLUP_PROCESSOR)) + 1); @@ -133,10 +133,26 @@ contract LidoTest is BridgeTestBase { uint256 wstEthIncrease = _computeEthToWST(_depositAmount); - uint256 bridgeCallData = encodeBridgeCallData(idIn, ethAsset, emptyAsset, wstETHAsset, emptyAsset, 0); - vm.expectEmit(true, true, false, true); - emit DefiBridgeProcessed(bridgeCallData, getNextNonce(), _depositAmount, wstEthIncrease, 0, true, ""); - sendDefiRollup(bridgeCallData, _depositAmount); + uint256 bridgeCallData = ROLLUP_ENCODER.defiInteractionL2( + idIn, + ethAsset, + emptyAsset, + wstETHAsset, + emptyAsset, + 0, + _depositAmount + ); + + ROLLUP_ENCODER.registerEventToBeChecked( + bridgeCallData, + ROLLUP_ENCODER.getNextNonce(), + _depositAmount, + wstEthIncrease, + 0, + true, + "" + ); + ROLLUP_ENCODER.processRollup(); assertEq(address(ROLLUP_PROCESSOR).balance, beforeETHBalance - _depositAmount, "ETH balance not matching"); assertEq( @@ -154,10 +170,26 @@ contract LidoTest is BridgeTestBase { uint256 expectedEth = _computeWSTHToEth(_depositAmount); - uint256 bridgeCallData = encodeBridgeCallData(idOut, wstETHAsset, emptyAsset, ethAsset, emptyAsset, 0); - vm.expectEmit(true, true, false, true); - emit DefiBridgeProcessed(bridgeCallData, getNextNonce(), _depositAmount, expectedEth, 0, true, ""); - sendDefiRollup(bridgeCallData, _depositAmount); + uint256 bridgeCallData = ROLLUP_ENCODER.defiInteractionL2( + idOut, + wstETHAsset, + emptyAsset, + ethAsset, + emptyAsset, + 0, + _depositAmount + ); + + ROLLUP_ENCODER.registerEventToBeChecked( + bridgeCallData, + ROLLUP_ENCODER.getNextNonce(), + _depositAmount, + expectedEth, + 0, + true, + "" + ); + ROLLUP_ENCODER.processRollup(); assertEq(address(ROLLUP_PROCESSOR).balance, beforeETHBalance + expectedEth, "ETH balance not maching"); assertEq( diff --git a/src/test/bridges/liquity/StabilityPoolBridgeE2E.t.sol b/src/test/bridges/liquity/StabilityPoolBridgeE2E.t.sol index d16026824..788080684 100644 --- a/src/test/bridges/liquity/StabilityPoolBridgeE2E.t.sol +++ b/src/test/bridges/liquity/StabilityPoolBridgeE2E.t.sol @@ -4,7 +4,7 @@ pragma solidity >=0.8.4; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import {AztecTypes} from "../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {BridgeTestBase} from "./../../aztec/base/BridgeTestBase.sol"; import {ErrorLib} from "../../../bridges/base/ErrorLib.sol"; @@ -55,22 +55,36 @@ contract StabilityPoolBridgeE2ETest is BridgeTestBase { vm.assume(_depositAmount > 1); // Use the helper function to fetch Aztec assets - AztecTypes.AztecAsset memory lusdAsset = getRealAztecAsset(address(LUSD)); - AztecTypes.AztecAsset memory spbAsset = getRealAztecAsset(address(bridge)); + AztecTypes.AztecAsset memory lusdAsset = ROLLUP_ENCODER.getRealAztecAsset(address(LUSD)); + AztecTypes.AztecAsset memory spbAsset = ROLLUP_ENCODER.getRealAztecAsset(address(bridge)); // DEPOSIT // Mint the depositAmount of LUSD to rollupProcessor deal(address(LUSD), address(ROLLUP_PROCESSOR), _depositAmount); // Compute deposit calldata - uint256 bridgeCallData = encodeBridgeCallData(id, lusdAsset, emptyAsset, spbAsset, emptyAsset, 0); + uint256 bridgeCallData = ROLLUP_ENCODER.defiInteractionL2( + id, + lusdAsset, + emptyAsset, + spbAsset, + emptyAsset, + 0, + _depositAmount + ); uint256 stabilityPoolBalanceBefore = LUSD.balanceOf(stabilityPool); - vm.expectEmit(true, true, false, true); - emit DefiBridgeProcessed(bridgeCallData, getNextNonce(), _depositAmount, _depositAmount, 0, true, ""); - - sendDefiRollup(bridgeCallData, _depositAmount); + ROLLUP_ENCODER.registerEventToBeChecked( + bridgeCallData, + ROLLUP_ENCODER.getNextNonce(), + _depositAmount, + _depositAmount, + 0, + true, + "" + ); + ROLLUP_ENCODER.processRollup(); assertGe( LUSD.balanceOf(stabilityPool) - stabilityPoolBalanceBefore, @@ -85,11 +99,11 @@ contract StabilityPoolBridgeE2ETest is BridgeTestBase { // WITHDRAWAL // Compute withdrawal calldata - bridgeCallData = encodeBridgeCallData(id, spbAsset, emptyAsset, lusdAsset, emptyAsset, 0); + ROLLUP_ENCODER.defiInteractionL2(id, spbAsset, emptyAsset, lusdAsset, emptyAsset, 0, _depositAmount); uint256 processorBalanceBefore = LUSD.balanceOf(address(ROLLUP_PROCESSOR)); - (uint256 outputValueA, uint256 outputValueB, ) = sendDefiRollup(bridgeCallData, _depositAmount); + (uint256 outputValueA, uint256 outputValueB, ) = ROLLUP_ENCODER.processRollupAndGetBridgeResult(); assertGe(outputValueA, _depositAmount, "Output value not bigger than deposit"); assertEq(outputValueB, 0, "Output value B is not 0"); diff --git a/src/test/bridges/liquity/StabilityPoolBridgeUnit.t.sol b/src/test/bridges/liquity/StabilityPoolBridgeUnit.t.sol index 12b411aa6..dce5aa783 100644 --- a/src/test/bridges/liquity/StabilityPoolBridgeUnit.t.sol +++ b/src/test/bridges/liquity/StabilityPoolBridgeUnit.t.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.4; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import {AztecTypes} from "../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {ErrorLib} from "../../../bridges/base/ErrorLib.sol"; import {TestUtil} from "./utils/TestUtil.sol"; import {StabilityPoolBridge} from "../../../bridges/liquity/StabilityPoolBridge.sol"; diff --git a/src/test/bridges/liquity/StakingBridgeE2E.t.sol b/src/test/bridges/liquity/StakingBridgeE2E.t.sol index ac28b6f25..5244eb1fc 100644 --- a/src/test/bridges/liquity/StakingBridgeE2E.t.sol +++ b/src/test/bridges/liquity/StakingBridgeE2E.t.sol @@ -4,7 +4,7 @@ pragma solidity >=0.8.4; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import {AztecTypes} from "../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {BridgeTestBase} from "./../../aztec/base/BridgeTestBase.sol"; import {ErrorLib} from "../../../bridges/base/ErrorLib.sol"; @@ -52,22 +52,36 @@ contract StakingBridgeE2ETest is BridgeTestBase { vm.assume(_depositAmount > 1); // Use the helper function to fetch Aztec assets - AztecTypes.AztecAsset memory lqtyAsset = getRealAztecAsset(address(LQTY)); - AztecTypes.AztecAsset memory sbAsset = getRealAztecAsset(address(bridge)); + AztecTypes.AztecAsset memory lqtyAsset = ROLLUP_ENCODER.getRealAztecAsset(address(LQTY)); + AztecTypes.AztecAsset memory sbAsset = ROLLUP_ENCODER.getRealAztecAsset(address(bridge)); // DEPOSIT // Mint the depositAmount of LQTY to rollupProcessor deal(address(LQTY), address(ROLLUP_PROCESSOR), _depositAmount); // Compute deposit calldata - uint256 bridgeCallData = encodeBridgeCallData(id, lqtyAsset, emptyAsset, sbAsset, emptyAsset, 0); + uint256 bridgeCallData = ROLLUP_ENCODER.defiInteractionL2( + id, + lqtyAsset, + emptyAsset, + sbAsset, + emptyAsset, + 0, + _depositAmount + ); uint256 stakingBalanceBefore = LQTY.balanceOf(stakingContract); - vm.expectEmit(true, true, false, true); - emit DefiBridgeProcessed(bridgeCallData, getNextNonce(), _depositAmount, _depositAmount, 0, true, ""); - - sendDefiRollup(bridgeCallData, _depositAmount); + ROLLUP_ENCODER.registerEventToBeChecked( + bridgeCallData, + ROLLUP_ENCODER.getNextNonce(), + _depositAmount, + _depositAmount, + 0, + true, + "" + ); + ROLLUP_ENCODER.processRollup(); assertGe( LQTY.balanceOf(stakingContract) - stakingBalanceBefore, @@ -82,11 +96,11 @@ contract StakingBridgeE2ETest is BridgeTestBase { // WITHDRAWAL // Compute withdrawal calldata - bridgeCallData = encodeBridgeCallData(id, sbAsset, emptyAsset, lqtyAsset, emptyAsset, 0); + ROLLUP_ENCODER.defiInteractionL2(id, sbAsset, emptyAsset, lqtyAsset, emptyAsset, 0, _depositAmount); uint256 processorBalanceBefore = LQTY.balanceOf(address(ROLLUP_PROCESSOR)); - (uint256 outputValueA, uint256 outputValueB, ) = sendDefiRollup(bridgeCallData, _depositAmount); + (uint256 outputValueA, uint256 outputValueB, ) = ROLLUP_ENCODER.processRollupAndGetBridgeResult(); assertGe(outputValueA, _depositAmount, "Output value not bigger than deposit"); assertEq(outputValueB, 0, "Output value B is not 0"); diff --git a/src/test/bridges/liquity/StakingBridgeUnit.t.sol b/src/test/bridges/liquity/StakingBridgeUnit.t.sol index b32c1223f..bb5250766 100644 --- a/src/test/bridges/liquity/StakingBridgeUnit.t.sol +++ b/src/test/bridges/liquity/StakingBridgeUnit.t.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.4; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import {AztecTypes} from "../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {ErrorLib} from "../../../bridges/base/ErrorLib.sol"; import {TestUtil} from "./utils/TestUtil.sol"; import {StakingBridge} from "../../../bridges/liquity/StakingBridge.sol"; diff --git a/src/test/bridges/liquity/TroveBridgeE2E.t.sol b/src/test/bridges/liquity/TroveBridgeE2E.t.sol index 1efba22be..df37c8006 100644 --- a/src/test/bridges/liquity/TroveBridgeE2E.t.sol +++ b/src/test/bridges/liquity/TroveBridgeE2E.t.sol @@ -5,7 +5,7 @@ pragma solidity >=0.8.4; import {Vm} from "forge-std/Vm.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import {AztecTypes} from "../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {BridgeTestBase} from "./../../aztec/base/BridgeTestBase.sol"; import {ErrorLib} from "../../../bridges/base/ErrorLib.sol"; @@ -49,22 +49,22 @@ contract TroveBridgeE2ETest is BridgeTestBase, TroveBridgeTestBase { uint256 collateral = bound(_collateral, 1e17, 1e21); // Use the helper function to fetch Aztec assets - AztecTypes.AztecAsset memory ethAsset = getRealAztecAsset(address(0)); - AztecTypes.AztecAsset memory tbAsset = getRealAztecAsset(address(bridge)); - AztecTypes.AztecAsset memory lusdAsset = getRealAztecAsset(tokens["LUSD"].addr); + AztecTypes.AztecAsset memory ethAsset = ROLLUP_ENCODER.getRealAztecAsset(address(0)); + AztecTypes.AztecAsset memory tbAsset = ROLLUP_ENCODER.getRealAztecAsset(address(bridge)); + AztecTypes.AztecAsset memory lusdAsset = ROLLUP_ENCODER.getRealAztecAsset(tokens["LUSD"].addr); // BORROW // Mint the collateral amount of ETH to rollupProcessor vm.deal(address(ROLLUP_PROCESSOR), collateral); // Compute borrow calldata - uint256 bridgeCallData = encodeBridgeCallData(id, ethAsset, emptyAsset, tbAsset, lusdAsset, MAX_FEE); + ROLLUP_ENCODER.defiInteractionL2(id, ethAsset, emptyAsset, tbAsset, lusdAsset, MAX_FEE, collateral); (uint256 debtBeforeBorrowing, uint256 collBeforeBorrowing, , ) = TROVE_MANAGER.getEntireDebtAndColl( address(bridge) ); - (uint256 outputValueA, uint256 outputValueB, ) = sendDefiRollup(bridgeCallData, collateral); + (uint256 outputValueA, uint256 outputValueB, ) = ROLLUP_ENCODER.processRollupAndGetBridgeResult(); (uint256 debtAfterBorrowing, uint256 collAfterBorrowing, , ) = TROVE_MANAGER.getEntireDebtAndColl( address(bridge) @@ -93,9 +93,9 @@ contract TroveBridgeE2ETest is BridgeTestBase, TroveBridgeTestBase { deal(lusdAsset.erc20Address, address(ROLLUP_PROCESSOR), tbBalanceAfterBorrowing + bridge.DUST()); // Compute repay calldata - bridgeCallData = encodeBridgeCallData(id, tbAsset, lusdAsset, ethAsset, lusdAsset, MAX_FEE); + ROLLUP_ENCODER.defiInteractionL2(id, tbAsset, lusdAsset, ethAsset, lusdAsset, MAX_FEE, tbBalanceAfterBorrowing); - (outputValueA, outputValueB, ) = sendDefiRollup(bridgeCallData, tbBalanceAfterBorrowing); + (outputValueA, outputValueB, ) = ROLLUP_ENCODER.processRollupAndGetBridgeResult(); assertApproxEqAbs(outputValueA, collateral, 1, "output value differs from colalteral by more than 1 wei"); assertEq(outputValueB, 0, "Non-zero LUSD amount returned"); diff --git a/src/test/bridges/liquity/TroveBridgeTestBase.sol b/src/test/bridges/liquity/TroveBridgeTestBase.sol index 55ad1e110..ef2a4f208 100644 --- a/src/test/bridges/liquity/TroveBridgeTestBase.sol +++ b/src/test/bridges/liquity/TroveBridgeTestBase.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.4; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import {AztecTypes} from "../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {ErrorLib} from "../../../bridges/base/ErrorLib.sol"; import {TroveBridge} from "../../../bridges/liquity/TroveBridge.sol"; import {IBorrowerOperations} from "../../../interfaces/liquity/IBorrowerOperations.sol"; diff --git a/src/test/bridges/liquity/TroveBridgeUnit.t.sol b/src/test/bridges/liquity/TroveBridgeUnit.t.sol index 3ba1ba238..9d325fea0 100644 --- a/src/test/bridges/liquity/TroveBridgeUnit.t.sol +++ b/src/test/bridges/liquity/TroveBridgeUnit.t.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.4; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import {AztecTypes} from "../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {ErrorLib} from "../../../bridges/base/ErrorLib.sol"; import {TroveBridge} from "../../../bridges/liquity/TroveBridge.sol"; diff --git a/src/test/bridges/liquity/utils/TestUtil.sol b/src/test/bridges/liquity/utils/TestUtil.sol index eda07c4dc..48f053c1b 100644 --- a/src/test/bridges/liquity/utils/TestUtil.sol +++ b/src/test/bridges/liquity/utils/TestUtil.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.4; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import {AztecTypes} from "../../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {Test} from "forge-std/Test.sol"; import {MockPriceFeed} from "./MockPriceFeed.sol"; diff --git a/src/test/bridges/uniswap/UniswapBridgeE2E.t.sol b/src/test/bridges/uniswap/UniswapBridgeE2E.t.sol index dc53a8643..66768e489 100644 --- a/src/test/bridges/uniswap/UniswapBridgeE2E.t.sol +++ b/src/test/bridges/uniswap/UniswapBridgeE2E.t.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.4; import {BridgeTestBase} from "./../../aztec/base/BridgeTestBase.sol"; -import {AztecTypes} from "../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {ErrorLib} from "../../../bridges/base/ErrorLib.sol"; @@ -75,17 +75,19 @@ contract UniswapBridgeE2ETest is BridgeTestBase { // 000000000000000000000 00000 | 0011110 01 100 10 001 11 | 1000110 01 010 10 001 10 uint64 encodedPath = 0xF323C6546; - address[] memory tokensIn = new address[](1); - tokensIn[0] = LUSD; + { + address[] memory tokensIn = new address[](1); + tokensIn[0] = LUSD; - address[] memory tokensOut = new address[](1); - tokensOut[0] = LQTY; + address[] memory tokensOut = new address[](1); + tokensOut[0] = LQTY; - bridge.preApproveTokens(tokensIn, tokensOut); + bridge.preApproveTokens(tokensIn, tokensOut); + } // Define input and output assets - AztecTypes.AztecAsset memory lusdAsset = getRealAztecAsset(LUSD); - AztecTypes.AztecAsset memory lqtyAsset = getRealAztecAsset(LQTY); + AztecTypes.AztecAsset memory lusdAsset = ROLLUP_ENCODER.getRealAztecAsset(LUSD); + AztecTypes.AztecAsset memory lqtyAsset = ROLLUP_ENCODER.getRealAztecAsset(LQTY); deal(LUSD, address(ROLLUP_PROCESSOR), swapAmount); @@ -95,13 +97,25 @@ contract UniswapBridgeE2ETest is BridgeTestBase { quote += QUOTER.quoteExactInput(referenceSplitPath2, swapAmount - swapAmountSplitPath1); // Computes the encoded data for the specific bridge interaction - uint256 bridgeCallData = encodeBridgeCallData(id, lusdAsset, emptyAsset, lqtyAsset, emptyAsset, encodedPath); - - vm.expectEmit(true, true, false, true); - // Second part of cheatcode, emit the event that we are to match against. - emit DefiBridgeProcessed(bridgeCallData, getNextNonce(), swapAmount, quote, 0, true, ""); - - // Execute the rollup with the bridge interaction. Ensure that event as seen above is emitted. - sendDefiRollup(bridgeCallData, swapAmount); + uint256 bridgeCallData = ROLLUP_ENCODER.defiInteractionL2( + id, + lusdAsset, + emptyAsset, + lqtyAsset, + emptyAsset, + encodedPath, + swapAmount + ); + + ROLLUP_ENCODER.registerEventToBeChecked( + bridgeCallData, + ROLLUP_ENCODER.getNextNonce(), + swapAmount, + quote, + 0, + true, + "" + ); + ROLLUP_ENCODER.processRollup(); } } diff --git a/src/test/bridges/uniswap/UniswapBridgeUnit.t.sol b/src/test/bridges/uniswap/UniswapBridgeUnit.t.sol index dc008ea35..78c2b366a 100644 --- a/src/test/bridges/uniswap/UniswapBridgeUnit.t.sol +++ b/src/test/bridges/uniswap/UniswapBridgeUnit.t.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.4; import {Test} from "forge-std/Test.sol"; -import {AztecTypes} from "../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {ErrorLib} from "../../../bridges/base/ErrorLib.sol"; diff --git a/src/test/bridges/yearn/YearnBridgeE2E.t.sol b/src/test/bridges/yearn/YearnBridgeE2E.t.sol index 1b0265876..5aeada63a 100644 --- a/src/test/bridges/yearn/YearnBridgeE2E.t.sol +++ b/src/test/bridges/yearn/YearnBridgeE2E.t.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.4; import {BridgeTestBase} from "./../../aztec/base/BridgeTestBase.sol"; -import {AztecTypes} from "../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; @@ -56,7 +56,7 @@ contract YearnBridgeE2ETest is BridgeTestBase { uint32 gasPerMinute = 200; SUBSIDY.subsidize{value: 1 ether}(address(bridge), criteria, gasPerMinute); SUBSIDY.registerBeneficiary(BENEFICIARY); - setRollupBeneficiary(BENEFICIARY); + ROLLUP_ENCODER.setRollupBeneficiary(BENEFICIARY); } function testERC20DepositAndWithdrawal(uint256 _depositAmount) public { @@ -144,19 +144,20 @@ contract YearnBridgeE2ETest is BridgeTestBase { // Warp time for the subsidy to accrue vm.warp(block.timestamp + 1 days); - AztecTypes.AztecAsset memory depositInputAssetA = getRealAztecAsset(underlyingToken); - AztecTypes.AztecAsset memory depositOutputAssetA = getRealAztecAsset(address(_vault)); + AztecTypes.AztecAsset memory depositInputAssetA = ROLLUP_ENCODER.getRealAztecAsset(underlyingToken); + AztecTypes.AztecAsset memory depositOutputAssetA = ROLLUP_ENCODER.getRealAztecAsset(address(_vault)); uint256 inputAssetABefore = IERC20(underlyingToken).balanceOf(address(ROLLUP_PROCESSOR)); uint256 outputAssetABefore = IERC20(address(_vault)).balanceOf(address(ROLLUP_PROCESSOR)); // Computes the encoded data for the specific bridge interaction - uint256 bridgeCallData = encodeBridgeCallData( + uint256 bridgeCallData = ROLLUP_ENCODER.defiInteractionL2( depositBridgeId, depositInputAssetA, emptyAsset, depositOutputAssetA, emptyAsset, - 0 + 0, + _depositAmount ); vm.expectEmit(true, true, false, false); //Log 1 -> transfer _depositAmount from ROLLUP_PROCESSOR to bridge emit Transfer(address(ROLLUP_PROCESSOR), address(bridge), _depositAmount); @@ -166,9 +167,17 @@ contract YearnBridgeE2ETest is BridgeTestBase { emit Transfer(address(bridge), address(_vault), _depositAmount); vm.expectEmit(true, true, false, false); //Log 4 -> transfer _receiveAmount from bridge to rollup emit Transfer(address(bridge), address(ROLLUP_PROCESSOR), _depositAmount); - vm.expectEmit(true, true, false, false); //Log 5 -> Validate DefiBridge - emit DefiBridgeProcessed(bridgeCallData, getNextNonce(), _depositAmount, _depositAmount, 0, true, ""); - sendDefiRollup(bridgeCallData, _depositAmount); + + ROLLUP_ENCODER.registerEventToBeChecked( + bridgeCallData, + ROLLUP_ENCODER.getNextNonce(), + _depositAmount, + _depositAmount, + 0, + true, + "" + ); + ROLLUP_ENCODER.processRollup(); uint256 claimableSubsidyAfterDeposit = SUBSIDY.claimableAmount(BENEFICIARY); assertGt(SUBSIDY.claimableAmount(BENEFICIARY), 0, "Claimable was not updated"); @@ -184,13 +193,15 @@ contract YearnBridgeE2ETest is BridgeTestBase { } uint256 withdrawAmount = outputAssetAMid; - bridgeCallData = encodeBridgeCallData( + + bridgeCallData = ROLLUP_ENCODER.defiInteractionL2( withdrawBridgeId, depositOutputAssetA, emptyAsset, depositInputAssetA, emptyAsset, - 1 + 1, + withdrawAmount ); vm.expectEmit(true, true, false, false); //Log 1 -> transfer _withdrawAmount from Rollup to bridge @@ -201,9 +212,17 @@ contract YearnBridgeE2ETest is BridgeTestBase { emit Transfer(address(_vault), address(bridge), withdrawAmount); vm.expectEmit(true, true, false, false); //Log 4 -> transfer _withdrawAmount from bridge to Rollup emit Transfer(address(bridge), address(ROLLUP_PROCESSOR), withdrawAmount); - vm.expectEmit(true, true, false, false); //Log 5 -> Validate DefiBridge - emit DefiBridgeProcessed(bridgeCallData, getNextNonce(), withdrawAmount, withdrawAmount, 1, true, ""); - sendDefiRollup(bridgeCallData, withdrawAmount); + + ROLLUP_ENCODER.registerEventToBeChecked( + bridgeCallData, + ROLLUP_ENCODER.getNextNonce(), + withdrawAmount, + withdrawAmount, + 1, + true, + "" + ); + ROLLUP_ENCODER.processRollup(); uint256 inputAssetAAfter = IERC20(underlyingToken).balanceOf(address(ROLLUP_PROCESSOR)); uint256 outputAssetAAfter = IERC20(address(_vault)).balanceOf(address(ROLLUP_PROCESSOR)); @@ -229,36 +248,38 @@ contract YearnBridgeE2ETest is BridgeTestBase { vm.deal(address(ROLLUP_PROCESSOR), _depositAmount); _addSupportedIfNotAdded(address(_vault)); - AztecTypes.AztecAsset memory depositInputAssetA = getRealAztecAsset(address(0)); - AztecTypes.AztecAsset memory depositOutputAssetA = getRealAztecAsset(address(_vault)); + AztecTypes.AztecAsset memory depositInputAssetA = ROLLUP_ENCODER.getRealAztecAsset(address(0)); + AztecTypes.AztecAsset memory depositOutputAssetA = ROLLUP_ENCODER.getRealAztecAsset(address(_vault)); uint256 inputAssetABefore = address(ROLLUP_PROCESSOR).balance; uint256 outputAssetABefore = IERC20(address(_vault)).balanceOf(address(ROLLUP_PROCESSOR)); - uint256 bridgeCallData = encodeBridgeCallData( + ROLLUP_ENCODER.defiInteractionL2( depositBridgeId, depositInputAssetA, emptyAsset, depositOutputAssetA, emptyAsset, - 0 + 0, + _depositAmount ); - sendDefiRollup(bridgeCallData, _depositAmount); + ROLLUP_ENCODER.processRollup(); uint256 inputAssetAMid = address(ROLLUP_PROCESSOR).balance; uint256 outputAssetAMid = IERC20(address(_vault)).balanceOf(address(ROLLUP_PROCESSOR)); assertEq(inputAssetAMid, inputAssetABefore - _depositAmount, "deposit eth - input asset balance too high"); assertGt(outputAssetAMid, outputAssetABefore, "deposit eth - output asset balance too low"); - uint256 outBridgeId = encodeBridgeCallData( + ROLLUP_ENCODER.defiInteractionL2( withdrawBridgeId, depositOutputAssetA, emptyAsset, depositInputAssetA, emptyAsset, - 1 + 1, + _withdrawAmount ); vm.assume(_withdrawAmount > 1 && _withdrawAmount <= outputAssetAMid); - sendDefiRollup(outBridgeId, _withdrawAmount); + ROLLUP_ENCODER.processRollup(); uint256 inputAssetAAfter = address(ROLLUP_PROCESSOR).balance; uint256 outputAssetAAfter = IERC20(address(_vault)).balanceOf(address(ROLLUP_PROCESSOR)); assertGt(inputAssetAAfter, inputAssetAMid, "withdraw eth - input asset balance too low"); @@ -266,7 +287,7 @@ contract YearnBridgeE2ETest is BridgeTestBase { } function _addSupportedIfNotAdded(address _asset) internal { - if (!isSupportedAsset(_asset)) { + if (!ROLLUP_ENCODER.isSupportedAsset(_asset)) { vm.prank(MULTI_SIG); ROLLUP_PROCESSOR.setSupportedAsset(_asset, 200000); } diff --git a/src/test/bridges/yearn/YearnBridgeE2EApproval.t.sol b/src/test/bridges/yearn/YearnBridgeE2EApproval.t.sol index bce46dbac..4423c7a5c 100644 --- a/src/test/bridges/yearn/YearnBridgeE2EApproval.t.sol +++ b/src/test/bridges/yearn/YearnBridgeE2EApproval.t.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.4; import {BridgeTestBase} from "./../../aztec/base/BridgeTestBase.sol"; -import {AztecTypes} from "../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; diff --git a/src/test/bridges/yearn/YearnUnit.t.sol b/src/test/bridges/yearn/YearnUnit.t.sol index 6027e3570..64f3951b5 100644 --- a/src/test/bridges/yearn/YearnUnit.t.sol +++ b/src/test/bridges/yearn/YearnUnit.t.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.4; import {Test} from "forge-std/Test.sol"; -import {AztecTypes} from "../../../aztec/libraries/AztecTypes.sol"; +import {AztecTypes} from "rollup-encoder/libraries/AztecTypes.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {YearnBridge} from "../../../bridges/yearn/YearnBridge.sol"; import {ErrorLib} from "../../../bridges/base/ErrorLib.sol";