Skip to content

Commit

Permalink
✨ contracts: implement swap proposals
Browse files Browse the repository at this point in the history
co-authored-by: itofarina <[email protected]>
  • Loading branch information
cruzdanilo and itofarina committed Jan 7, 2025
1 parent 8b358da commit 3d4e418
Show file tree
Hide file tree
Showing 6 changed files with 219 additions and 128 deletions.
5 changes: 5 additions & 0 deletions .changeset/long-carpets-fold.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@exactly/plugin": patch
---

✨ implement swap proposals
182 changes: 92 additions & 90 deletions contracts/.gas-snapshot
Original file line number Diff line number Diff line change
@@ -1,90 +1,92 @@
ExaAccountFactoryTest:testFuzz_createAccount_EOAOwners(uint256,address[63]) (runs: 256, μ: 3622088, ~: 3517377)
ExaAccountFactoryTest:test_deploy_deploysToSameAddress() (gas: 25497599)
ExaPluginTest:testFork_crossRepay_repays() (gas: 14850557)
ExaPluginTest:testFork_debitCollateral_collects() (gas: 14939416)
ExaPluginTest:testFork_swap_swaps() (gas: 12120371)
ExaPluginTest:test_borrowAtMaturity_reverts_withUnauthorized_whenReceiverNotCollector() (gas: 408851)
ExaPluginTest:test_borrow_reverts_withUnauthorized_whenReceiverNotCollector() (gas: 408407)
ExaPluginTest:test_collectCredit_collects() (gas: 918642)
ExaPluginTest:test_collectCredit_collects_whenHealthFactorHigherThanOne() (gas: 799244)
ExaPluginTest:test_collectCredit_collects_withEnoughSlippage() (gas: 797913)
ExaPluginTest:test_collectCredit_collects_withPrevIssuerSignature() (gas: 994480)
ExaPluginTest:test_collectCredit_passes_whenProposalLeavesEnoughLiquidity() (gas: 1007617)
ExaPluginTest:test_collectCredit_reverts_asNotKeeper() (gas: 362539)
ExaPluginTest:test_collectCredit_reverts_whenDisagreement() (gas: 555951)
ExaPluginTest:test_collectCredit_reverts_whenExpired() (gas: 358597)
ExaPluginTest:test_collectCredit_reverts_whenHealthFactorLowerThanOne() (gas: 997865)
ExaPluginTest:test_collectCredit_reverts_whenPrevSignatureNotValidAnymore() (gas: 461362)
ExaPluginTest:test_collectCredit_reverts_whenProposalCausesInsufficientLiquidity() (gas: 1007771)
ExaPluginTest:test_collectCredit_reverts_whenReplay() (gas: 840746)
ExaPluginTest:test_collectCredit_reverts_whenTimelocked() (gas: 354765)
ExaPluginTest:test_collectCredit_toleratesTimeDrift() (gas: 801258)
ExaPluginTest:test_collectDebit_collects() (gas: 651480)
ExaPluginTest:test_collectDebit_collects_whenProposalLeavesEnoughLiquidity() (gas: 854845)
ExaPluginTest:test_collectDebit_reverts_asNotKeeper() (gas: 362350)
ExaPluginTest:test_collectDebit_reverts_whenExpired() (gas: 358314)
ExaPluginTest:test_collectDebit_reverts_whenProposalCausesInsufficientLiquidity() (gas: 851733)
ExaPluginTest:test_collectDebit_reverts_whenReplay() (gas: 690788)
ExaPluginTest:test_collectDebit_reverts_whenTimelocked() (gas: 354595)
ExaPluginTest:test_collectDebit_toleratesTimeDrift() (gas: 651576)
ExaPluginTest:test_collectInstallments_collects() (gas: 1336411)
ExaPluginTest:test_collectInstallments_revertsWhenNoSlippage() (gas: 1202776)
ExaPluginTest:test_collectInstallments_reverts_asNotKeeper() (gas: 363391)
ExaPluginTest:test_collectInstallments_reverts_whenExpired() (gas: 360647)
ExaPluginTest:test_collectInstallments_reverts_whenReplay() (gas: 1068213)
ExaPluginTest:test_collectInstallments_reverts_whenTimelocked() (gas: 356936)
ExaPluginTest:test_collectInstallments_toleratesTimeDrift() (gas: 1193002)
ExaPluginTest:test_crossRepay_repays() (gas: 1461705)
ExaPluginTest:test_crossRepay_repays_whenKeeper() (gas: 1458484)
ExaPluginTest:test_crossRepay_reverts_whenDisagreement() (gas: 1571938)
ExaPluginTest:test_crossRepay_reverts_whenNotKeeper() (gas: 958451)
ExaPluginTest:test_debitCollateral_collects() (gas: 774260)
ExaPluginTest:test_exitMarket_reverts() (gas: 388998)
ExaPluginTest:test_marketWithdraw_transfersAsset_asOwner() (gas: 818760)
ExaPluginTest:test_onUninstall_uninstalls() (gas: 284188)
ExaPluginTest:test_poke() (gas: 315843)
ExaPluginTest:test_pokeETH_deposits() (gas: 377813)
ExaPluginTest:test_propose_emitsProposed() (gas: 218628)
ExaPluginTest:test_refund_refunds() (gas: 361573)
ExaPluginTest:test_repay_partiallyRepays() (gas: 1244077)
ExaPluginTest:test_repay_partiallyRepays_whenKeeper() (gas: 1186237)
ExaPluginTest:test_repay_repays() (gas: 1162425)
ExaPluginTest:test_repay_repays_whenKeeper() (gas: 1105079)
ExaPluginTest:test_rollDebt_rolls() (gas: 1231461)
ExaPluginTest:test_rollDebt_rolls_asKeeper() (gas: 1231153)
ExaPluginTest:test_setCollector_emitsCollectorSet() (gas: 40494)
ExaPluginTest:test_setCollector_reverts_whenAddressZero() (gas: 32289)
ExaPluginTest:test_setCollector_reverts_whenNotAdmin() (gas: 33750)
ExaPluginTest:test_setCollector_sets_whenAdmin() (gas: 39884)
ExaPluginTest:test_swap_reverts_withDisagreement() (gas: 288750)
ExaPluginTest:test_swap_swaps() (gas: 268450)
ExaPluginTest:test_withdrawWETH_transfersETH() (gas: 849226)
ExaPluginTest:test_withdraw_reverts_whenNoProposal() (gas: 414919)
ExaPluginTest:test_withdraw_reverts_whenNoProposalKeeper() (gas: 357797)
ExaPluginTest:test_withdraw_reverts_whenNotKeeper() (gas: 354879)
ExaPluginTest:test_withdraw_reverts_whenReceiverIsContractAndMarketNotWETH() (gas: 621183)
ExaPluginTest:test_withdraw_reverts_whenTimelocked() (gas: 307334)
ExaPluginTest:test_withdraw_reverts_whenTimelockedKeeper() (gas: 309092)
ExaPluginTest:test_withdraw_reverts_whenWrongAmount() (gas: 308754)
ExaPluginTest:test_withdraw_reverts_whenWrongMarket() (gas: 308924)
ExaPluginTest:test_withdraw_reverts_whenWrongReceiver() (gas: 308358)
ExaPluginTest:test_withdraw_transfersAsset_asKeeper() (gas: 820063)
ExaPluginTest:test_withdraw_withdrawsProposed() (gas: 810809)
InstallmentsPreviewerTest:test_preview_returns() (gas: 135598)
IssuerCheckerTest:test_setIssuer_emits_IssuerSet() (gas: 70861)
IssuerCheckerTest:test_setIssuer_reverts_whenNotAdmin() (gas: 37272)
IssuerCheckerTest:test_setIssuer_reverts_whenZeroAddress() (gas: 35607)
IssuerCheckerTest:test_setOperationExpiry_emits_OperationExpirySet() (gas: 46864)
IssuerCheckerTest:test_setOperationExpiry_reverts_whenNotAdmin() (gas: 38985)
IssuerCheckerTest:test_setOperationExpiry_reverts_whenZeroValue() (gas: 37451)
IssuerCheckerTest:test_setPrevIssuerWindow_emits_PrevIssuerWindowSet() (gas: 46944)
IssuerCheckerTest:test_setPrevIssuerWindow_reverts_whenNotAdmin() (gas: 39074)
MockSwapperTest:test_swapExactAmountIn_swaps() (gas: 220542)
MockSwapperTest:test_swapExactAmountOut_swaps() (gas: 220669)
RefunderTest:test_refund_refunds() (gas: 242406)
RefunderTest:test_refund_reverts_whenExpired() (gas: 69541)
RefunderTest:test_refund_reverts_whenNotKeeper() (gas: 56909)
RefunderTest:test_refund_reverts_whenReplay() (gas: 279286)
RefunderTest:test_refund_reverts_whenTimelocked() (gas: 63276)
RefunderTest:test_refund_reverts_whenWrongSignature() (gas: 71153)
RefunderTest:test_refund_toleratesTimeDrift() (gas: 242492)
ExaAccountFactoryTest:testFuzz_createAccount_EOAOwners(uint256,address[63]) (runs: 256, μ: 3642465, ~: 3492463)
ExaAccountFactoryTest:test_deploy_deploysToSameAddress() (gas: 26484452)
ExaPluginTest:testFork_crossRepay_repays() (gas: 15361869)
ExaPluginTest:testFork_debitCollateral_collects() (gas: 15450602)
ExaPluginTest:testFork_swap_swaps() (gas: 12628497)
ExaPluginTest:test_borrowAtMaturity_reverts_withUnauthorized_whenReceiverNotCollector() (gas: 406771)
ExaPluginTest:test_borrow_reverts_withUnauthorized_whenReceiverNotCollector() (gas: 406302)
ExaPluginTest:test_collectCredit_collects() (gas: 916148)
ExaPluginTest:test_collectCredit_collects_whenHealthFactorHigherThanOne() (gas: 796747)
ExaPluginTest:test_collectCredit_collects_withEnoughSlippage() (gas: 795273)
ExaPluginTest:test_collectCredit_collects_withPrevIssuerSignature() (gas: 991853)
ExaPluginTest:test_collectCredit_passes_whenProposalLeavesEnoughLiquidity() (gas: 1006901)
ExaPluginTest:test_collectCredit_reverts_asNotKeeper() (gas: 360595)
ExaPluginTest:test_collectCredit_reverts_whenDisagreement() (gas: 553496)
ExaPluginTest:test_collectCredit_reverts_whenExpired() (gas: 356711)
ExaPluginTest:test_collectCredit_reverts_whenHealthFactorLowerThanOne() (gas: 997116)
ExaPluginTest:test_collectCredit_reverts_whenPrevSignatureNotValidAnymore() (gas: 459294)
ExaPluginTest:test_collectCredit_reverts_whenProposalCausesInsufficientLiquidity() (gas: 1007139)
ExaPluginTest:test_collectCredit_reverts_whenReplay() (gas: 837991)
ExaPluginTest:test_collectCredit_reverts_whenTimelocked() (gas: 352867)
ExaPluginTest:test_collectCredit_toleratesTimeDrift() (gas: 798750)
ExaPluginTest:test_collectDebit_collects() (gas: 648853)
ExaPluginTest:test_collectDebit_collects_whenProposalLeavesEnoughLiquidity() (gas: 854068)
ExaPluginTest:test_collectDebit_reverts_asNotKeeper() (gas: 360471)
ExaPluginTest:test_collectDebit_reverts_whenExpired() (gas: 356417)
ExaPluginTest:test_collectDebit_reverts_whenProposalCausesInsufficientLiquidity() (gas: 850960)
ExaPluginTest:test_collectDebit_reverts_whenReplay() (gas: 687870)
ExaPluginTest:test_collectDebit_reverts_whenTimelocked() (gas: 352642)
ExaPluginTest:test_collectDebit_toleratesTimeDrift() (gas: 648883)
ExaPluginTest:test_collectInstallments_collects() (gas: 1333308)
ExaPluginTest:test_collectInstallments_revertsWhenNoSlippage() (gas: 1199635)
ExaPluginTest:test_collectInstallments_reverts_asNotKeeper() (gas: 361534)
ExaPluginTest:test_collectInstallments_reverts_whenExpired() (gas: 358761)
ExaPluginTest:test_collectInstallments_reverts_whenReplay() (gas: 1064964)
ExaPluginTest:test_collectInstallments_reverts_whenTimelocked() (gas: 354994)
ExaPluginTest:test_collectInstallments_toleratesTimeDrift() (gas: 1189922)
ExaPluginTest:test_crossRepay_repays() (gas: 1456999)
ExaPluginTest:test_crossRepay_repays_whenKeeper() (gas: 1453780)
ExaPluginTest:test_crossRepay_reverts_whenDisagreement() (gas: 1567951)
ExaPluginTest:test_crossRepay_reverts_whenNotKeeper() (gas: 955475)
ExaPluginTest:test_debitCollateral_collects() (gas: 770907)
ExaPluginTest:test_exitMarket_reverts() (gas: 387092)
ExaPluginTest:test_marketWithdraw_transfersAsset_asOwner() (gas: 820781)
ExaPluginTest:test_onUninstall_uninstalls() (gas: 290376)
ExaPluginTest:test_poke() (gas: 314155)
ExaPluginTest:test_pokeETH_deposits() (gas: 375819)
ExaPluginTest:test_proposeSwap_emitsSwapProposed() (gas: 380499)
ExaPluginTest:test_propose_emitsProposed() (gas: 220448)
ExaPluginTest:test_refund_refunds() (gas: 360972)
ExaPluginTest:test_repay_partiallyRepays() (gas: 1239253)
ExaPluginTest:test_repay_partiallyRepays_whenKeeper() (gas: 1182051)
ExaPluginTest:test_repay_repays() (gas: 1157853)
ExaPluginTest:test_repay_repays_whenKeeper() (gas: 1101123)
ExaPluginTest:test_rollDebt_rolls() (gas: 1226954)
ExaPluginTest:test_rollDebt_rolls_asKeeper() (gas: 1226624)
ExaPluginTest:test_setCollector_emitsCollectorSet() (gas: 40477)
ExaPluginTest:test_setCollector_reverts_whenAddressZero() (gas: 32143)
ExaPluginTest:test_setCollector_reverts_whenNotAdmin() (gas: 33628)
ExaPluginTest:test_setCollector_sets_whenAdmin() (gas: 39757)
ExaPluginTest:test_swap_reverts_withDisagreement() (gas: 287681)
ExaPluginTest:test_swap_swaps() (gas: 267084)
ExaPluginTest:test_withdraw_reverts_whenNoProposal() (gas: 415373)
ExaPluginTest:test_withdraw_reverts_whenNoProposalKeeper() (gas: 355828)
ExaPluginTest:test_withdraw_reverts_whenNotKeeper() (gas: 353022)
ExaPluginTest:test_withdraw_reverts_whenReceiverIsContractAndMarketNotWETH() (gas: 623448)
ExaPluginTest:test_withdraw_reverts_whenTimelocked() (gas: 311212)
ExaPluginTest:test_withdraw_reverts_whenTimelockedKeeper() (gas: 312816)
ExaPluginTest:test_withdraw_reverts_whenWrongAmount() (gas: 312644)
ExaPluginTest:test_withdraw_reverts_whenWrongMarket() (gas: 312880)
ExaPluginTest:test_withdraw_reverts_whenWrongReceiver() (gas: 312279)
ExaPluginTest:test_withdraw_swapsProposed() (gas: 1590602)
ExaPluginTest:test_withdraw_transfersAsset_asKeeper() (gas: 822239)
ExaPluginTest:test_withdraw_transfersETH() (gas: 850652)
ExaPluginTest:test_withdraw_withdrawsProposed() (gas: 813008)
InstallmentsPreviewerTest:test_preview_returns() (gas: 134970)
IssuerCheckerTest:test_setIssuer_emits_IssuerSet() (gas: 70595)
IssuerCheckerTest:test_setIssuer_reverts_whenNotAdmin() (gas: 37087)
IssuerCheckerTest:test_setIssuer_reverts_whenZeroAddress() (gas: 35466)
IssuerCheckerTest:test_setOperationExpiry_emits_OperationExpirySet() (gas: 46653)
IssuerCheckerTest:test_setOperationExpiry_reverts_whenNotAdmin() (gas: 38890)
IssuerCheckerTest:test_setOperationExpiry_reverts_whenZeroValue() (gas: 37333)
IssuerCheckerTest:test_setPrevIssuerWindow_emits_PrevIssuerWindowSet() (gas: 46687)
IssuerCheckerTest:test_setPrevIssuerWindow_reverts_whenNotAdmin() (gas: 38889)
MockSwapperTest:test_swapExactAmountIn_swaps() (gas: 220282)
MockSwapperTest:test_swapExactAmountOut_swaps() (gas: 220424)
RefunderTest:test_refund_refunds() (gas: 242095)
RefunderTest:test_refund_reverts_whenExpired() (gas: 69299)
RefunderTest:test_refund_reverts_whenNotKeeper() (gas: 56701)
RefunderTest:test_refund_reverts_whenReplay() (gas: 278779)
RefunderTest:test_refund_reverts_whenTimelocked() (gas: 63103)
RefunderTest:test_refund_reverts_whenWrongSignature() (gas: 70935)
RefunderTest:test_refund_toleratesTimeDrift() (gas: 242181)
2 changes: 1 addition & 1 deletion contracts/foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
solc_version = "0.8.28"
evm_version = "cancun"
optimizer = true
optimizer_runs = 200
optimizer_runs = 449
deny_warnings = true
verbosity = 3
isolate = true
Expand Down
Loading

0 comments on commit 3d4e418

Please sign in to comment.