From c15d7f38d9934f84eafa9579c629caedd97f3171 Mon Sep 17 00:00:00 2001 From: 0xmikko <26343374+0xmikko@users.noreply.github.com> Date: Thu, 14 Sep 2023 21:52:20 +0200 Subject: [PATCH] fix: addCollateral fix --- contracts/credit/CreditFacade.sol | 17 ++--- contracts/interfaces/ICreditFacade.sol | 7 +- contracts/test/credit/CreditFacadeGas.t.sol | 71 +++++++++++++++++++++ 3 files changed, 77 insertions(+), 18 deletions(-) create mode 100644 contracts/test/credit/CreditFacadeGas.t.sol diff --git a/contracts/credit/CreditFacade.sol b/contracts/credit/CreditFacade.sol index c8acb88..63d7b5a 100644 --- a/contracts/credit/CreditFacade.sol +++ b/contracts/credit/CreditFacade.sol @@ -120,7 +120,7 @@ contract CreditFacade is ICreditFacade, ReentrancyGuard { uint256 internal totalBorrowedInBlock; /// @dev Contract version - uint256 public constant override version = 2_10; + uint256 public constant override version = 2_20; /// @dev Restricts actions for users with opened credit accounts only modifier creditConfiguratorOnly() { @@ -996,23 +996,16 @@ contract CreditFacade is ICreditFacade, ReentrancyGuard { // // ADD COLLATERAL // - else if (method == ICreditFacade.addCollateral.selector) { + else if (method == ICreditFacadeExtended.addCollateral.selector) { // Parses parameters from calldata - (address onBehalfOf, address token, uint256 amount) = abi.decode( + (address token, uint256 amount) = abi.decode( callData[4:], - (address, address, uint256) + (address, uint256) ); // F:[FA-26, 27] // In case onBehalfOf isn't the owner of the currently processed account, // retrieves onBehalfOf's account - addCollateral( - onBehalfOf, - onBehalfOf == borrower - ? creditAccount - : creditManager.getCreditAccountOrRevert(onBehalfOf), - token, - amount - ); // F:[FA-26, 27] + addCollateral(msg.sender, creditAccount, token, amount); // F:[FA-26, 27] } // // INCREASE DEBT diff --git a/contracts/interfaces/ICreditFacade.sol b/contracts/interfaces/ICreditFacade.sol index e71dc7b..1fcfc3f 100644 --- a/contracts/interfaces/ICreditFacade.sol +++ b/contracts/interfaces/ICreditFacade.sol @@ -28,14 +28,9 @@ interface ICreditFacadeExtended { function disableToken(address token) external; /// @dev Adds collateral to borrower's credit account - /// @param onBehalfOf Address of the borrower whose account is funded /// @param token Address of a collateral token /// @param amount Amount to add - function addCollateral( - address onBehalfOf, - address token, - uint256 amount - ) external payable; + function addCollateral(address token, uint256 amount) external payable; /// @dev Increases debt for msg.sender's Credit Account /// - Borrows the requested amount from the pool diff --git a/contracts/test/credit/CreditFacadeGas.t.sol b/contracts/test/credit/CreditFacadeGas.t.sol new file mode 100644 index 0000000..f8f3dae --- /dev/null +++ b/contracts/test/credit/CreditFacadeGas.t.sol @@ -0,0 +1,71 @@ +// SPDX-License-Identifier: UNLICENSED +// Gearbox Protocol. Generalized leverage for DeFi protocols +// (c) Gearbox Holdings, 2022 +pragma solidity ^0.8.10; + +import { IDataCompressor } from "../../interfaces/IDataCompressor.sol"; + +import { ICreditFacade, ICreditFacadeExtended } from "../../interfaces/ICreditFacade.sol"; +import { ICreditManagerV2, ICreditManagerV2Events, ClosureAction } from "../../interfaces/ICreditManagerV2.sol"; +import { ICreditFacadeEvents, ICreditFacadeExceptions } from "../../interfaces/ICreditFacade.sol"; +import { IDegenNFT, IDegenNFTExceptions } from "../../interfaces/IDegenNFT.sol"; +import { IBlacklistHelper } from "../../interfaces/IBlacklistHelper.sol"; + +// DATA +import { MultiCall, MultiCallOps } from "../../libraries/MultiCall.sol"; +import { Balance } from "../../libraries/Balances.sol"; + +import { CreditFacadeMulticaller, CreditFacadeCalls } from "../../multicall/CreditFacadeCalls.sol"; + +// CONSTANTS + +import { LEVERAGE_DECIMALS } from "../../libraries/Constants.sol"; +import { PERCENTAGE_FACTOR } from "../../libraries/PercentageMath.sol"; + +// TESTS + +import "../lib/constants.sol"; +import { BalanceHelper } from "../helpers/BalanceHelper.sol"; +import { CreditFacadeTestHelper } from "../helpers/CreditFacadeTestHelper.sol"; + +// EXCEPTIONS +import { ZeroAddressException } from "../../interfaces/IErrors.sol"; +import { ICreditManagerV2Exceptions } from "../../interfaces/ICreditManagerV2.sol"; + +// MOCKS +import { AdapterMock } from "../mocks/adapters/AdapterMock.sol"; +import { TargetContractMock } from "../mocks/adapters/TargetContractMock.sol"; +import { ERC20BlacklistableMock } from "../mocks/token/ERC20Blacklistable.sol"; + +// SUITES +import { TokensTestSuite } from "../suites/TokensTestSuite.sol"; +import { Tokens } from "../config/Tokens.sol"; +import { CreditFacadeTestSuite } from "../suites/CreditFacadeTestSuite.sol"; +import { CreditConfig } from "../config/CreditConfig.sol"; +import { Test } from "forge-std/Test.sol"; + +uint256 constant WETH_TEST_AMOUNT = 5 * WAD; +uint16 constant REFERRAL_CODE = 23; + +/// @title CreditFacadeTest +/// @notice Designed for unit test purposes only +contract CreditFacadeGasTest is Test { + address ap = 0xcF64698AFF7E5f27A11dff868AF228653ba53be0; + IContractRegister cr; + + ICreditFacade cf; + ICreditManagerV2 cm; + ICreditConfigurator cc; + + constructor() Test() { + cr = IContractRegister(IAddressProvider(ap).getContractsRegister()); + } + + modifier allCMs() { + address[] memory cms = cr.getCreditManagers(); + } + + function setUp() public {} + + function test_gas_all_tokens() public allCMs {} +}