Repository: pcaversaccio/snekmate (language: python)

Issue:
♻️ Remove `increase_allowance` and `decrease_allowance` from `ERC20` and `ERC4626`
See https://github.com/OpenZeppelin/openzeppelin-contracts/issues/4583. We should remove the functions `increase_allowance` and `decrease_allowance` from the `ERC20` and `ERC4626` contracts as they only solve an imaginary problem and could be used to bypass spending restrictions in smart contract wallets. The reason I added it firsthand was to be consistent with the OpenZeppelin/Solady implementations to avoid any confusion. The PR that implements this change requires a `CHANGELOG` entry.


Discussion / hints:

Fix patch:
diff --git a/.gas-snapshot b/.gas-snapshot
index 5f2f260c..9e679450 100644
--- a/.gas-snapshot
+++ b/.gas-snapshot
@@ -60,8 +60,8 @@ BatchDistributorTest:testDistributeTokenMultipleAddressesSuccess() (gas: 651164)
 BatchDistributorTest:testDistributeTokenOneAddressSuccess() (gas: 613487)
 BatchDistributorTest:testDistributeTokenRevertWithInsufficientAllowance() (gas: 609238)
 BatchDistributorTest:testDistributeTokenRevertWithInsufficientBalance() (gas: 610013)
-BatchDistributorTest:testFuzzDistributeEtherMultipleAddressesSuccess(((address,uint256)[]),uint256) (runs: 256, μ: 1783563, ~: 1661222)
-BatchDistributorTest:testFuzzDistributeTokenMultipleAddressesSuccess(((address,uint256)[]),address,uint256) (runs: 256, μ: 1356473, ~: 1320461)
+BatchDistributorTest:testFuzzDistributeEtherMultipleAddressesSuccess(((address,uint256)[]),uint256) (runs: 256, μ: 1767929, ~: 1660472)
+BatchDistributorTest:testFuzzDistributeTokenMultipleAddressesSuccess(((address,uint256)[]),address,uint256) (runs: 256, μ: 1356666, ~: 1320461)
 Create2AddressTest:testComputeAddress() (gas: 586317)
 Create2AddressTest:testComputeAddressSelf() (gas: 594617)
 Create2AddressTest:testFuzzComputeAddress(bytes32,address) (runs: 256, μ: 586912, ~: 586912)
@@ -87,26 +87,26 @@ CreateAddressTest:testComputeAddressSelfNonceUint56() (gas: 574095)
 CreateAddressTest:testComputeAddressSelfNonceUint64() (gas: 574212)
 CreateAddressTest:testComputeAddressSelfNonceUint8() (gas: 573818)
 CreateAddressTest:testComputeAddressSelfRevertTooHighNonce() (gas: 8821)
-CreateAddressTest:testFuzzComputeAddressNonce0x7f(uint64,address) (runs: 256, μ: 573288, ~: 573443)
-CreateAddressTest:testFuzzComputeAddressNonceUint16(uint64,address) (runs: 256, μ: 572767, ~: 572908)
-CreateAddressTest:testFuzzComputeAddressNonceUint24(uint64,address) (runs: 256, μ: 572922, ~: 573034)
-CreateAddressTest:testFuzzComputeAddressNonceUint32(uint64,address) (runs: 256, μ: 572895, ~: 573041)
-CreateAddressTest:testFuzzComputeAddressNonceUint40(uint64,address) (runs: 256, μ: 573035, ~: 573133)
-CreateAddressTest:testFuzzComputeAddressNonceUint48(uint64,address) (runs: 256, μ: 573017, ~: 573117)
-CreateAddressTest:testFuzzComputeAddressNonceUint56(uint64,address) (runs: 256, μ: 573036, ~: 573146)
-CreateAddressTest:testFuzzComputeAddressNonceUint64(uint64,address) (runs: 256, μ: 573050, ~: 573250)
-CreateAddressTest:testFuzzComputeAddressNonceUint8(uint64,address) (runs: 256, μ: 572815, ~: 572908)
-CreateAddressTest:testFuzzComputeAddressRevertTooHighNonce(uint256,address) (runs: 256, μ: 13371, ~: 13348)
-CreateAddressTest:testFuzzComputeAddressSelfNonce0x7f(uint64) (runs: 256, μ: 579150, ~: 579259)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint16(uint64) (runs: 256, μ: 578384, ~: 578295)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint24(uint64) (runs: 256, μ: 578652, ~: 578749)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint32(uint64) (runs: 256, μ: 578741, ~: 578845)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint40(uint64) (runs: 256, μ: 578743, ~: 578829)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint48(uint64) (runs: 256, μ: 578791, ~: 578903)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint56(uint64) (runs: 256, μ: 578879, ~: 578973)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint64(uint64) (runs: 256, μ: 578952, ~: 579103)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint8(uint64) (runs: 256, μ: 578462, ~: 578540)
-CreateAddressTest:testFuzzComputeAddressSelfRevertTooHighNonce(uint256) (runs: 256, μ: 13179, ~: 13164)
+CreateAddressTest:testFuzzComputeAddressNonce0x7f(uint64,address) (runs: 256, μ: 573282, ~: 573443)
+CreateAddressTest:testFuzzComputeAddressNonceUint16(uint64,address) (runs: 256, μ: 572766, ~: 572908)
+CreateAddressTest:testFuzzComputeAddressNonceUint24(uint64,address) (runs: 256, μ: 572924, ~: 573034)
+CreateAddressTest:testFuzzComputeAddressNonceUint32(uint64,address) (runs: 256, μ: 572912, ~: 573041)
+CreateAddressTest:testFuzzComputeAddressNonceUint40(uint64,address) (runs: 256, μ: 573027, ~: 573133)
+CreateAddressTest:testFuzzComputeAddressNonceUint48(uint64,address) (runs: 256, μ: 573001, ~: 573117)
+CreateAddressTest:testFuzzComputeAddressNonceUint56(uint64,address) (runs: 256, μ: 573034, ~: 573146)
+CreateAddressTest:testFuzzComputeAddressNonceUint64(uint64,address) (runs: 256, μ: 573057, ~: 573250)
+CreateAddressTest:testFuzzComputeAddressNonceUint8(uint64,address) (runs: 256, μ: 572801, ~: 572908)
+CreateAddressTest:testFuzzComputeAddressRevertTooHighNonce(uint256,address) (runs: 256, μ: 13382, ~: 13348)
+CreateAddressTest:testFuzzComputeAddressSelfNonce0x7f(uint64) (runs: 256, μ: 579151, ~: 579259)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint16(uint64) (runs: 256, μ: 578398, ~: 578548)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint24(uint64) (runs: 256, μ: 578642, ~: 578749)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint32(uint64) (runs: 256, μ: 578744, ~: 578845)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint40(uint64) (runs: 256, μ: 578746, ~: 578829)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint48(uint64) (runs: 256, μ: 578788, ~: 578903)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint56(uint64) (runs: 256, μ: 578883, ~: 578973)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint64(uint64) (runs: 256, μ: 578942, ~: 579103)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint8(uint64) (runs: 256, μ: 578459, ~: 578540)
+CreateAddressTest:testFuzzComputeAddressSelfRevertTooHighNonce(uint256) (runs: 256, μ: 13198, ~: 13164)
 ECDSATest:testEthSignedMessageHash() (gas: 5852)
 ECDSATest:testFuzzEthSignedMessageHash(string) (runs: 256, μ: 6442, ~: 6444)
 ECDSATest:testFuzzRecoverWithInvalidSignature(bytes,string) (runs: 256, μ: 15157, ~: 15158)
@@ -266,101 +266,84 @@ ERC1155Test:testUriBaseAndTokenUriNotSet() (gas: 2897051)
 ERC1155Test:testUriBaseAndTokenUriSet() (gas: 65815)
 ERC1155Test:testUriNoBaseURI() (gas: 2947288)
 ERC1155Test:testUriNoTokenUri() (gas: 17650)
-ERC20Invariants:invariantOwner() (runs: 256, calls: 3840, reverts: 3093)
-ERC20Invariants:invariantTotalSupply() (runs: 256, calls: 3840, reverts: 3093)
-ERC20Test:testApproveExceedingBalanceCase1() (gas: 40445)
+ERC20Invariants:invariantOwner() (runs: 256, calls: 3840, reverts: 3382)
+ERC20Invariants:invariantTotalSupply() (runs: 256, calls: 3840, reverts: 3382)
+ERC20Test:testApproveExceedingBalanceCase1() (gas: 40511)
 ERC20Test:testApproveExceedingBalanceCase2() (gas: 47054)
-ERC20Test:testApproveFromZeroAddress() (gas: 13367)
-ERC20Test:testApproveSuccessCase1() (gas: 43376)
-ERC20Test:testApproveSuccessCase2() (gas: 49978)
+ERC20Test:testApproveFromZeroAddress() (gas: 13433)
+ERC20Test:testApproveSuccessCase1() (gas: 43265)
+ERC20Test:testApproveSuccessCase2() (gas: 49890)
 ERC20Test:testApproveToZeroAddress() (gas: 16777)
-ERC20Test:testBalanceOf() (gas: 17938)
-ERC20Test:testBurnFromExceedingBalance() (gas: 31553)
-ERC20Test:testBurnFromFromZeroAddress() (gas: 15865)
-ERC20Test:testBurnFromInsufficientAllowanceCase1() (gas: 42213)
-ERC20Test:testBurnFromInsufficientAllowanceCase2() (gas: 42244)
-ERC20Test:testBurnFromSuccessCase1() (gas: 40056)
-ERC20Test:testBurnFromSuccessCase2() (gas: 65653)
-ERC20Test:testBurnFromUnlimitedAllowance() (gas: 50335)
-ERC20Test:testBurnFromZeroAddress() (gas: 11651)
-ERC20Test:testBurnInvalidAmount() (gas: 14855)
-ERC20Test:testBurnSuccessCase1() (gas: 25618)
-ERC20Test:testBurnSuccessCase2() (gas: 31183)
-ERC20Test:testCachedDomainSeparator() (gas: 8118)
-ERC20Test:testDecreaseAllowanceExceedingBalanceCase1() (gas: 47600)
-ERC20Test:testDecreaseAllowanceExceedingBalanceCase2() (gas: 33833)
-ERC20Test:testDecreaseAllowanceFromZeroAddress() (gas: 15721)
-ERC20Test:testDecreaseAllowanceInvalidAmountCase1() (gas: 15695)
-ERC20Test:testDecreaseAllowanceInvalidAmountCase2() (gas: 47436)
-ERC20Test:testDecreaseAllowanceSuccessCase1() (gas: 50429)
-ERC20Test:testDecreaseAllowanceSuccessCase2() (gas: 36089)
-ERC20Test:testDecreaseAllowanceToZeroAddress() (gas: 18977)
-ERC20Test:testDomainSeparator() (gas: 11857)
-ERC20Test:testEIP712Domain() (gas: 14645)
-ERC20Test:testFuzzApproveSuccess(address,uint256) (runs: 256, μ: 39804, ~: 40660)
-ERC20Test:testFuzzBurnFromInsufficientAllowance(address,uint256,uint8) (runs: 256, μ: 179306, ~: 179692)
-ERC20Test:testFuzzBurnFromSuccess(address,uint256) (runs: 256, μ: 288573, ~: 289579)
-ERC20Test:testFuzzBurnInvalidAmount(address,uint256) (runs: 256, μ: 16781, ~: 16781)
-ERC20Test:testFuzzBurnSuccessCase(uint256) (runs: 256, μ: 264167, ~: 263960)
-ERC20Test:testFuzzDecreaseAllowanceInvalidAmount(address,uint256,uint256) (runs: 256, μ: 41263, ~: 43051)
-ERC20Test:testFuzzDecreaseAllowanceSuccess(address,uint256,uint256) (runs: 256, μ: 47277, ~: 47794)
-ERC20Test:testFuzzDomainSeparator(uint8) (runs: 256, μ: 12026, ~: 12048)
-ERC20Test:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 20362, ~: 20324)
-ERC20Test:testFuzzIncreaseAllowanceSuccess(address,uint256) (runs: 256, μ: 44189, ~: 44844)
-ERC20Test:testFuzzMintNonMinter(string,uint256) (runs: 256, μ: 13565, ~: 13579)
-ERC20Test:testFuzzMintSuccess(string,uint256) (runs: 256, μ: 55016, ~: 56197)
-ERC20Test:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 46353, ~: 46386)
-ERC20Test:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 71581, ~: 71616)
-ERC20Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 14413, ~: 14413)
-ERC20Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 49205, ~: 49189)
-ERC20Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 16206, ~: 16224)
-ERC20Test:testFuzzSetMinterSuccess(string) (runs: 256, μ: 34072, ~: 34066)
-ERC20Test:testFuzzTransferFromInsufficientAllowance(address,address,uint256,uint8) (runs: 256, μ: 177519, ~: 178111)
-ERC20Test:testFuzzTransferFromSuccess(address,address,uint256) (runs: 256, μ: 205604, ~: 206680)
-ERC20Test:testFuzzTransferInvalidAmount(address,address,uint256) (runs: 256, μ: 17083, ~: 17083)
-ERC20Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14534, ~: 14534)
-ERC20Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 75303, ~: 75278)
-ERC20Test:testFuzzTransferSuccess(address,uint256) (runs: 256, μ: 177096, ~: 177781)
-ERC20Test:testHasOwner() (gas: 9847)
-ERC20Test:testIncreaseAllowanceExceedingBalanceCase1() (gas: 40691)
-ERC20Test:testIncreaseAllowanceExceedingBalanceCase2() (gas: 47514)
-ERC20Test:testIncreaseAllowanceFromZeroAddress() (gas: 15711)
-ERC20Test:testIncreaseAllowanceSuccessCase1() (gas: 43599)
-ERC20Test:testIncreaseAllowanceSuccessCase2() (gas: 50436)
-ERC20Test:testIncreaseAllowanceToZeroAddress() (gas: 19055)
-ERC20Test:testInitialSetup() (gas: 1516692)
-ERC20Test:testMintNonMinter() (gas: 13035)
-ERC20Test:testMintOverflow() (gas: 17291)
-ERC20Test:testMintSuccess() (gas: 51693)
-ERC20Test:testMintToZeroAddress() (gas: 16013)
-ERC20Test:testPermitBadChainId() (gas: 44442)
-ERC20Test:testPermitBadNonce() (gas: 41748)
-ERC20Test:testPermitExpiredDeadline() (gas: 18332)
-ERC20Test:testPermitOtherSignature() (gas: 42798)
-ERC20Test:testPermitReplaySignature() (gas: 75114)
-ERC20Test:testPermitSuccess() (gas: 70506)
-ERC20Test:testRenounceOwnershipNonOwner() (gas: 11312)
-ERC20Test:testRenounceOwnershipSuccess() (gas: 22852)
-ERC20Test:testSetMinterNonOwner() (gas: 13030)
-ERC20Test:testSetMinterRemoveOwnerAddress() (gas: 14083)
-ERC20Test:testSetMinterSuccess() (gas: 33811)
-ERC20Test:testSetMinterToZeroAddress() (gas: 16102)
-ERC20Test:testTotalSupply() (gas: 8673)
-ERC20Test:testTransferFromExceedingBalance() (gas: 32979)
-ERC20Test:testTransferFromFromZeroAddress() (gas: 17992)
-ERC20Test:testTransferFromInsufficientAllowanceCase1() (gas: 43892)
-ERC20Test:testTransferFromInsufficientAllowanceCase2() (gas: 43989)
-ERC20Test:testTransferFromSuccess() (gas: 61140)
-ERC20Test:testTransferFromToZeroAddress() (gas: 33008)
-ERC20Test:testTransferFromUnlimitedAllowance() (gas: 71236)
-ERC20Test:testTransferFromZeroAddress() (gas: 20171)
-ERC20Test:testTransferInvalidAmount() (gas: 15641)
-ERC20Test:testTransferOwnershipNonOwner() (gas: 13099)
-ERC20Test:testTransferOwnershipSuccess() (gas: 53822)
-ERC20Test:testTransferOwnershipToZeroAddress() (gas: 16052)
+ERC20Test:testBalanceOf() (gas: 18005)
+ERC20Test:testBurnFromExceedingBalance() (gas: 31587)
+ERC20Test:testBurnFromFromZeroAddress() (gas: 15863)
+ERC20Test:testBurnFromInsufficientAllowanceCase1() (gas: 42167)
+ERC20Test:testBurnFromInsufficientAllowanceCase2() (gas: 42198)
+ERC20Test:testBurnFromSuccessCase1() (gas: 40032)
+ERC20Test:testBurnFromSuccessCase2() (gas: 65585)
+ERC20Test:testBurnFromUnlimitedAllowance() (gas: 50333)
+ERC20Test:testBurnFromZeroAddress() (gas: 11583)
+ERC20Test:testBurnInvalidAmount() (gas: 14809)
+ERC20Test:testBurnSuccessCase1() (gas: 25594)
+ERC20Test:testBurnSuccessCase2() (gas: 31159)
+ERC20Test:testCachedDomainSeparator() (gas: 8050)
+ERC20Test:testDomainSeparator() (gas: 11810)
+ERC20Test:testEIP712Domain() (gas: 14508)
+ERC20Test:testFuzzApproveSuccess(address,uint256) (runs: 256, μ: 39869, ~: 40725)
+ERC20Test:testFuzzBurnFromInsufficientAllowance(address,uint256,uint8) (runs: 256, μ: 179473, ~: 179672)
+ERC20Test:testFuzzBurnFromSuccess(address,uint256) (runs: 256, μ: 288467, ~: 289427)
+ERC20Test:testFuzzBurnInvalidAmount(address,uint256) (runs: 256, μ: 16713, ~: 16713)
+ERC20Test:testFuzzBurnSuccessCase(uint256) (runs: 256, μ: 264073, ~: 263852)
+ERC20Test:testFuzzDomainSeparator(uint8) (runs: 256, μ: 12025, ~: 12046)
+ERC20Test:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 20233, ~: 20194)
+ERC20Test:testFuzzMintNonMinter(string,uint256) (runs: 256, μ: 13516, ~: 13533)
+ERC20Test:testFuzzMintSuccess(string,uint256) (runs: 256, μ: 55156, ~: 56084)
+ERC20Test:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 46246, ~: 46272)
+ERC20Test:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 71493, ~: 71524)
+ERC20Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 14389, ~: 14389)
+ERC20Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 49113, ~: 49098)
+ERC20Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 16162, ~: 16178)
+ERC20Test:testFuzzSetMinterSuccess(string) (runs: 256, μ: 33984, ~: 33977)
+ERC20Test:testFuzzTransferFromInsufficientAllowance(address,address,uint256,uint8) (runs: 256, μ: 177691, ~: 178146)
+ERC20Test:testFuzzTransferFromSuccess(address,address,uint256) (runs: 256, μ: 205734, ~: 206974)
+ERC20Test:testFuzzTransferInvalidAmount(address,address,uint256) (runs: 256, μ: 17039, ~: 17039)
+ERC20Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14488, ~: 14488)
+ERC20Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 75212, ~: 75187)
+ERC20Test:testFuzzTransferSuccess(address,uint256) (runs: 256, μ: 177081, ~: 177764)
+ERC20Test:testHasOwner() (gas: 9869)
+ERC20Test:testInitialSetup() (gas: 1439526)
+ERC20Test:testMintNonMinter() (gas: 12944)
+ERC20Test:testMintOverflow() (gas: 17267)
+ERC20Test:testMintSuccess() (gas: 51669)
+ERC20Test:testMintToZeroAddress() (gas: 15922)
+ERC20Test:testPermitBadChainId() (gas: 44308)
+ERC20Test:testPermitBadNonce() (gas: 41634)
+ERC20Test:testPermitExpiredDeadline() (gas: 18240)
+ERC20Test:testPermitOtherSignature() (gas: 42728)
+ERC20Test:testPermitReplaySignature() (gas: 74954)
+ERC20Test:testPermitSuccess() (gas: 70348)
+ERC20Test:testRenounceOwnershipNonOwner() (gas: 11266)
+ERC20Test:testRenounceOwnershipSuccess() (gas: 22850)
+ERC20Test:testSetMinterNonOwner() (gas: 13049)
+ERC20Test:testSetMinterRemoveOwnerAddress() (gas: 14037)
+ERC20Test:testSetMinterSuccess() (gas: 33702)
+ERC20Test:testSetMinterToZeroAddress() (gas: 16034)
+ERC20Test:testTotalSupply() (gas: 8738)
+ERC20Test:testTransferFromExceedingBalance() (gas: 32961)
+ERC20Test:testTransferFromFromZeroAddress() (gas: 18014)
+ERC20Test:testTransferFromInsufficientAllowanceCase1() (gas: 43936)
+ERC20Test:testTransferFromInsufficientAllowanceCase2() (gas: 43945)
+ERC20Test:testTransferFromSuccess() (gas: 61157)
+ERC20Test:testTransferFromToZeroAddress() (gas: 33025)
+ERC20Test:testTransferFromUnlimitedAllowance() (gas: 71291)
+ERC20Test:testTransferFromZeroAddress() (gas: 20190)
+ERC20Test:testTransferInvalidAmount() (gas: 15663)
+ERC20Test:testTransferOwnershipNonOwner() (gas: 13031)
+ERC20Test:testTransferOwnershipSuccess() (gas: 53753)
+ERC20Test:testTransferOwnershipToZeroAddress() (gas: 16006)
 ERC20Test:testTransferSuccess() (gas: 42497)
 ERC20Test:testTransferToZeroAddress() (gas: 16699)
-ERC20Test:testTransferZeroTokens() (gas: 24582)
+ERC20Test:testTransferZeroTokens() (gas: 24670)
 ERC2981Invariants:invariantOwner() (runs: 256, calls: 3840, reverts: 3840)
 ERC2981Test:testDeleteDefaultRoyaltyNonOwner() (gas: 10604)
 ERC2981Test:testFuzzDeleteDefaultRoyaltyNonOwner(address) (runs: 256, μ: 13338, ~: 13338)
@@ -405,66 +388,66 @@ ERC2981Test:testSupportsInterfaceSuccessGasCost() (gas: 6361)
 ERC2981Test:testTransferOwnershipNonOwner() (gas: 12772)
 ERC2981Test:testTransferOwnershipSuccess() (gas: 22189)
 ERC2981Test:testTransferOwnershipToZeroAddress() (gas: 15680)
-ERC4626VaultInvariants:invariantTotalAssets() (runs: 256, calls: 3840, reverts: 2931)
-ERC4626VaultInvariants:invariantTotalSupply() (runs: 256, calls: 3840, reverts: 2931)
-ERC4626VaultTest:testCachedDomainSeparator() (gas: 7981)
-ERC4626VaultTest:testDepositInsufficientAllowance() (gas: 82945)
-ERC4626VaultTest:testDepositWithNoApproval() (gas: 25247)
-ERC4626VaultTest:testDepositZero() (gas: 38615)
-ERC4626VaultTest:testDomainSeparator() (gas: 11854)
-ERC4626VaultTest:testEIP712Domain() (gas: 14391)
-ERC4626VaultTest:testEmptyVaultDeposit() (gas: 566255)
-ERC4626VaultTest:testEmptyVaultMint() (gas: 567674)
-ERC4626VaultTest:testEmptyVaultRedeem() (gas: 203551)
-ERC4626VaultTest:testEmptyVaultwithdraw() (gas: 215496)
-ERC4626VaultTest:testFail_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 559422, ~: 562152)
-ERC4626VaultTest:testFail_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 561074, ~: 563958)
-ERC4626VaultTest:testFuzzDomainSeparator(uint8) (runs: 256, μ: 11870, ~: 11892)
-ERC4626VaultTest:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 20026, ~: 19993)
-ERC4626VaultTest:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 46009, ~: 46043)
-ERC4626VaultTest:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 71223, ~: 71258)
-ERC4626VaultTest:testInitialSetup() (gas: 5843513)
-ERC4626VaultTest:testMintWithNoApproval() (gas: 25329)
-ERC4626VaultTest:testMintZero() (gas: 38774)
-ERC4626VaultTest:testMultipleMintDepositRedeemWithdraw() (gas: 373378)
-ERC4626VaultTest:testPermitBadChainId() (gas: 44249)
-ERC4626VaultTest:testPermitBadNonce() (gas: 41482)
-ERC4626VaultTest:testPermitExpiredDeadline() (gas: 18064)
-ERC4626VaultTest:testPermitOtherSignature() (gas: 42575)
-ERC4626VaultTest:testPermitReplaySignature() (gas: 74678)
-ERC4626VaultTest:testPermitSuccess() (gas: 70185)
-ERC4626VaultTest:testRedeemInsufficientShares() (gas: 132260)
-ERC4626VaultTest:testRedeemWithNoShares() (gas: 14016)
-ERC4626VaultTest:testSingleDepositWithdraw() (gas: 177421)
-ERC4626VaultTest:testSingleMintRedeem() (gas: 176339)
-ERC4626VaultTest:testVaultInteractionsForSomeoneElse() (gas: 223980)
-ERC4626VaultTest:testWithdrawInsufficientAllowance() (gas: 123421)
-ERC4626VaultTest:testWithdrawInsufficientAssets() (gas: 118716)
-ERC4626VaultTest:testWithdrawWithNoAssets() (gas: 21915)
-ERC4626VaultTest:test_RT_deposit_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 475165, ~: 479361)
-ERC4626VaultTest:test_RT_deposit_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 476685, ~: 480981)
-ERC4626VaultTest:test_RT_mint_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 476056, ~: 479639)
-ERC4626VaultTest:test_RT_mint_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 477229, ~: 481422)
-ERC4626VaultTest:test_RT_redeem_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 476175, ~: 479840)
-ERC4626VaultTest:test_RT_redeem_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 476331, ~: 479766)
-ERC4626VaultTest:test_RT_withdraw_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 477361, ~: 481449)
-ERC4626VaultTest:test_RT_withdraw_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 477859, ~: 481750)
-ERC4626VaultTest:test_asset((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 425574, ~: 429693)
-ERC4626VaultTest:test_convertToAssets((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 432364, ~: 435265)
-ERC4626VaultTest:test_convertToShares((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 431280, ~: 435060)
-ERC4626VaultTest:test_deposit((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 472868, ~: 475260)
-ERC4626VaultTest:test_maxDeposit((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 425882, ~: 430000)
-ERC4626VaultTest:test_maxMint((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 425962, ~: 430080)
-ERC4626VaultTest:test_maxRedeem((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 426188, ~: 430305)
-ERC4626VaultTest:test_maxWithdraw((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 427679, ~: 431874)
-ERC4626VaultTest:test_mint((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 473491, ~: 475731)
-ERC4626VaultTest:test_previewDeposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 467410, ~: 471787)
-ERC4626VaultTest:test_previewMint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 468802, ~: 472162)
-ERC4626VaultTest:test_previewRedeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 470788, ~: 474036)
-ERC4626VaultTest:test_previewWithdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473900, ~: 475897)
-ERC4626VaultTest:test_redeem((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 476099, ~: 478427)
-ERC4626VaultTest:test_totalAssets((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 426428, ~: 430544)
-ERC4626VaultTest:test_withdraw((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 478062, ~: 479709)
+ERC4626VaultInvariants:invariantTotalAssets() (runs: 256, calls: 3840, reverts: 3287)
+ERC4626VaultInvariants:invariantTotalSupply() (runs: 256, calls: 3840, reverts: 3287)
+ERC4626VaultTest:testCachedDomainSeparator() (gas: 7935)
+ERC4626VaultTest:testDepositInsufficientAllowance() (gas: 82899)
+ERC4626VaultTest:testDepositWithNoApproval() (gas: 25201)
+ERC4626VaultTest:testDepositZero() (gas: 38477)
+ERC4626VaultTest:testDomainSeparator() (gas: 11808)
+ERC4626VaultTest:testEIP712Domain() (gas: 14299)
+ERC4626VaultTest:testEmptyVaultDeposit() (gas: 565335)
+ERC4626VaultTest:testEmptyVaultMint() (gas: 566754)
+ERC4626VaultTest:testEmptyVaultRedeem() (gas: 202631)
+ERC4626VaultTest:testEmptyVaultwithdraw() (gas: 214576)
+ERC4626VaultTest:testFail_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 559737, ~: 561922)
+ERC4626VaultTest:testFail_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 561379, ~: 563361)
+ERC4626VaultTest:testFuzzDomainSeparator(uint8) (runs: 256, μ: 11825, ~: 11846)
+ERC4626VaultTest:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 19938, ~: 19901)
+ERC4626VaultTest:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 45912, ~: 45882)
+ERC4626VaultTest:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 71127, ~: 71166)
+ERC4626VaultTest:testInitialSetup() (gas: 5610030)
+ERC4626VaultTest:testMintWithNoApproval() (gas: 25283)
+ERC4626VaultTest:testMintZero() (gas: 38636)
+ERC4626VaultTest:testMultipleMintDepositRedeemWithdraw() (gas: 371906)
+ERC4626VaultTest:testPermitBadChainId() (gas: 44203)
+ERC4626VaultTest:testPermitBadNonce() (gas: 41390)
+ERC4626VaultTest:testPermitExpiredDeadline() (gas: 17972)
+ERC4626VaultTest:testPermitOtherSignature() (gas: 42483)
+ERC4626VaultTest:testPermitReplaySignature() (gas: 74540)
+ERC4626VaultTest:testPermitSuccess() (gas: 70093)
+ERC4626VaultTest:testRedeemInsufficientShares() (gas: 132168)
+ERC4626VaultTest:testRedeemWithNoShares() (gas: 13970)
+ERC4626VaultTest:testSingleDepositWithdraw() (gas: 177127)
+ERC4626VaultTest:testSingleMintRedeem() (gas: 176044)
+ERC4626VaultTest:testVaultInteractionsForSomeoneElse() (gas: 223833)
+ERC4626VaultTest:testWithdrawInsufficientAllowance() (gas: 123348)
+ERC4626VaultTest:testWithdrawInsufficientAssets() (gas: 118642)
+ERC4626VaultTest:testWithdrawWithNoAssets() (gas: 21869)
+ERC4626VaultTest:test_RT_deposit_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474937, ~: 479042)
+ERC4626VaultTest:test_RT_deposit_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 477019, ~: 480804)
+ERC4626VaultTest:test_RT_mint_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 475930, ~: 479642)
+ERC4626VaultTest:test_RT_mint_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 477463, ~: 480989)
+ERC4626VaultTest:test_RT_redeem_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 475798, ~: 479616)
+ERC4626VaultTest:test_RT_redeem_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 476112, ~: 479591)
+ERC4626VaultTest:test_RT_withdraw_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 477653, ~: 481235)
+ERC4626VaultTest:test_RT_withdraw_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 477655, ~: 481492)
+ERC4626VaultTest:test_asset((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424650, ~: 429636)
+ERC4626VaultTest:test_convertToAssets((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 432219, ~: 435116)
+ERC4626VaultTest:test_convertToShares((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 431044, ~: 434890)
+ERC4626VaultTest:test_deposit((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 472788, ~: 475076)
+ERC4626VaultTest:test_maxDeposit((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424921, ~: 429906)
+ERC4626VaultTest:test_maxMint((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 425001, ~: 429986)
+ERC4626VaultTest:test_maxRedeem((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 425227, ~: 430211)
+ERC4626VaultTest:test_maxWithdraw((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 426725, ~: 431805)
+ERC4626VaultTest:test_mint((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 472971, ~: 475462)
+ERC4626VaultTest:test_previewDeposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 467439, ~: 471568)
+ERC4626VaultTest:test_previewMint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 468428, ~: 472004)
+ERC4626VaultTest:test_previewRedeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 470935, ~: 473732)
+ERC4626VaultTest:test_previewWithdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473859, ~: 475636)
+ERC4626VaultTest:test_redeem((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 476250, ~: 478336)
+ERC4626VaultTest:test_totalAssets((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 425467, ~: 430450)
+ERC4626VaultTest:test_withdraw((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 477668, ~: 479534)
 ERC721Invariants:invariantOwner() (runs: 256, calls: 3840, reverts: 3501)
 ERC721Invariants:invariantTotalSupply() (runs: 256, calls: 3840, reverts: 3501)
 ERC721Test:testApproveClearingApprovalWithNoPriorApproval() (gas: 178016)
@@ -672,8 +655,8 @@ SignatureCheckerTest:testEOAWithInvalidSignature2() (gas: 21072)
 SignatureCheckerTest:testEOAWithInvalidSigner() (gas: 20523)
 SignatureCheckerTest:testEOAWithTooHighSValue() (gas: 18128)
 SignatureCheckerTest:testEOAWithValidSignature() (gas: 19622)
-SignatureCheckerTest:testFuzzEIP1271WithInvalidSigner(string,string) (runs: 256, μ: 35963, ~: 35972)
+SignatureCheckerTest:testFuzzEIP1271WithInvalidSigner(string,string) (runs: 256, μ: 35956, ~: 35972)
 SignatureCheckerTest:testFuzzEIP1271WithValidSignature(string) (runs: 256, μ: 34508, ~: 34510)
 SignatureCheckerTest:testFuzzEOAWithInvalidSignature(bytes,string) (runs: 256, μ: 16927, ~: 16922)
-SignatureCheckerTest:testFuzzEOAWithInvalidSigner(string,string) (runs: 256, μ: 21603, ~: 21603)
-SignatureCheckerTest:testFuzzEOAWithValidSignature(string,string) (runs: 256, μ: 20718, ~: 20718)
\ No newline at end of file
+SignatureCheckerTest:testFuzzEOAWithInvalidSigner(string,string) (runs: 256, μ: 21597, ~: 21603)
+SignatureCheckerTest:testFuzzEOAWithValidSignature(string,string) (runs: 256, μ: 20712, ~: 20718)
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8c97430b..864824f9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,8 +9,12 @@
 
 ### ♻️ Refactoring
 
+- **Extensions**
+  - [`ERC4626`](https://github.com/pcaversaccio/snekmate/blob/v0.0.3/src/extensions/ERC4626.vy): Remove the non-standard `increase_allowance` and `decrease_allowance` functions. ([#160](https://github.com/pcaversaccio/snekmate/pull/160))
 - **Tokens**
-  - [`ERC20`](https://github.com/pcaversaccio/snekmate/blob/v0.0.3/src/tokens/ERC20.vy): Optimise the `set_minter` function to save one `SLOAD`. ([#154](https://github.com/pcaversaccio/snekmate/pull/154))
+  - [`ERC20`](https://github.com/pcaversaccio/snekmate/blob/v0.0.3/src/tokens/ERC20.vy):
+    - Optimise the `set_minter` function to save one `SLOAD`. ([#154](https://github.com/pcaversaccio/snekmate/pull/154))
+    - Remove the non-standard `increase_allowance` and `decrease_allowance` functions. ([#160](https://github.com/pcaversaccio/snekmate/pull/160))
   - [`ERC721`](https://github.com/pcaversaccio/snekmate/blob/v0.0.3/src/tokens/ERC721.vy): Optimise the `set_minter` function to save one `SLOAD`. ([#154](https://github.com/pcaversaccio/snekmate/pull/154))
   - [`ERC1155`](https://github.com/pcaversaccio/snekmate/blob/v0.0.3/src/tokens/ERC1155.vy): Optimise the `set_minter` function to save one `SLOAD`. ([#154](https://github.com/pcaversaccio/snekmate/pull/154))
 - **Utility Functions**
diff --git a/lib/openzeppelin-contracts b/lib/openzeppelin-contracts
index 98b83dfb..9ef69c03 160000
--- a/lib/openzeppelin-contracts
+++ b/lib/openzeppelin-contracts
@@ -1,1 +1,1 @@
-Subproject commit 98b83dfbaa94091626deb5993907769e032ecfcf
+Subproject commit 9ef69c03d13230aeff24d91cb54c9d24c4de7c8b
diff --git a/lib/solady b/lib/solady
index 72e76e22..5754a4a9 160000
--- a/lib/solady
+++ b/lib/solady
@@ -1,1 +1,1 @@
-Subproject commit 72e76e222a586bb6061bf09d9dcaa3c50c92a2dd
+Subproject commit 5754a4a999dedf34a7016b1b3c641993f1b2056a
diff --git a/src/extensions/ERC4626.vy b/src/extensions/ERC4626.vy
index e349246f..f890e4dc 100644
--- a/src/extensions/ERC4626.vy
+++ b/src/extensions/ERC4626.vy
@@ -172,8 +172,7 @@ balanceOf: public(HashMap[address, uint256])
 # @dev Returns the remaining number of tokens that a
 # `spender` will be allowed to spend on behalf of
 # `owner` through `transferFrom`. This is zero by
-# default. This value changes when `approve`,
-# `increase_allowance`, `decrease_allowance`, or
+# default. This value changes when `approve` or
 # `transferFrom` are called.
 allowance: public(HashMap[address, HashMap[address, uint256]])
 
@@ -316,30 +315,6 @@ def transferFrom(owner: address, to: address, amount: uint256) -> bool:
     return True
 
 
-@external
-def increase_allowance(spender: address, added_amount: uint256) -> bool:
-    """
-    @dev Sourced from {ERC20-increase_allowance}.
-    @notice See {ERC20-increase_allowance} for the
-            function docstring.
-    """
-    self._approve(msg.sender, spender, self.allowance[msg.sender][spender] + added_amount)
-    return True
-
-
-@external
-def decrease_allowance(spender: address, subtracted_amount: uint256) -> bool:
-    """
-    @dev Sourced from {ERC20-decrease_allowance}.
-    @notice See {ERC20-decrease_allowance} for the
-            function docstring.
-    """
-    current_allowance: uint256 = self.allowance[msg.sender][spender]
-    assert current_allowance >= subtracted_amount, "ERC20: decreased allowance below zero"
-    self._approve(msg.sender, spender, unsafe_sub(current_allowance, subtracted_amount))
-    return True
-
-
 @external
 def permit(owner: address, spender: address, amount: uint256, deadline: uint256, v: uint8, r: bytes32, s: bytes32):
     """
diff --git a/src/tokens/ERC20.vy b/src/tokens/ERC20.vy
index 81614640..b39e626d 100644
--- a/src/tokens/ERC20.vy
+++ b/src/tokens/ERC20.vy
@@ -12,8 +12,6 @@
         - `name` (`external` `view` function),
         - `symbol` (`external` `view` function),
         - `decimals` (`external` `view` function),
-        - `increase_allowance` (`external` function),
-        - `decrease_allowance` (`external` function),
         - `burn` (`external` function),
         - `burn_from` (`external` function),
         - `is_minter` (`external` `view` function),
@@ -144,8 +142,7 @@ balanceOf: public(HashMap[address, uint256])
 # @dev Returns the remaining number of tokens that a
 # `spender` will be allowed to spend on behalf of
 # `owner` through `transferFrom`. This is zero by
-# default. This value changes when `approve`,
-# `increase_allowance`, `decrease_allowance`, or
+# default. This value changes when `approve` or
 # `transferFrom` are called.
 allowance: public(HashMap[address, HashMap[address, uint256]])
 
@@ -328,50 +325,6 @@ def transferFrom(owner: address, to: address, amount: uint256) -> bool:
     return True
 
 
-@external
-def increase_allowance(spender: address, added_amount: uint256) -> bool:
-    """
-    @dev Atomically increases the allowance granted to
-         `spender` by the caller.
-    @notice This is an alternative to `approve` that can
-            be used as a mitigation for the problems
-            described in https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729.
-            Note that `spender` cannot be the zero address.
-    @param spender The 20-byte spender address.
-    @param added_amount The 32-byte token amount that is
-           added atomically to the allowance of the `spender`.
-    @return bool The verification whether the allowance increase
-            operation succeeded or failed. Note that the function
-            reverts instead of returning `False` on a failure.
-    """
-    self._approve(msg.sender, spender, self.allowance[msg.sender][spender] + added_amount)
-    return True
-
-
-@external
-def decrease_allowance(spender: address, subtracted_amount: uint256) -> bool:
-    """
-    @dev Atomically decreases the allowance granted to
-         `spender` by the caller.
-    @notice This is an alternative to `approve` that can
-            be used as a mitigation for the problems
-            described in https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729.
-            Note that `spender` cannot be the zero address.
-            Also, `spender` must have an allowance for
-            the caller of at least `subtracted_amount`.
-    @param spender The 20-byte spender address.
-    @param subtracted_amount The 32-byte token amount that is
-           subtracted atomically from the allowance of the `spender`.
-    @return bool The verification whether the allowance decrease
-            operation succeeded or failed. Note that the function
-            reverts instead of returning `False` on a failure.
-    """
-    current_allowance: uint256 = self.allowance[msg.sender][spender]
-    assert current_allowance >= subtracted_amount, "ERC20: decreased allowance below zero"
-    self._approve(msg.sender, spender, unsafe_sub(current_allowance, subtracted_amount))
-    return True
-
-
 @external
 def burn(amount: uint256):
     """
diff --git a/yarn.lock b/yarn.lock
index e8c563dc..ffe9456d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -443,9 +443,9 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0:
     color-convert "^2.0.1"
 
 antlr4@^4.11.0:
-  version "4.13.0"
-  resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.13.0.tgz#25c0b17f0d9216de114303d38bafd6f181d5447f"
-  integrity sha512-zooUbt+UscjnWyOrsuY/tVFL4rwrAGwOivpQmvmUDE22hy/lUA467Rc1rcixyRwcRUIXFYBwv7+dClDSHdmmew==
+  version "4.13.1"
+  resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.13.1.tgz#1e0a1830a08faeb86217cb2e6c34716004e4253d"
+  integrity sha512-kiXTspaRYvnIArgE97z5YVVf/cDVQABr3abFRR6mE7yesLMkgu4ujuyV/sgxafQ8wgve0DJQUJ38Z8tkgA2izA==
 
 antlr4ts@^0.5.0-alpha.4:
   version "0.5.0-alpha.4"
@@ -587,9 +587,9 @@ concat-map@0.0.1:
   integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
 
 cosmiconfig@^8.0.0:
-  version "8.3.3"
-  resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.3.tgz#45985f9f39f3c9330288ef642b1dcb7342bd76d7"
-  integrity sha512-/VY+0IvFoE47hwgKHu8feeBFIb1Z1mcJFiLrNwaJpLoLa9qwLVquMGMr2OUwQmhpJDtsSQSasg/TMv1imec9xA==
+  version "8.3.4"
+  resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.4.tgz#ee1356e7f24e248a6bb34ec5d438c3dcebeb410c"
+  integrity sha512-SF+2P8+o/PTV05rgsAjDzL4OFdVXAulSfC/L19VaeVT7+tpOOSscCt2QLxDZ+CLxF2WOiq6y1K5asvs8qUJT/Q==
   dependencies:
     import-fresh "^3.3.0"
     js-yaml "^4.1.0"


Test patch:
diff --git a/test/extensions/ERC4626.t.sol b/test/extensions/ERC4626.t.sol
index 0e1f58b4..4c30e0cc 100644
--- a/test/extensions/ERC4626.t.sol
+++ b/test/extensions/ERC4626.t.sol
@@ -2141,17 +2141,6 @@ contract ERC4626VaultHandler {
         vault.permit(owner, spender, value, deadline, v, r, s);
     }
 
-    function increase_allowance(address spender, uint256 addedAmount) public {
-        vault.increase_allowance(spender, addedAmount);
-    }
-
-    function decrease_allowance(
-        address spender,
-        uint256 subtractedAmount
-    ) public {
-        vault.decrease_allowance(spender, subtractedAmount);
-    }
-
     function deposit(uint256 assets, address receiver) public {
         uint256 shares = vault.deposit(assets, receiver);
         totalSupply += shares;
diff --git a/test/extensions/interfaces/IERC4626Extended.sol b/test/extensions/interfaces/IERC4626Extended.sol
index e7470484..21f2e410 100644
--- a/test/extensions/interfaces/IERC4626Extended.sol
+++ b/test/extensions/interfaces/IERC4626Extended.sol
@@ -6,14 +6,7 @@ import {IERC20Permit} from "openzeppelin/token/ERC20/extensions/IERC20Permit.sol
 import {IERC4626} from "openzeppelin/interfaces/IERC4626.sol";
 import {IERC5267} from "openzeppelin/interfaces/IERC5267.sol";
 
+// solhint-disable-next-line no-empty-blocks
 interface IERC4626Extended is IERC20Metadata, IERC20Permit, IERC4626, IERC5267 {
-    function increase_allowance(
-        address spender,
-        uint256 addedAmount
-    ) external returns (bool);
 
-    function decrease_allowance(
-        address spender,
-        uint256 subtractedAmount
-    ) external returns (bool);
 }
diff --git a/test/tokens/ERC20.t.sol b/test/tokens/ERC20.t.sol
index 6f64e119..957f1e3e 100644
--- a/test/tokens/ERC20.t.sol
+++ b/test/tokens/ERC20.t.sol
@@ -361,245 +361,6 @@ contract ERC20Test is Test {
         ERC20Extended.transferFrom(zeroAddress, makeAddr("to"), 0);
     }
 
-    function testIncreaseAllowanceSuccessCase1() public {
-        address owner = deployer;
-        address spender = makeAddr("spender");
-        uint256 addedAmount = ERC20Extended.balanceOf(owner);
-        vm.startPrank(owner);
-        vm.expectEmit(true, true, false, true);
-        emit Approval(owner, spender, addedAmount);
-        bool returnValue = ERC20Extended.increase_allowance(
-            spender,
-            addedAmount
-        );
-        assertTrue(returnValue);
-        assertEq(ERC20Extended.allowance(owner, spender), addedAmount);
-        vm.stopPrank();
-    }
-
-    function testIncreaseAllowanceSuccessCase2() public {
-        address owner = deployer;
-        address spender = makeAddr("spender");
-        uint256 amount = 100;
-        uint256 addedAmount = ERC20Extended.balanceOf(owner);
-        vm.startPrank(owner);
-        vm.expectEmit(true, true, false, true);
-        emit Approval(owner, spender, amount);
-        bool returnValue1 = ERC20Extended.approve(spender, amount);
-        assertTrue(returnValue1);
-        assertEq(ERC20Extended.allowance(owner, spender), amount);
-
-        vm.expectEmit(true, true, false, true);
-        emit Approval(owner, spender, amount + addedAmount);
-        bool returnValue2 = ERC20Extended.increase_allowance(
-            spender,
-            addedAmount
-        );
-        assertTrue(returnValue2);
-        assertEq(ERC20Extended.allowance(owner, spender), amount + addedAmount);
-        vm.stopPrank();
-    }
-
-    function testIncreaseAllowanceExceedingBalanceCase1() public {
-        address owner = deployer;
-        address spender = makeAddr("spender");
-        uint256 addedAmount = type(uint128).max;
-        vm.startPrank(owner);
-        vm.expectEmit(true, true, false, true);
-        emit Approval(owner, spender, addedAmount);
-        bool returnValue = ERC20Extended.increase_allowance(
-            spender,
-            addedAmount
-        );
-        assertTrue(returnValue);
-        assertEq(ERC20Extended.allowance(owner, spender), addedAmount);
-        vm.stopPrank();
-    }
-
-    function testIncreaseAllowanceExceedingBalanceCase2() public {
-        address owner = deployer;
-        address spender = makeAddr("spender");
-        uint256 amount = 100;
-        uint256 addedAmount = type(uint128).max;
-        vm.startPrank(owner);
-        vm.expectEmit(true, true, false, true);
-        emit Approval(owner, spender, amount);
-        bool returnValue1 = ERC20Extended.approve(spender, amount);
-        assertTrue(returnValue1);
-        assertEq(ERC20Extended.allowance(owner, spender), amount);
-
-        vm.expectEmit(true, true, false, true);
-        emit Approval(owner, spender, amount + addedAmount);
-        bool returnValue2 = ERC20Extended.increase_allowance(
-            spender,
-            addedAmount
-        );
-        assertTrue(returnValue2);
-        assertEq(ERC20Extended.allowance(owner, spender), amount + addedAmount);
-        vm.stopPrank();
-    }
-
-    function testIncreaseAllowanceToZeroAddress() public {
-        address owner = deployer;
-        uint256 addedAmount = ERC20Extended.balanceOf(owner);
-        vm.prank(owner);
-        vm.expectRevert(bytes("ERC20: approve to the zero address"));
-        ERC20Extended.increase_allowance(zeroAddress, addedAmount);
-    }
-
-    function testIncreaseAllowanceFromZeroAddress() public {
-        vm.prank(zeroAddress);
-        vm.expectRevert(bytes("ERC20: approve from the zero address"));
-        ERC20Extended.increase_allowance(
-            makeAddr("spender"),
-            type(uint256).max
-        );
-    }
-
-    function testDecreaseAllowanceSuccessCase1() public {
-        address owner = deployer;
-        address spender = makeAddr("spender");
-        uint256 amount = ERC20Extended.balanceOf(owner);
-        uint256 subtractedAmount = 100;
-        vm.startPrank(owner);
-        vm.expectEmit(true, true, false, true);
-        emit Approval(owner, spender, amount);
-        bool returnValue1 = ERC20Extended.approve(spender, amount);
-        assertTrue(returnValue1);
-        assertEq(ERC20Extended.allowance(owner, spender), amount);
-
-        vm.expectEmit(true, true, false, true);
-        emit Approval(owner, spender, amount - subtractedAmount);
-        bool returnValue2 = ERC20Extended.decrease_allowance(
-            spender,
-            subtractedAmount
-        );
-        assertTrue(returnValue2);
-        assertEq(
-            ERC20Extended.allowance(owner, spender),
-            amount - subtractedAmount
-        );
-        vm.stopPrank();
-    }
-
-    function testDecreaseAllowanceSuccessCase2() public {
-        address owner = deployer;
-        address spender = makeAddr("spender");
-        uint256 amount = ERC20Extended.balanceOf(owner);
-        uint256 subtractedAmount = amount;
-        vm.startPrank(owner);
-        vm.expectEmit(true, true, false, true);
-        emit Approval(owner, spender, amount);
-        bool returnValue1 = ERC20Extended.approve(spender, amount);
-        assertTrue(returnValue1);
-        assertEq(ERC20Extended.allowance(owner, spender), amount);
-
-        vm.expectEmit(true, true, false, true);
-        emit Approval(owner, spender, amount - subtractedAmount);
-        bool returnValue2 = ERC20Extended.decrease_allowance(
-            spender,
-            subtractedAmount
-        );
-        assertTrue(returnValue2);
-        assertEq(
-            ERC20Extended.allowance(owner, spender),
-            amount - subtractedAmount
-        );
-        vm.stopPrank();
-    }
-
-    function testDecreaseAllowanceExceedingBalanceCase1() public {
-        address owner = deployer;
-        address spender = makeAddr("spender");
-        uint256 amount = type(uint128).max;
-        uint256 subtractedAmount = 100;
-        vm.startPrank(owner);
-        vm.expectEmit(true, true, false, true);
-        emit Approval(owner, spender, amount);
-        bool returnValue1 = ERC20Extended.approve(spender, amount);
-        assertTrue(returnValue1);
-        assertEq(ERC20Extended.allowance(owner, spender), amount);
-
-        vm.expectEmit(true, true, false, true);
-        emit Approval(owner, spender, amount - subtractedAmount);
-        bool returnValue2 = ERC20Extended.decrease_allowance(
-            spender,
-            subtractedAmount
-        );
-        assertTrue(returnValue2);
-        assertEq(
-            ERC20Extended.allowance(owner, spender),
-            amount - subtractedAmount
-        );
-        vm.stopPrank();
-    }
-
-    function testDecreaseAllowanceExceedingBalanceCase2() public {
-        address owner = deployer;
-        address spender = makeAddr("spender");
-        uint256 amount = type(uint128).max;
-        uint256 subtractedAmount = amount;
-        vm.startPrank(owner);
-        vm.expectEmit(true, true, false, true);
-        emit Approval(owner, spender, amount);
-        bool returnValue1 = ERC20Extended.approve(spender, amount);
-        assertTrue(returnValue1);
-        assertEq(ERC20Extended.allowance(owner, spender), amount);
-
-        vm.expectEmit(true, true, false, true);
-        emit Approval(owner, spender, amount - subtractedAmount);
-        bool returnValue2 = ERC20Extended.decrease_allowance(
-            spender,
-            subtractedAmount
-        );
-        assertTrue(returnValue2);
-        assertEq(
-            ERC20Extended.allowance(owner, spender),
-            amount - subtractedAmount
-        );
-        vm.stopPrank();
-    }
-
-    function testDecreaseAllowanceInvalidAmountCase1() public {
-        vm.prank(deployer);
-        vm.expectRevert(bytes("ERC20: decreased allowance below zero"));
-        ERC20Extended.decrease_allowance(makeAddr("spender"), 1);
-    }
-
-    function testDecreaseAllowanceInvalidAmountCase2() public {
-        address owner = deployer;
-        address spender = makeAddr("spender");
-        uint256 amount = ERC20Extended.balanceOf(owner);
-        uint256 subtractedAmount = ERC20Extended.balanceOf(owner) + 1;
-        vm.startPrank(owner);
-        vm.expectEmit(true, true, false, true);
-        emit Approval(owner, spender, amount);
-        bool returnValue = ERC20Extended.approve(spender, amount);
-        assertTrue(returnValue);
-        assertEq(ERC20Extended.allowance(owner, spender), amount);
-
-        vm.expectRevert(bytes("ERC20: decreased allowance below zero"));
-        ERC20Extended.decrease_allowance(spender, subtractedAmount);
-        vm.stopPrank();
-    }
-
-    function testDecreaseAllowanceToZeroAddress() public {
-        address owner = deployer;
-        uint256 subtractedAmount = ERC20Extended.balanceOf(owner);
-        vm.prank(owner);
-        vm.expectRevert(bytes("ERC20: decreased allowance below zero"));
-        ERC20Extended.decrease_allowance(zeroAddress, subtractedAmount);
-    }
-
-    function testDecreaseAllowanceFromZeroAddress() public {
-        vm.prank(zeroAddress);
-        vm.expectRevert(bytes("ERC20: decreased allowance below zero"));
-        ERC20Extended.decrease_allowance(
-            makeAddr("spender"),
-            type(uint256).max
-        );
-    }
-
     function testBurnSuccessCase1() public {
         address owner = deployer;
         uint256 balance = ERC20Extended.balanceOf(owner);
@@ -1206,66 +967,6 @@ contract ERC20Test is Test {
         ERC20Extended.transferFrom(owner, to, amount + increment);
     }
 
-    function testFuzzIncreaseAllowanceSuccess(
-        address spender,
-        uint256 addedAmount
-    ) public {
-        vm.assume(spender != zeroAddress);
-        address owner = self;
-        addedAmount = bound(addedAmount, 0, type(uint64).max);
-        vm.expectEmit(true, true, false, true);
-        emit Approval(owner, spender, addedAmount);
-        bool returnValue = ERC20Extended.increase_allowance(
-            spender,
-            addedAmount
-        );
-        assertTrue(returnValue);
-        assertEq(ERC20Extended.allowance(owner, spender), addedAmount);
-    }
-
-    function testFuzzDecreaseAllowanceSuccess(
-        address spender,
-        uint256 amount,
-        uint256 subtractedAmount
-    ) public {
-        vm.assume(spender != zeroAddress && amount >= subtractedAmount);
-        address owner = self;
-        vm.expectEmit(true, true, false, true);
-        emit Approval(owner, spender, amount);
-        bool returnValue1 = ERC20Extended.approve(spender, amount);
-        assertTrue(returnValue1);
-        assertEq(ERC20Extended.allowance(owner, spender), amount);
-
-        vm.expectEmit(true, true, false, true);
-        emit Approval(owner, spender, amount - subtractedAmount);
-        bool returnValue2 = ERC20Extended.decrease_allowance(
-            spender,
-            subtractedAmount
-        );
-        assertTrue(returnValue2);
-        assertEq(
-            ERC20Extended.allowance(owner, spender),
-            amount - subtractedAmount
-        );
-    }
-
-    function testFuzzDecreaseAllowanceInvalidAmount(
-        address spender,
-        uint256 amount,
-        uint256 subtractedAmount
-    ) public {
-        vm.assume(spender != zeroAddress && amount < subtractedAmount);
-        address owner = self;
-        vm.expectEmit(true, true, false, true);
-        emit Approval(owner, spender, amount);
-        bool returnValue1 = ERC20Extended.approve(spender, amount);
-        assertTrue(returnValue1);
-        assertEq(ERC20Extended.allowance(owner, spender), amount);
-
-        vm.expectRevert(bytes("ERC20: decreased allowance below zero"));
-        ERC20Extended.decrease_allowance(spender, subtractedAmount);
-    }
-
     function testFuzzBurnSuccessCase(uint256 amount) public {
         amount = bound(amount, 0, type(uint64).max);
         address owner = self;
@@ -1677,17 +1378,6 @@ contract ERC20Handler {
         token.permit(ownerAddr, spender, value, deadline, v, r, s);
     }
 
-    function increase_allowance(address spender, uint256 addedAmount) public {
-        token.increase_allowance(spender, addedAmount);
-    }
-
-    function decrease_allowance(
-        address spender,
-        uint256 subtractedAmount
-    ) public {
-        token.decrease_allowance(spender, subtractedAmount);
-    }
-
     function burn(uint256 amount) public {
         token.burn(amount);
         totalSupply -= amount;
diff --git a/test/tokens/interfaces/IERC20Extended.sol b/test/tokens/interfaces/IERC20Extended.sol
index 99058581..b8ba9560 100644
--- a/test/tokens/interfaces/IERC20Extended.sol
+++ b/test/tokens/interfaces/IERC20Extended.sol
@@ -6,16 +6,6 @@ import {IERC20Permit} from "openzeppelin/token/ERC20/extensions/IERC20Permit.sol
 import {IERC5267} from "openzeppelin/interfaces/IERC5267.sol";
 
 interface IERC20Extended is IERC20Metadata, IERC20Permit, IERC5267 {
-    function increase_allowance(
-        address spender,
-        uint256 addedAmount
-    ) external returns (bool);
-
-    function decrease_allowance(
-        address spender,
-        uint256 subtractedAmount
-    ) external returns (bool);
-
     function burn(uint256 amount) external;
 
     function burn_from(address owner, uint256 amount) external;