Skip to content

Commit

Permalink
feat: add tx tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Jean-Grimal committed Sep 14, 2023
1 parent 398001c commit ffea4b0
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 61 deletions.
6 changes: 6 additions & 0 deletions config/transactions/TestTransactionMA3SDAIUSDTListing.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"to" : "0x68d11129a514c45716e55b9771813f117c4c2fa5",
"value" : "0",
"data" : "0x468721a700000000000000000000000040a2accbd92bca938b02010e17a5b8929b49130d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000ac48d80ff0a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000a690033333aea097c193e66081e930c33020272b333330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006461749c9800000000000000000000000083f20f44975d03b1b09e64809b757c47f942beea000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033333aea097c193e66081e930c33020272b333330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004455a98b6800000000000000000000000083f20f44975d03b1b09e64809b757c47f942beea00000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b33333000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000440e42c36300000000000000000000000083f20f44975d03b1b09e64809b757c47f942beea00000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b3333300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044c3ff9c9600000000000000000000000083f20f44975d03b1b09e64809b757c47f942beea00000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b33333000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000447feedb5700000000000000000000000083f20f44975d03b1b09e64809b757c47f942beea00000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b3333300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e43dce1300000000000000000000000083f20f44975d03b1b09e64809b757c47f942beea00000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b33333000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000445594500a00000000000000000000000083f20f44975d03b1b09e64809b757c47f942beea00000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b333330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004473df915f00000000000000000000000083f20f44975d03b1b09e64809b757c47f942beea00000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b333330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006461749c98000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033333aea097c193e66081e930c33020272b333330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004455a98b68000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b33333000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000440e42c363000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b3333300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044c3ff9c96000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b33333000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000441fefed48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b33333000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000447feedb57000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b3333300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e43dce13000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b33333000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000445594500a000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000000010033333aea097c193e66081e930c33020272b333330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004473df915f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"operation" : "0"
}
6 changes: 6 additions & 0 deletions config/transactions/swapMultisigSigners.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"to" : "0xcba28b38103307ec8da98377fff9816c164f9afa",
"value" : "0",
"data" : "0xe318b52b0000000000000000000000003eef885536af3e1ea6e73d6288e3e83cdf1bff5f000000000000000000000000ce1a723b066b2012550fb473558d6de681f8b5f700000000000000000000000069fcefde2b48503d675181448b3d4272128bca9c",
"operation" : "0"
}
1 change: 1 addition & 0 deletions src/interfaces/IOwnerManager.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
11 changes: 11 additions & 0 deletions test/TestTransactionSetup.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand Down
63 changes: 2 additions & 61 deletions test/transactions/TestTransactionMA3SDAIUSDTListing.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
26 changes: 26 additions & 0 deletions test/transactions/TestTransactionSwapMultisigSigners.sol
Original file line number Diff line number Diff line change
@@ -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));
}
}

0 comments on commit ffea4b0

Please sign in to comment.