From ffea4b0e244fe81af12d61424314ff90eb6fde8c Mon Sep 17 00:00:00 2001 From: Jean-Grimal Date: Thu, 14 Sep 2023 14:14:29 +0200 Subject: [PATCH] feat: add tx tests --- .../TestTransactionMA3SDAIUSDTListing.json | 6 ++ config/transactions/swapMultisigSigners.json | 6 ++ src/interfaces/IOwnerManager.sol | 1 + test/TestTransactionSetup.sol | 11 ++++ .../TestTransactionMA3SDAIUSDTListing.sol | 63 +------------------ .../TestTransactionSwapMultisigSigners.sol | 26 ++++++++ 6 files changed, 52 insertions(+), 61 deletions(-) create mode 100644 config/transactions/TestTransactionMA3SDAIUSDTListing.json create mode 100644 config/transactions/swapMultisigSigners.json create mode 100644 test/transactions/TestTransactionSwapMultisigSigners.sol diff --git a/config/transactions/TestTransactionMA3SDAIUSDTListing.json b/config/transactions/TestTransactionMA3SDAIUSDTListing.json new file mode 100644 index 0000000..82510cb --- /dev/null +++ b/config/transactions/TestTransactionMA3SDAIUSDTListing.json @@ -0,0 +1,6 @@ +{ + "to" : "0x68d11129a514c45716e55b9771813f117c4c2fa5", + "value" : "0", + "data" : "0x468721a700000000000000000000000040a2accbd92bca938b02010e17a5b8929b49130d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000ac48d80ff0a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000a690033333aea097c193e66081e930c33020272b333330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006461749c9800000000000000000000000083f20f44975d03b1b09e64809b757c47f942beea000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033333aea097c193e66081e930c33020272b333330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004455a98b6800000000000000000000000083f20f44975d03b1b09e64809b757c47f942beea00000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b33333000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000440e42c36300000000000000000000000083f20f44975d03b1b09e64809b757c47f942beea00000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b3333300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044c3ff9c9600000000000000000000000083f20f44975d03b1b09e64809b757c47f942beea00000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b33333000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000447feedb5700000000000000000000000083f20f44975d03b1b09e64809b757c47f942beea00000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b3333300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e43dce1300000000000000000000000083f20f44975d03b1b09e64809b757c47f942beea00000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b33333000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000445594500a00000000000000000000000083f20f44975d03b1b09e64809b757c47f942beea00000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b333330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004473df915f00000000000000000000000083f20f44975d03b1b09e64809b757c47f942beea00000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b333330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006461749c98000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033333aea097c193e66081e930c33020272b333330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004455a98b68000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b33333000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000440e42c363000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b3333300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044c3ff9c96000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b33333000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000441fefed48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b33333000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000447feedb57000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b3333300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e43dce13000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b33333000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000445594500a000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b333330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004473df915f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "operation" : "0" +} \ No newline at end of file diff --git a/config/transactions/swapMultisigSigners.json b/config/transactions/swapMultisigSigners.json new file mode 100644 index 0000000..e1e4bad --- /dev/null +++ b/config/transactions/swapMultisigSigners.json @@ -0,0 +1,6 @@ +{ + "to" : "0xcba28b38103307ec8da98377fff9816c164f9afa", + "value" : "0", + "data" : "0xe318b52b0000000000000000000000003eef885536af3e1ea6e73d6288e3e83cdf1bff5f000000000000000000000000ce1a723b066b2012550fb473558d6de681f8b5f700000000000000000000000069fcefde2b48503d675181448b3d4272128bca9c", + "operation" : "0" +} \ No newline at end of file diff --git a/src/interfaces/IOwnerManager.sol b/src/interfaces/IOwnerManager.sol index 0655326..3c971b9 100644 --- a/src/interfaces/IOwnerManager.sol +++ b/src/interfaces/IOwnerManager.sol @@ -4,4 +4,5 @@ pragma solidity >=0.5.0; interface IOwnerManager { function getThreshold() external view returns (uint256); function getOwners() external view returns (address[] memory); + function isOwner(address owner) external view returns (bool); } diff --git a/test/TestTransactionSetup.sol b/test/TestTransactionSetup.sol index 2e58c49..a0c28e7 100644 --- a/test/TestTransactionSetup.sol +++ b/test/TestTransactionSetup.sol @@ -18,6 +18,17 @@ contract TestTransactionSetup is TestSetup { avatar.enableModule(module); } + function _executeDAOTestTransaction(string memory filename) internal { + // This is so we can just call execTransactionFromModule to simulate executing transactions without signatures. + _addModule(IAvatar(morphoDao), address(this)); + _addModule(IAvatar(operator), address(this)); + + Transaction memory transaction = _getTxData(filename); + + (bool success, ) = transaction.to.call{value: transaction.value}(transaction.data); + require(success, "transaction failed"); + } + function _executeTestTransaction(string memory filename) internal { // This is so we can just call execTransactionFromModule to simulate executing transactions without signatures. _addModule(IAvatar(morphoDao), address(this)); diff --git a/test/transactions/TestTransactionMA3SDAIUSDTListing.sol b/test/transactions/TestTransactionMA3SDAIUSDTListing.sol index 0ebcf6b..c4c05c9 100644 --- a/test/transactions/TestTransactionMA3SDAIUSDTListing.sol +++ b/test/transactions/TestTransactionMA3SDAIUSDTListing.sol @@ -6,75 +6,16 @@ import {Operation} from "src/libraries/Types.sol"; import "test/TestTransactionSetup.sol"; contract TestTransactionMA3SDAIUSDTListing is TestTransactionSetup { - IMulticall internal constant multicall = IMulticall(0x40A2aCCbd92BCA938b02010E17A5b8929b49130D); address internal constant S_DAI = 0x83F20F44975D03b1b09e64809B757c47f942BEeA; - address internal constant A_S_DAI = 0x4C612E3B15b96Ff9A6faED838F8d07d479a8dD4c; address internal constant USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7; - address internal constant A_S_DAI_HOLDER = 0x66B870dDf78c975af5Cd8EDC6De25eca81791DE1; function setUp() public virtual override { super.setUp(); - - // Cannot set as collateral in current iteration of aave with 0 collateral balance - vm.prank(A_S_DAI_HOLDER); - Token(A_S_DAI).transfer(address(morphoAaveV3), 1 ether); - - // The encoded calls of all the transactions - bytes[] memory transactions = _buildTransactions(); - // The data to use in the multisend - bytes memory multisendData = _concatMultisendTx("", address(morphoAaveV3), 0, transactions); - vm.prank(address(delayModifier)); - morphoAdmin.execTransactionFromModule(address(multicall), 0, multisendData, Operation.DelegateCall); - } - - function _concatMultisendTx(bytes memory data, address to, uint256 value, bytes[] memory transactions) - internal - pure - returns (bytes memory) - { - for (uint256 i; i < transactions.length; i++) { - data = bytes.concat(data, _buildMultisendTx(to, value, transactions[i])); - } - return abi.encodeCall(multicall.multiSend, (data)); - } - - function _buildMultisendTx(address to, uint256 value, bytes memory transaction) - internal - pure - returns (bytes memory data) - { - return abi.encodePacked(uint8(0), to, value, transaction.length, transaction); - } - - function _buildTransactions() internal view returns (bytes[] memory transactions) { - transactions = new bytes[](18); - { - transactions[0] = abi.encodeCall(morphoAaveV3.createMarket, (S_DAI, 0, 0)); - transactions[1] = abi.encodeCall(morphoAaveV3.setAssetIsCollateralOnPool, (S_DAI, true)); - transactions[2] = abi.encodeCall(morphoAaveV3.setAssetIsCollateral, (S_DAI, true)); - transactions[3] = abi.encodeCall(morphoAaveV3.setIsSupplyPaused, (S_DAI, true)); - transactions[4] = abi.encodeCall(morphoAaveV3.setIsWithdrawPaused, (S_DAI, true)); - transactions[5] = abi.encodeCall(morphoAaveV3.setIsBorrowPaused, (S_DAI, true)); - transactions[6] = abi.encodeCall(morphoAaveV3.setIsRepayPaused, (S_DAI, true)); - transactions[7] = abi.encodeCall(morphoAaveV3.setIsLiquidateBorrowPaused, (S_DAI, true)); - transactions[8] = abi.encodeCall(morphoAaveV3.setIsP2PDisabled, (S_DAI, true)); - } - - { - transactions[9] = abi.encodeCall(morphoAaveV3.createMarket, (USDT, 0, 0)); - transactions[10] = abi.encodeCall(morphoAaveV3.setAssetIsCollateralOnPool, (USDT, true)); - transactions[11] = abi.encodeCall(morphoAaveV3.setAssetIsCollateral, (USDT, true)); - transactions[12] = abi.encodeCall(morphoAaveV3.setIsSupplyPaused, (USDT, true)); - transactions[13] = abi.encodeCall(morphoAaveV3.setIsWithdrawPaused, (USDT, true)); - transactions[14] = abi.encodeCall(morphoAaveV3.setIsBorrowPaused, (USDT, true)); - transactions[15] = abi.encodeCall(morphoAaveV3.setIsRepayPaused, (USDT, true)); - transactions[16] = abi.encodeCall(morphoAaveV3.setIsLiquidateBorrowPaused, (USDT, true)); - transactions[17] = abi.encodeCall(morphoAaveV3.setIsP2PDisabled, (USDT, true)); - } + _executeTestTransaction("TestTransactionMA3SDAIUSDTListing"); } function _forkBlockNumber() internal virtual override returns (uint256) { - return 18_035_438; + return 18127500; } function testAssertionsOfTransaction() public virtual { diff --git a/test/transactions/TestTransactionSwapMultisigSigners.sol b/test/transactions/TestTransactionSwapMultisigSigners.sol new file mode 100644 index 0000000..eb592a1 --- /dev/null +++ b/test/transactions/TestTransactionSwapMultisigSigners.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +import "test/TestTransactionSetup.sol"; +import "src/interfaces/IOwnerManager.sol"; + +import {Ownable2Step} from "@openzeppelin-contracts/contracts/access/Ownable2Step.sol"; + +contract TestTransactionSwapMultisigSigners is TestTransactionSetup { + address internal constant oldOwner = 0xcE1A723B066B2012550fb473558D6de681F8b5f7; + address internal constant newOwner = 0x69FcEFDe2B48503d675181448B3D4272128bca9c; + + function setUp() public virtual override { + super.setUp(); + _executeDAOTestTransaction("swapMultisigSigners"); + } + + function _forkBlockNumber() internal virtual override returns (uint256) { + return 18127500; + } + + function testAssertionsOfTransaction() public virtual { + assertTrue(morphoDao.isOwner(newOwner)); + assertFalse(morphoDao.isOwner(oldOwner)); + } +}