Skip to content

Commit

Permalink
⚡️ contracts: cache weth as immutable
Browse files Browse the repository at this point in the history
  • Loading branch information
cruzdanilo committed Jan 7, 2025
1 parent 18aaa0d commit f40b38a
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 54 deletions.
102 changes: 51 additions & 51 deletions contracts/.gas-snapshot
Original file line number Diff line number Diff line change
@@ -1,75 +1,75 @@
ExaAccountFactoryTest:testFuzz_createAccount_EOAOwners(uint256,address[63]) (runs: 256, μ: 3631040, ~: 3499447)
ExaAccountFactoryTest:test_deploy_deploysToSameAddress() (gas: 25548411)
ExaPluginTest:testFork_crossRepay_repays() (gas: 14881932)
ExaPluginTest:testFork_debitCollateral_collects() (gas: 14970549)
ExaPluginTest:testFork_swap_swaps() (gas: 12152016)
ExaAccountFactoryTest:testFuzz_createAccount_EOAOwners(uint256,address[63]) (runs: 256, μ: 3607899, ~: 3475100)
ExaAccountFactoryTest:test_deploy_deploysToSameAddress() (gas: 25534258)
ExaPluginTest:testFork_crossRepay_repays() (gas: 14869137)
ExaPluginTest:testFork_debitCollateral_collects() (gas: 14957889)
ExaPluginTest:testFork_swap_swaps() (gas: 12139134)
ExaPluginTest:test_borrowAtMaturity_reverts_withUnauthorized_whenReceiverNotCollector() (gas: 408716)
ExaPluginTest:test_borrow_reverts_withUnauthorized_whenReceiverNotCollector() (gas: 408272)
ExaPluginTest:test_collectCredit_collects() (gas: 918497)
ExaPluginTest:test_collectCredit_collects_whenHealthFactorHigherThanOne() (gas: 799126)
ExaPluginTest:test_collectCredit_collects() (gas: 918453)
ExaPluginTest:test_collectCredit_collects_whenHealthFactorHigherThanOne() (gas: 799082)
ExaPluginTest:test_collectCredit_collects_withEnoughSlippage() (gas: 797751)
ExaPluginTest:test_collectCredit_collects_withPrevIssuerSignature() (gas: 994335)
ExaPluginTest:test_collectCredit_passes_whenProposalLeavesEnoughLiquidity() (gas: 1007445)
ExaPluginTest:test_collectCredit_collects_withPrevIssuerSignature() (gas: 994291)
ExaPluginTest:test_collectCredit_passes_whenProposalLeavesEnoughLiquidity() (gas: 1007401)
ExaPluginTest:test_collectCredit_reverts_asNotKeeper() (gas: 362431)
ExaPluginTest:test_collectCredit_reverts_whenDisagreement() (gas: 555816)
ExaPluginTest:test_collectCredit_reverts_whenExpired() (gas: 358555)
ExaPluginTest:test_collectCredit_reverts_whenHealthFactorLowerThanOne() (gas: 997693)
ExaPluginTest:test_collectCredit_reverts_whenPrevSignatureNotValidAnymore() (gas: 461298)
ExaPluginTest:test_collectCredit_reverts_whenProposalCausesInsufficientLiquidity() (gas: 1007599)
ExaPluginTest:test_collectCredit_reverts_whenReplay() (gas: 840672)
ExaPluginTest:test_collectCredit_reverts_whenTimelocked() (gas: 354701)
ExaPluginTest:test_collectCredit_toleratesTimeDrift() (gas: 801140)
ExaPluginTest:test_collectDebit_collects() (gas: 651340)
ExaPluginTest:test_collectDebit_collects_whenProposalLeavesEnoughLiquidity() (gas: 854651)
ExaPluginTest:test_collectCredit_reverts_whenExpired() (gas: 358489)
ExaPluginTest:test_collectCredit_reverts_whenHealthFactorLowerThanOne() (gas: 997649)
ExaPluginTest:test_collectCredit_reverts_whenPrevSignatureNotValidAnymore() (gas: 461254)
ExaPluginTest:test_collectCredit_reverts_whenProposalCausesInsufficientLiquidity() (gas: 1007555)
ExaPluginTest:test_collectCredit_reverts_whenReplay() (gas: 840584)
ExaPluginTest:test_collectCredit_reverts_whenTimelocked() (gas: 354657)
ExaPluginTest:test_collectCredit_toleratesTimeDrift() (gas: 801096)
ExaPluginTest:test_collectDebit_collects() (gas: 651318)
ExaPluginTest:test_collectDebit_collects_whenProposalLeavesEnoughLiquidity() (gas: 854629)
ExaPluginTest:test_collectDebit_reverts_asNotKeeper() (gas: 362242)
ExaPluginTest:test_collectDebit_reverts_whenExpired() (gas: 358250)
ExaPluginTest:test_collectDebit_reverts_whenProposalCausesInsufficientLiquidity() (gas: 851539)
ExaPluginTest:test_collectDebit_reverts_whenReplay() (gas: 690670)
ExaPluginTest:test_collectDebit_reverts_whenTimelocked() (gas: 354509)
ExaPluginTest:test_collectDebit_toleratesTimeDrift() (gas: 651436)
ExaPluginTest:test_collectInstallments_collects() (gas: 1336172)
ExaPluginTest:test_collectInstallments_revertsWhenNoSlippage() (gas: 1202591)
ExaPluginTest:test_collectDebit_reverts_whenExpired() (gas: 358206)
ExaPluginTest:test_collectDebit_reverts_whenProposalCausesInsufficientLiquidity() (gas: 851517)
ExaPluginTest:test_collectDebit_reverts_whenReplay() (gas: 690626)
ExaPluginTest:test_collectDebit_reverts_whenTimelocked() (gas: 354487)
ExaPluginTest:test_collectDebit_toleratesTimeDrift() (gas: 651414)
ExaPluginTest:test_collectInstallments_collects() (gas: 1336195)
ExaPluginTest:test_collectInstallments_revertsWhenNoSlippage() (gas: 1202614)
ExaPluginTest:test_collectInstallments_reverts_asNotKeeper() (gas: 363283)
ExaPluginTest:test_collectInstallments_reverts_whenExpired() (gas: 360538)
ExaPluginTest:test_collectInstallments_reverts_whenReplay() (gas: 1067978)
ExaPluginTest:test_collectInstallments_reverts_whenTimelocked() (gas: 356805)
ExaPluginTest:test_collectInstallments_toleratesTimeDrift() (gas: 1192790)
ExaPluginTest:test_crossRepay_repays() (gas: 1461183)
ExaPluginTest:test_crossRepay_repays_whenKeeper() (gas: 1457962)
ExaPluginTest:test_crossRepay_reverts_whenDisagreement() (gas: 1571612)
ExaPluginTest:test_crossRepay_reverts_whenNotKeeper() (gas: 958306)
ExaPluginTest:test_debitCollateral_collects() (gas: 773668)
ExaPluginTest:test_collectInstallments_reverts_whenExpired() (gas: 360539)
ExaPluginTest:test_collectInstallments_reverts_whenReplay() (gas: 1068024)
ExaPluginTest:test_collectInstallments_reverts_whenTimelocked() (gas: 356828)
ExaPluginTest:test_collectInstallments_toleratesTimeDrift() (gas: 1192813)
ExaPluginTest:test_crossRepay_repays() (gas: 1461226)
ExaPluginTest:test_crossRepay_repays_whenKeeper() (gas: 1458005)
ExaPluginTest:test_crossRepay_reverts_whenDisagreement() (gas: 1571655)
ExaPluginTest:test_crossRepay_reverts_whenNotKeeper() (gas: 958262)
ExaPluginTest:test_debitCollateral_collects() (gas: 773890)
ExaPluginTest:test_exitMarket_reverts() (gas: 388890)
ExaPluginTest:test_marketWithdraw_transfersAsset_asOwner() (gas: 818548)
ExaPluginTest:test_onUninstall_uninstalls() (gas: 284203)
ExaPluginTest:test_marketWithdraw_transfersAsset_asOwner() (gas: 818571)
ExaPluginTest:test_onUninstall_uninstalls() (gas: 284188)
ExaPluginTest:test_poke() (gas: 315735)
ExaPluginTest:test_pokeETH_deposits() (gas: 378892)
ExaPluginTest:test_propose_emitsProposed() (gas: 218551)
ExaPluginTest:test_pokeETH_deposits() (gas: 377705)
ExaPluginTest:test_propose_emitsProposed() (gas: 218574)
ExaPluginTest:test_refund_refunds() (gas: 361573)
ExaPluginTest:test_repay_partiallyRepays() (gas: 1243900)
ExaPluginTest:test_repay_partiallyRepays_whenKeeper() (gas: 1186087)
ExaPluginTest:test_repay_repays() (gas: 1162248)
ExaPluginTest:test_repay_repays_whenKeeper() (gas: 1104929)
ExaPluginTest:test_rollDebt_rolls() (gas: 1231289)
ExaPluginTest:test_repay_partiallyRepays() (gas: 1243834)
ExaPluginTest:test_repay_partiallyRepays_whenKeeper() (gas: 1186021)
ExaPluginTest:test_repay_repays() (gas: 1162182)
ExaPluginTest:test_repay_repays_whenKeeper() (gas: 1104863)
ExaPluginTest:test_rollDebt_rolls() (gas: 1231245)
ExaPluginTest:test_rollDebt_rolls_asKeeper() (gas: 1230937)
ExaPluginTest:test_setCollector_emitsCollectorSet() (gas: 40494)
ExaPluginTest:test_setCollector_reverts_whenAddressZero() (gas: 32289)
ExaPluginTest:test_setCollector_reverts_whenNotAdmin() (gas: 33772)
ExaPluginTest:test_setCollector_sets_whenAdmin() (gas: 39773)
ExaPluginTest:test_setCollector_reverts_whenNotAdmin() (gas: 33750)
ExaPluginTest:test_setCollector_sets_whenAdmin() (gas: 39884)
ExaPluginTest:test_swap_reverts_withDisagreement() (gas: 288696)
ExaPluginTest:test_swap_swaps() (gas: 268369)
ExaPluginTest:test_withdrawWETH_transfersETH() (gas: 851406)
ExaPluginTest:test_withdrawWETH_transfersETH() (gas: 849037)
ExaPluginTest:test_withdraw_reverts_whenNoProposal() (gas: 414784)
ExaPluginTest:test_withdraw_reverts_whenNoProposalKeeper() (gas: 357689)
ExaPluginTest:test_withdraw_reverts_whenNotKeeper() (gas: 354771)
ExaPluginTest:test_withdraw_reverts_whenReceiverIsContractAndMarketNotWETH() (gas: 620971)
ExaPluginTest:test_withdraw_reverts_whenReceiverIsContractAndMarketNotWETH() (gas: 620994)
ExaPluginTest:test_withdraw_reverts_whenTimelocked() (gas: 307253)
ExaPluginTest:test_withdraw_reverts_whenTimelockedKeeper() (gas: 309011)
ExaPluginTest:test_withdraw_reverts_whenWrongAmount() (gas: 308650)
ExaPluginTest:test_withdraw_reverts_whenWrongAmount() (gas: 308673)
ExaPluginTest:test_withdraw_reverts_whenWrongMarket() (gas: 308843)
ExaPluginTest:test_withdraw_reverts_whenWrongReceiver() (gas: 308254)
ExaPluginTest:test_withdraw_transfersAsset_asKeeper() (gas: 819851)
ExaPluginTest:test_withdraw_withdrawsProposed() (gas: 810597)
ExaPluginTest:test_withdraw_reverts_whenWrongReceiver() (gas: 308277)
ExaPluginTest:test_withdraw_transfersAsset_asKeeper() (gas: 819874)
ExaPluginTest:test_withdraw_withdrawsProposed() (gas: 810620)
InstallmentsPreviewerTest:test_preview_returns() (gas: 135598)
IssuerCheckerTest:test_setIssuer_emits_IssuerSet() (gas: 70861)
IssuerCheckerTest:test_setIssuer_reverts_whenNotAdmin() (gas: 37272)
Expand Down
8 changes: 5 additions & 3 deletions contracts/src/ExaPlugin.sol
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import { IPluginExecutor } from "modular-account-libs/interfaces/IPluginExecutor
import { IStandardExecutor } from "modular-account-libs/interfaces/IStandardExecutor.sol";
import { BasePlugin } from "modular-account-libs/plugins/BasePlugin.sol";

import { WETH } from "solady/tokens/WETH.sol";
import { WETH as IWETH } from "solady/tokens/WETH.sol";
import { ECDSA } from "solady/utils/ECDSA.sol";
import { FixedPointMathLib } from "solady/utils/FixedPointMathLib.sol";
import { SafeCastLib } from "solady/utils/SafeCastLib.sol";
Expand Down Expand Up @@ -60,6 +60,7 @@ contract ExaPlugin is AccessControl, BasePlugin, IExaAccount {
bytes32 public constant KEEPER_ROLE = keccak256("KEEPER_ROLE");

IERC20 public immutable USDC;
IWETH public immutable WETH;
address public immutable SWAPPER;
IAuditor public immutable AUDITOR;
IMarket public immutable EXA_USDC;
Expand Down Expand Up @@ -91,6 +92,7 @@ contract ExaPlugin is AccessControl, BasePlugin, IExaAccount {
address firstKeeper
) {
USDC = IERC20(exaUSDC.asset());
WETH = IWETH(payable(exaWETH.asset()));
AUDITOR = auditor;
EXA_USDC = exaUSDC;
EXA_WETH = exaWETH;
Expand Down Expand Up @@ -206,7 +208,7 @@ contract ExaPlugin is AccessControl, BasePlugin, IExaAccount {
}
uint256 amount = proposal.amount;
_executeFromSender(market, 0, abi.encodeCall(IERC4626.withdraw, (amount, address(this), msg.sender)));
WETH(payable(EXA_WETH.asset())).withdraw(amount);
WETH.withdraw(amount);
proposal.receiver.safeTransferETH(amount);
}

Expand Down Expand Up @@ -288,7 +290,7 @@ contract ExaPlugin is AccessControl, BasePlugin, IExaAccount {
}

function pokeETH() external {
_executeFromSender(EXA_WETH.asset(), msg.sender.balance, abi.encodeCall(WETH.deposit, ()));
_executeFromSender(address(WETH), msg.sender.balance, abi.encodeCall(IWETH.deposit, ()));
_poke(EXA_WETH);
}

Expand Down

0 comments on commit f40b38a

Please sign in to comment.