Repository: pcaversaccio/snekmate (language: python)

Issue:
🔁 Upgrade Solidity Version to `0.8.23`
See the latest release: https://github.com/ethereum/solidity/releases/tag/v0.8.23.


Discussion / hints:

Fix patch:
diff --git a/.gas-snapshot b/.gas-snapshot
index 9dc73ddc..36acc768 100644
--- a/.gas-snapshot
+++ b/.gas-snapshot
@@ -60,8 +60,8 @@ BatchDistributorTest:testDistributeTokenMultipleAddressesSuccess() (gas: 616202)
 BatchDistributorTest:testDistributeTokenOneAddressSuccess() (gas: 578527)
 BatchDistributorTest:testDistributeTokenRevertWithInsufficientAllowance() (gas: 574268)
 BatchDistributorTest:testDistributeTokenRevertWithInsufficientBalance() (gas: 575054)
-BatchDistributorTest:testFuzzDistributeEtherMultipleAddressesSuccess(((address,uint256)[]),uint256) (runs: 256, μ: 1864479, ~: 1875164)
-BatchDistributorTest:testFuzzDistributeTokenMultipleAddressesSuccess(((address,uint256)[]),address,uint256) (runs: 256, μ: 1350486, ~: 1344279)
+BatchDistributorTest:testFuzzDistributeEtherMultipleAddressesSuccess(((address,uint256)[]),uint256) (runs: 256, μ: 1859281, ~: 1874845)
+BatchDistributorTest:testFuzzDistributeTokenMultipleAddressesSuccess(((address,uint256)[]),address,uint256) (runs: 256, μ: 1349043, ~: 1344886)
 Create2AddressTest:testComputeAddress() (gas: 550599)
 Create2AddressTest:testComputeAddressSelf() (gas: 558922)
 Create2AddressTest:testFuzzComputeAddress(bytes32,address) (runs: 256, μ: 551194, ~: 551194)
@@ -87,26 +87,26 @@ CreateAddressTest:testComputeAddressSelfNonceUint56() (gas: 539228)
 CreateAddressTest:testComputeAddressSelfNonceUint64() (gas: 539345)
 CreateAddressTest:testComputeAddressSelfNonceUint8() (gas: 538951)
 CreateAddressTest:testComputeAddressSelfRevertTooHighNonce() (gas: 8836)
-CreateAddressTest:testFuzzComputeAddressNonce0x7f(uint64,address) (runs: 256, μ: 538438, ~: 538549)
-CreateAddressTest:testFuzzComputeAddressNonceUint16(uint64,address) (runs: 256, μ: 537881, ~: 538163)
-CreateAddressTest:testFuzzComputeAddressNonceUint24(uint64,address) (runs: 256, μ: 538014, ~: 538140)
-CreateAddressTest:testFuzzComputeAddressNonceUint32(uint64,address) (runs: 256, μ: 538021, ~: 538147)
-CreateAddressTest:testFuzzComputeAddressNonceUint40(uint64,address) (runs: 256, μ: 538143, ~: 538239)
-CreateAddressTest:testFuzzComputeAddressNonceUint48(uint64,address) (runs: 256, μ: 538126, ~: 538223)
+CreateAddressTest:testFuzzComputeAddressNonce0x7f(uint64,address) (runs: 256, μ: 538435, ~: 538549)
+CreateAddressTest:testFuzzComputeAddressNonceUint16(uint64,address) (runs: 256, μ: 537878, ~: 538014)
+CreateAddressTest:testFuzzComputeAddressNonceUint24(uint64,address) (runs: 256, μ: 538017, ~: 538140)
+CreateAddressTest:testFuzzComputeAddressNonceUint32(uint64,address) (runs: 256, μ: 538032, ~: 538147)
+CreateAddressTest:testFuzzComputeAddressNonceUint40(uint64,address) (runs: 256, μ: 538140, ~: 538239)
+CreateAddressTest:testFuzzComputeAddressNonceUint48(uint64,address) (runs: 256, μ: 538124, ~: 538223)
 CreateAddressTest:testFuzzComputeAddressNonceUint56(uint64,address) (runs: 256, μ: 538170, ~: 538252)
-CreateAddressTest:testFuzzComputeAddressNonceUint64(uint64,address) (runs: 256, μ: 538165, ~: 538356)
-CreateAddressTest:testFuzzComputeAddressNonceUint8(uint64,address) (runs: 256, μ: 537942, ~: 538014)
-CreateAddressTest:testFuzzComputeAddressRevertTooHighNonce(uint256,address) (runs: 256, μ: 13420, ~: 13340)
-CreateAddressTest:testFuzzComputeAddressSelfNonce0x7f(uint64) (runs: 256, μ: 544274, ~: 544388)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint16(uint64) (runs: 256, μ: 543523, ~: 543424)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint24(uint64) (runs: 256, μ: 543787, ~: 543878)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint32(uint64) (runs: 256, μ: 543871, ~: 543974)
+CreateAddressTest:testFuzzComputeAddressNonceUint64(uint64,address) (runs: 256, μ: 538151, ~: 538356)
+CreateAddressTest:testFuzzComputeAddressNonceUint8(uint64,address) (runs: 256, μ: 537935, ~: 538014)
+CreateAddressTest:testFuzzComputeAddressRevertTooHighNonce(uint256,address) (runs: 256, μ: 13398, ~: 13340)
+CreateAddressTest:testFuzzComputeAddressSelfNonce0x7f(uint64) (runs: 256, μ: 544262, ~: 544388)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint16(uint64) (runs: 256, μ: 543521, ~: 543424)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint24(uint64) (runs: 256, μ: 543781, ~: 543878)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint32(uint64) (runs: 256, μ: 543878, ~: 543974)
 CreateAddressTest:testFuzzComputeAddressSelfNonceUint40(uint64) (runs: 256, μ: 543874, ~: 543958)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint48(uint64) (runs: 256, μ: 543920, ~: 544032)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint48(uint64) (runs: 256, μ: 543918, ~: 544032)
 CreateAddressTest:testFuzzComputeAddressSelfNonceUint56(uint64) (runs: 256, μ: 544011, ~: 544102)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint64(uint64) (runs: 256, μ: 544063, ~: 544232)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint8(uint64) (runs: 256, μ: 543594, ~: 543669)
-CreateAddressTest:testFuzzComputeAddressSelfRevertTooHighNonce(uint256) (runs: 256, μ: 13218, ~: 13179)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint64(uint64) (runs: 256, μ: 544053, ~: 544232)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint8(uint64) (runs: 256, μ: 543587, ~: 543669)
+CreateAddressTest:testFuzzComputeAddressSelfRevertTooHighNonce(uint256) (runs: 256, μ: 13216, ~: 13179)
 ECDSATest:testEthSignedMessageHash() (gas: 5846)
 ECDSATest:testFuzzEthSignedMessageHash(string) (runs: 256, μ: 6432, ~: 6426)
 ECDSATest:testFuzzRecoverWithInvalidSignature(bytes,string) (runs: 256, μ: 15159, ~: 15161)
@@ -133,7 +133,7 @@ EIP712DomainSeparatorTest:testCachedDomainSeparatorV4() (gas: 7562)
 EIP712DomainSeparatorTest:testDomainSeparatorV4() (gas: 11305)
 EIP712DomainSeparatorTest:testEIP712Domain() (gas: 13629)
 EIP712DomainSeparatorTest:testFuzzDomainSeparatorV4(uint8) (runs: 256, μ: 11460, ~: 11480)
-EIP712DomainSeparatorTest:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 19156, ~: 19122)
+EIP712DomainSeparatorTest:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 19160, ~: 19122)
 EIP712DomainSeparatorTest:testFuzzHashTypedDataV4(address,address,uint256,uint256,uint64) (runs: 256, μ: 7698, ~: 7698)
 EIP712DomainSeparatorTest:testHashTypedDataV4() (gas: 13017)
 ERC1155Invariants:invariantOwner() (runs: 256, calls: 3840, reverts: 3437)
@@ -163,37 +163,37 @@ ERC1155Test:testExistsAfterBatchMint() (gas: 143320)
 ERC1155Test:testExistsAfterSingleBurn() (gas: 137816)
 ERC1155Test:testExistsAfterSingleMint() (gas: 119400)
 ERC1155Test:testExistsBeforeMint() (gas: 7642)
-ERC1155Test:testFuzzBurnBatchSuccess(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 132326, ~: 132341)
-ERC1155Test:testFuzzBurnSuccess(address,address,uint256) (runs: 256, μ: 140094, ~: 140134)
+ERC1155Test:testFuzzBurnBatchSuccess(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 132339, ~: 132341)
+ERC1155Test:testFuzzBurnSuccess(address,address,uint256) (runs: 256, μ: 140114, ~: 140134)
 ERC1155Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13977, ~: 13977)
-ERC1155Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48432, ~: 48416)
+ERC1155Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48433, ~: 48416)
 ERC1155Test:testFuzzSafeBatchTransferFromByApprovedOperator(address,address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 225230, ~: 225191)
-ERC1155Test:testFuzzSafeBatchTransferFromEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 190347, ~: 190304)
-ERC1155Test:testFuzzSafeBatchTransferFromNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 564154, ~: 564164)
-ERC1155Test:testFuzzSafeBatchTransferFromWithData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 564757, ~: 564321)
-ERC1155Test:testFuzzSafeMintBatchEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 152244, ~: 152222)
+ERC1155Test:testFuzzSafeBatchTransferFromEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 190337, ~: 190304)
+ERC1155Test:testFuzzSafeBatchTransferFromNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 564164, ~: 564164)
+ERC1155Test:testFuzzSafeBatchTransferFromWithData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 564771, ~: 564771)
+ERC1155Test:testFuzzSafeMintBatchEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 152234, ~: 152222)
 ERC1155Test:testFuzzSafeMintBatchNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 519941, ~: 519951)
 ERC1155Test:testFuzzSafeMintBatchNonMinter(address) (runs: 256, μ: 40926, ~: 40926)
-ERC1155Test:testFuzzSafeMintBatchWithData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 520306, ~: 520547)
-ERC1155Test:testFuzzSafeMintEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 151294, ~: 151259)
+ERC1155Test:testFuzzSafeMintBatchWithData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 520279, ~: 520066)
+ERC1155Test:testFuzzSafeMintEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 151284, ~: 151259)
 ERC1155Test:testFuzzSafeMintNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 520108, ~: 520118)
 ERC1155Test:testFuzzSafeMintNonMinter(address) (runs: 256, μ: 33132, ~: 33132)
 ERC1155Test:testFuzzSafeMintWithData(address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 521416, ~: 521009)
 ERC1155Test:testFuzzSafeTransferFromByApprovedOperator(address,address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 204239, ~: 204191)
-ERC1155Test:testFuzzSafeTransferFromEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 169443, ~: 169391)
+ERC1155Test:testFuzzSafeTransferFromEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 169433, ~: 169391)
 ERC1155Test:testFuzzSafeTransferFromNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 606383, ~: 606383)
-ERC1155Test:testFuzzSafeTransferFromWithData(address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 608365, ~: 607645)
-ERC1155Test:testFuzzSetApprovalForAllRevoke(address,address) (runs: 256, μ: 31054, ~: 31022)
+ERC1155Test:testFuzzSafeTransferFromWithData(address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 608375, ~: 607645)
+ERC1155Test:testFuzzSetApprovalForAllRevoke(address,address) (runs: 256, μ: 31052, ~: 31022)
 ERC1155Test:testFuzzSetApprovalForAllSuccess(address,address) (runs: 256, μ: 44181, ~: 44181)
 ERC1155Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 15772, ~: 15699)
 ERC1155Test:testFuzzSetMinterSuccess(string) (runs: 256, μ: 33178, ~: 33178)
 ERC1155Test:testFuzzSetUriNonMinter(address) (runs: 256, μ: 14452, ~: 14452)
-ERC1155Test:testFuzzTotalSupplyAfterBatchBurn(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 126366, ~: 126381)
-ERC1155Test:testFuzzTotalSupplyAfterBatchMint(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 140983, ~: 140922)
+ERC1155Test:testFuzzTotalSupplyAfterBatchBurn(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 126379, ~: 126381)
+ERC1155Test:testFuzzTotalSupplyAfterBatchMint(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 140975, ~: 140922)
 ERC1155Test:testFuzzTotalSupplyAfterSingleBurn(address,uint256,bytes) (runs: 256, μ: 138036, ~: 138007)
-ERC1155Test:testFuzzTotalSupplyAfterSingleMint(uint256,uint256,bytes) (runs: 256, μ: 91186, ~: 119836)
+ERC1155Test:testFuzzTotalSupplyAfterSingleMint(uint256,uint256,bytes) (runs: 256, μ: 90020, ~: 90040)
 ERC1155Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14086, ~: 14086)
-ERC1155Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 73958, ~: 73928)
+ERC1155Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 73957, ~: 73928)
 ERC1155Test:testHasOwner() (gas: 9714)
 ERC1155Test:testInitialSetup() (gas: 2810217)
 ERC1155Test:testRenounceOwnershipNonOwner() (gas: 10918)
@@ -266,8 +266,8 @@ ERC1155Test:testUriBaseAndTokenUriNotSet() (gas: 2768301)
 ERC1155Test:testUriBaseAndTokenUriSet() (gas: 65517)
 ERC1155Test:testUriNoBaseURI() (gas: 2818373)
 ERC1155Test:testUriNoTokenUri() (gas: 17407)
-ERC20Invariants:invariantOwner() (runs: 256, calls: 3840, reverts: 3391)
-ERC20Invariants:invariantTotalSupply() (runs: 256, calls: 3840, reverts: 3391)
+ERC20Invariants:invariantOwner() (runs: 256, calls: 3840, reverts: 3392)
+ERC20Invariants:invariantTotalSupply() (runs: 256, calls: 3840, reverts: 3392)
 ERC20Test:testApproveExceedingBalanceCase1() (gas: 40223)
 ERC20Test:testApproveExceedingBalanceCase2() (gas: 46478)
 ERC20Test:testApproveFromZeroAddress() (gas: 13220)
@@ -290,26 +290,26 @@ ERC20Test:testCachedDomainSeparator() (gas: 7699)
 ERC20Test:testDomainSeparator() (gas: 11449)
 ERC20Test:testEIP712Domain() (gas: 13739)
 ERC20Test:testFuzzApproveSuccess(address,uint256) (runs: 256, μ: 39193, ~: 40437)
-ERC20Test:testFuzzBurnFromInsufficientAllowance(address,uint256,uint8) (runs: 256, μ: 175392, ~: 175650)
-ERC20Test:testFuzzBurnFromSuccess(address,uint256) (runs: 256, μ: 280554, ~: 281683)
+ERC20Test:testFuzzBurnFromInsufficientAllowance(address,uint256,uint8) (runs: 256, μ: 175535, ~: 175651)
+ERC20Test:testFuzzBurnFromSuccess(address,uint256) (runs: 256, μ: 280545, ~: 281346)
 ERC20Test:testFuzzBurnInvalidAmount(address,uint256) (runs: 256, μ: 16454, ~: 16454)
-ERC20Test:testFuzzBurnSuccessCase(uint256) (runs: 256, μ: 256370, ~: 256160)
-ERC20Test:testFuzzDomainSeparator(uint8) (runs: 256, μ: 11665, ~: 11685)
-ERC20Test:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 19447, ~: 19409)
+ERC20Test:testFuzzBurnSuccessCase(uint256) (runs: 256, μ: 256368, ~: 256160)
+ERC20Test:testFuzzDomainSeparator(uint8) (runs: 256, μ: 11664, ~: 11685)
+ERC20Test:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 19448, ~: 19409)
 ERC20Test:testFuzzMintNonMinter(string,uint256) (runs: 256, μ: 13152, ~: 13080)
-ERC20Test:testFuzzMintSuccess(string,uint256) (runs: 256, μ: 54521, ~: 55666)
+ERC20Test:testFuzzMintSuccess(string,uint256) (runs: 256, μ: 54354, ~: 55666)
 ERC20Test:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 45279, ~: 45277)
 ERC20Test:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 70299, ~: 70295)
 ERC20Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13979, ~: 13979)
-ERC20Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48361, ~: 48345)
+ERC20Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48360, ~: 48345)
 ERC20Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 15777, ~: 15704)
 ERC20Test:testFuzzSetMinterSuccess(string) (runs: 256, μ: 33196, ~: 33196)
-ERC20Test:testFuzzTransferFromInsufficientAllowance(address,address,uint256,uint8) (runs: 256, μ: 173845, ~: 174131)
-ERC20Test:testFuzzTransferFromSuccess(address,address,uint256) (runs: 256, μ: 200705, ~: 202816)
+ERC20Test:testFuzzTransferFromInsufficientAllowance(address,address,uint256,uint8) (runs: 256, μ: 173777, ~: 174131)
+ERC20Test:testFuzzTransferFromSuccess(address,address,uint256) (runs: 256, μ: 200575, ~: 202670)
 ERC20Test:testFuzzTransferInvalidAmount(address,address,uint256) (runs: 256, μ: 16849, ~: 16849)
 ERC20Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14068, ~: 14068)
-ERC20Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 73902, ~: 73874)
-ERC20Test:testFuzzTransferSuccess(address,uint256) (runs: 256, μ: 172816, ~: 173877)
+ERC20Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 73901, ~: 73874)
+ERC20Test:testFuzzTransferSuccess(address,uint256) (runs: 256, μ: 172876, ~: 173865)
 ERC20Test:testHasOwner() (gas: 9758)
 ERC20Test:testInitialSetup() (gas: 1467701)
 ERC20Test:testMintNonMinter() (gas: 12639)
@@ -349,18 +349,18 @@ ERC2981Test:testDeleteDefaultRoyaltyNonOwner() (gas: 10537)
 ERC2981Test:testFuzzDeleteDefaultRoyaltyNonOwner(address) (runs: 256, μ: 13271, ~: 13271)
 ERC2981Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13972, ~: 13972)
 ERC2981Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 24598, ~: 24598)
-ERC2981Test:testFuzzResetTokenRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 94012, ~: 95477)
+ERC2981Test:testFuzzResetTokenRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 94029, ~: 95493)
 ERC2981Test:testFuzzResetTokenRoyaltyNonOwner(address) (runs: 256, μ: 13246, ~: 13246)
-ERC2981Test:testFuzzRoyaltyInfoDefaultRoyalty(address,uint256,uint256,uint96,uint256) (runs: 256, μ: 79111, ~: 80155)
-ERC2981Test:testFuzzRoyaltyInfoDeleteDefaultRoyalty(address,uint256,uint256,uint96,uint256) (runs: 256, μ: 62306, ~: 63356)
-ERC2981Test:testFuzzRoyaltyInfoSetTokenRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 120523, ~: 122002)
-ERC2981Test:testFuzzRoyaltyInfoSetTokenRoyaltyUpdate(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 164325, ~: 166503)
-ERC2981Test:testFuzzRoyaltyInfoUpdateDefaultRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 84707, ~: 85650)
+ERC2981Test:testFuzzRoyaltyInfoDefaultRoyalty(address,uint256,uint256,uint96,uint256) (runs: 256, μ: 79194, ~: 80155)
+ERC2981Test:testFuzzRoyaltyInfoDeleteDefaultRoyalty(address,uint256,uint256,uint96,uint256) (runs: 256, μ: 62358, ~: 63357)
+ERC2981Test:testFuzzRoyaltyInfoSetTokenRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 120043, ~: 122002)
+ERC2981Test:testFuzzRoyaltyInfoSetTokenRoyaltyUpdate(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 164083, ~: 166503)
+ERC2981Test:testFuzzRoyaltyInfoUpdateDefaultRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 84938, ~: 85650)
 ERC2981Test:testFuzzSetDefaultRoyaltyNonOwner(address) (runs: 256, μ: 15525, ~: 15525)
-ERC2981Test:testFuzzSetDefaultRoyaltyTooHighFeeNumerator(uint96) (runs: 256, μ: 21826, ~: 21611)
+ERC2981Test:testFuzzSetDefaultRoyaltyTooHighFeeNumerator(uint96) (runs: 256, μ: 21817, ~: 21611)
 ERC2981Test:testFuzzSetTokenRoyaltyInvalidReceiver(address) (runs: 256, μ: 18626, ~: 18626)
 ERC2981Test:testFuzzSetTokenRoyaltyNonOwner(address) (runs: 256, μ: 15565, ~: 15565)
-ERC2981Test:testFuzzSetTokenRoyaltyTooHighFeeNumerator(uint96) (runs: 256, μ: 21867, ~: 21652)
+ERC2981Test:testFuzzSetTokenRoyaltyTooHighFeeNumerator(uint96) (runs: 256, μ: 21858, ~: 21652)
 ERC2981Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14039, ~: 14039)
 ERC2981Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 29577, ~: 29577)
 ERC2981Test:testHasOwner() (gas: 9688)
@@ -388,8 +388,8 @@ ERC2981Test:testSupportsInterfaceSuccessGasCost() (gas: 6345)
 ERC2981Test:testTransferOwnershipNonOwner() (gas: 12649)
 ERC2981Test:testTransferOwnershipSuccess() (gas: 22091)
 ERC2981Test:testTransferOwnershipToZeroAddress() (gas: 15557)
-ERC4626VaultInvariants:invariantTotalAssets() (runs: 256, calls: 3840, reverts: 3242)
-ERC4626VaultInvariants:invariantTotalSupply() (runs: 256, calls: 3840, reverts: 3242)
+ERC4626VaultInvariants:invariantTotalAssets() (runs: 256, calls: 3840, reverts: 3243)
+ERC4626VaultInvariants:invariantTotalSupply() (runs: 256, calls: 3840, reverts: 3243)
 ERC4626VaultTest:testCachedDomainSeparator() (gas: 7676)
 ERC4626VaultTest:testDepositInsufficientAllowance() (gas: 82425)
 ERC4626VaultTest:testDepositWithNoApproval() (gas: 24740)
@@ -400,9 +400,9 @@ ERC4626VaultTest:testEmptyVaultDeposit() (gas: 556789)
 ERC4626VaultTest:testEmptyVaultMint() (gas: 557600)
 ERC4626VaultTest:testEmptyVaultRedeem() (gas: 191988)
 ERC4626VaultTest:testEmptyVaultwithdraw() (gas: 204833)
-ERC4626VaultTest:testFail_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 555133, ~: 558733)
-ERC4626VaultTest:testFail_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 557023, ~: 560574)
-ERC4626VaultTest:testFuzzDomainSeparator(uint8) (runs: 256, μ: 11556, ~: 11577)
+ERC4626VaultTest:testFail_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 554731, ~: 557599)
+ERC4626VaultTest:testFail_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 556593, ~: 560574)
+ERC4626VaultTest:testFuzzDomainSeparator(uint8) (runs: 256, μ: 11557, ~: 11577)
 ERC4626VaultTest:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 19367, ~: 19328)
 ERC4626VaultTest:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 45211, ~: 45209)
 ERC4626VaultTest:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 70194, ~: 70190)
@@ -424,30 +424,30 @@ ERC4626VaultTest:testVaultInteractionsForSomeoneElse() (gas: 221714)
 ERC4626VaultTest:testWithdrawInsufficientAllowance() (gas: 122543)
 ERC4626VaultTest:testWithdrawInsufficientAssets() (gas: 117830)
 ERC4626VaultTest:testWithdrawWithNoAssets() (gas: 21327)
-ERC4626VaultTest:test_RT_deposit_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473811, ~: 476244)
-ERC4626VaultTest:test_RT_deposit_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 475867, ~: 478308)
-ERC4626VaultTest:test_RT_mint_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 475147, ~: 476781)
-ERC4626VaultTest:test_RT_mint_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 476733, ~: 478572)
-ERC4626VaultTest:test_RT_redeem_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474068, ~: 477020)
-ERC4626VaultTest:test_RT_redeem_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474333, ~: 476971)
-ERC4626VaultTest:test_RT_withdraw_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 475457, ~: 478122)
-ERC4626VaultTest:test_RT_withdraw_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 476644, ~: 478983)
-ERC4626VaultTest:test_asset((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423342, ~: 427660)
-ERC4626VaultTest:test_convertToAssets((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 429434, ~: 432759)
-ERC4626VaultTest:test_convertToShares((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 429140, ~: 432358)
-ERC4626VaultTest:test_deposit((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 469480, ~: 472884)
-ERC4626VaultTest:test_maxDeposit((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423355, ~: 427673)
-ERC4626VaultTest:test_maxMint((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423380, ~: 427698)
-ERC4626VaultTest:test_maxRedeem((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423495, ~: 427812)
-ERC4626VaultTest:test_maxWithdraw((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 425030, ~: 429361)
-ERC4626VaultTest:test_mint((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 470227, ~: 473150)
-ERC4626VaultTest:test_previewDeposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 466490, ~: 468988)
-ERC4626VaultTest:test_previewMint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 468095, ~: 469432)
-ERC4626VaultTest:test_previewRedeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 468319, ~: 471062)
-ERC4626VaultTest:test_previewWithdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 471222, ~: 472873)
-ERC4626VaultTest:test_redeem((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 472517, ~: 475207)
-ERC4626VaultTest:test_totalAssets((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423945, ~: 428262)
-ERC4626VaultTest:test_withdraw((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 473915, ~: 476759)
+ERC4626VaultTest:test_RT_deposit_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473848, ~: 476603)
+ERC4626VaultTest:test_RT_deposit_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 475843, ~: 478064)
+ERC4626VaultTest:test_RT_mint_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474986, ~: 476997)
+ERC4626VaultTest:test_RT_mint_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 476757, ~: 478609)
+ERC4626VaultTest:test_RT_redeem_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474053, ~: 477061)
+ERC4626VaultTest:test_RT_redeem_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474324, ~: 477065)
+ERC4626VaultTest:test_RT_withdraw_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 475513, ~: 478332)
+ERC4626VaultTest:test_RT_withdraw_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 476750, ~: 478800)
+ERC4626VaultTest:test_asset((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 422927, ~: 427714)
+ERC4626VaultTest:test_convertToAssets((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 429131, ~: 432526)
+ERC4626VaultTest:test_convertToShares((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 429008, ~: 432518)
+ERC4626VaultTest:test_deposit((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 468962, ~: 472735)
+ERC4626VaultTest:test_maxDeposit((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 422940, ~: 427727)
+ERC4626VaultTest:test_maxMint((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 422965, ~: 427752)
+ERC4626VaultTest:test_maxRedeem((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423079, ~: 427866)
+ERC4626VaultTest:test_maxWithdraw((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424626, ~: 429498)
+ERC4626VaultTest:test_mint((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 470063, ~: 473233)
+ERC4626VaultTest:test_previewDeposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 466693, ~: 469071)
+ERC4626VaultTest:test_previewMint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 467706, ~: 469651)
+ERC4626VaultTest:test_previewRedeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 468487, ~: 471013)
+ERC4626VaultTest:test_previewWithdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 471021, ~: 472418)
+ERC4626VaultTest:test_redeem((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 472308, ~: 475265)
+ERC4626VaultTest:test_totalAssets((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423529, ~: 428316)
+ERC4626VaultTest:test_withdraw((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 473901, ~: 476796)
 ERC721Invariants:invariantOwner() (runs: 256, calls: 3840, reverts: 3469)
 ERC721Invariants:invariantTotalSupply() (runs: 256, calls: 3840, reverts: 3469)
 ERC721Test:testApproveClearingApprovalWithNoPriorApproval() (gas: 177294)
@@ -469,31 +469,31 @@ ERC721Test:testBurnSuccessViaApproveAndSetApprovalForAll() (gas: 371421)
 ERC721Test:testCachedDomainSeparator() (gas: 7699)
 ERC721Test:testDomainSeparator() (gas: 11450)
 ERC721Test:testEIP712Domain() (gas: 13877)
-ERC721Test:testFuzzApproveClearingApprovalWithNoPriorApproval(address,address) (runs: 256, μ: 196789, ~: 196799)
+ERC721Test:testFuzzApproveClearingApprovalWithNoPriorApproval(address,address) (runs: 256, μ: 196799, ~: 196799)
 ERC721Test:testFuzzApproveClearingApprovalWithPriorApproval(address,address) (runs: 256, μ: 184072, ~: 184072)
 ERC721Test:testFuzzApproveFromNonOwner(address) (runs: 256, μ: 172895, ~: 172895)
 ERC721Test:testFuzzApproveFromOperatorAddress(address,address,address) (runs: 256, μ: 222958, ~: 222958)
-ERC721Test:testFuzzApproveWithNoPriorApproval(address,address) (runs: 256, μ: 196744, ~: 196754)
-ERC721Test:testFuzzApproveWithPriorApproval(address,address) (runs: 256, μ: 203874, ~: 203884)
-ERC721Test:testFuzzBurnSuccess(address) (runs: 256, μ: 305599, ~: 305600)
-ERC721Test:testFuzzDomainSeparator(uint8) (runs: 256, μ: 11643, ~: 11663)
-ERC721Test:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 19581, ~: 19542)
-ERC721Test:testFuzzGetApprovedApprovedTokenId(address,address) (runs: 256, μ: 194375, ~: 194385)
+ERC721Test:testFuzzApproveWithNoPriorApproval(address,address) (runs: 256, μ: 196754, ~: 196754)
+ERC721Test:testFuzzApproveWithPriorApproval(address,address) (runs: 256, μ: 203884, ~: 203884)
+ERC721Test:testFuzzBurnSuccess(address) (runs: 256, μ: 305615, ~: 305600)
+ERC721Test:testFuzzDomainSeparator(uint8) (runs: 256, μ: 11642, ~: 11663)
+ERC721Test:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 19582, ~: 19542)
+ERC721Test:testFuzzGetApprovedApprovedTokenId(address,address) (runs: 256, μ: 194385, ~: 194385)
 ERC721Test:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 201667, ~: 201665)
 ERC721Test:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 227137, ~: 227133)
 ERC721Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13938, ~: 13938)
 ERC721Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48380, ~: 48364)
 ERC721Test:testFuzzSafeMintNonMinter(address) (runs: 256, μ: 15894, ~: 15894)
-ERC721Test:testFuzzSafeMintSuccess(address[]) (runs: 256, μ: 20784423, ~: 20093710)
-ERC721Test:testFuzzSafeTransferFromWithData(address,address,address,bytes) (runs: 256, μ: 1428999, ~: 1429883)
+ERC721Test:testFuzzSafeMintSuccess(address[]) (runs: 256, μ: 21329561, ~: 20702624)
+ERC721Test:testFuzzSafeTransferFromWithData(address,address,address,bytes) (runs: 256, μ: 1429053, ~: 1429893)
 ERC721Test:testFuzzSetApprovalForAllSuccess(address,address) (runs: 256, μ: 188481, ~: 188481)
 ERC721Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 15822, ~: 15749)
 ERC721Test:testFuzzSetMinterSuccess(string) (runs: 256, μ: 33217, ~: 33216)
-ERC721Test:testFuzzTokenByIndex(address,string[]) (runs: 256, μ: 21309526, ~: 21172166)
-ERC721Test:testFuzzTotalSupply(address,string[]) (runs: 256, μ: 21180757, ~: 21043655)
-ERC721Test:testFuzzTransferFrom(address,address,address) (runs: 256, μ: 560100, ~: 560080)
+ERC721Test:testFuzzTokenByIndex(address,string[]) (runs: 256, μ: 21365639, ~: 21253069)
+ERC721Test:testFuzzTotalSupply(address,string[]) (runs: 256, μ: 21236515, ~: 21123504)
+ERC721Test:testFuzzTransferFrom(address,address,address) (runs: 256, μ: 560101, ~: 560080)
 ERC721Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14090, ~: 14090)
-ERC721Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 73919, ~: 73892)
+ERC721Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 73920, ~: 73892)
 ERC721Test:testGetApprovedApprovedTokenId() (gas: 194287)
 ERC721Test:testGetApprovedInvalidTokenId() (gas: 11097)
 ERC721Test:testGetApprovedNotApprovedTokenId() (gas: 170525)
@@ -556,19 +556,19 @@ ERC721Test:testTransferOwnershipToZeroAddress() (gas: 15608)
 MathTest:testCbrtRoundDown() (gas: 41439)
 MathTest:testCbrtRoundUp() (gas: 42219)
 MathTest:testCeilDiv() (gas: 12525)
-MathTest:testFuzzCbrt(uint256,bool) (runs: 256, μ: 19462, ~: 19281)
+MathTest:testFuzzCbrt(uint256,bool) (runs: 256, μ: 19460, ~: 19236)
 MathTest:testFuzzCeilDiv(uint256,uint256) (runs: 256, μ: 8984, ~: 9001)
 MathTest:testFuzzInt256Average(int256,int256) (runs: 256, μ: 5572, ~: 5572)
 MathTest:testFuzzIsNegative(int256) (runs: 256, μ: 5646, ~: 5646)
-MathTest:testFuzzLog10(uint256,bool) (runs: 256, μ: 6971, ~: 6961)
-MathTest:testFuzzLog2(uint256,bool) (runs: 256, μ: 6846, ~: 6825)
-MathTest:testFuzzLog256(uint256,bool) (runs: 256, μ: 6872, ~: 6849)
+MathTest:testFuzzLog10(uint256,bool) (runs: 256, μ: 6972, ~: 6961)
+MathTest:testFuzzLog2(uint256,bool) (runs: 256, μ: 6846, ~: 6823)
+MathTest:testFuzzLog256(uint256,bool) (runs: 256, μ: 6871, ~: 6844)
 MathTest:testFuzzMulDiv(uint256,uint256,uint256) (runs: 256, μ: 12924, ~: 12671)
-MathTest:testFuzzMulDivDomain(uint256,uint256,uint256) (runs: 256, μ: 10507, ~: 10592)
+MathTest:testFuzzMulDivDomain(uint256,uint256,uint256) (runs: 256, μ: 10509, ~: 10592)
 MathTest:testFuzzUint256Average(uint256,uint256) (runs: 256, μ: 5785, ~: 5785)
-MathTest:testFuzzWadCbrt(uint256) (runs: 256, μ: 19005, ~: 18672)
-MathTest:testFuzzWadExp(int256) (runs: 256, μ: 15197, ~: 15267)
-MathTest:testFuzzWadLn(int256) (runs: 256, μ: 16704, ~: 16398)
+MathTest:testFuzzWadCbrt(uint256) (runs: 256, μ: 18995, ~: 18663)
+MathTest:testFuzzWadExp(int256) (runs: 256, μ: 15196, ~: 15267)
+MathTest:testFuzzWadLn(int256) (runs: 256, μ: 16715, ~: 16506)
 MathTest:testInt256Average() (gas: 11898)
 MathTest:testIsNegative() (gas: 10280)
 MathTest:testLog10RoundDown() (gas: 17707)
@@ -589,8 +589,8 @@ MathTest:testWadExp() (gas: 23617)
 MathTest:testWadExpOverflow() (gas: 11149)
 MathTest:testWadLn() (gas: 24196)
 MathTest:testWadLnNegativeValues() (gas: 11130)
-MerkleProofVerificationTest:testFuzzMultiProofVerifySingleLeaf(bytes32[],uint256) (runs: 256, μ: 1649976160, ~: 1649972674)
-MerkleProofVerificationTest:testFuzzVerify(bytes32[],uint256) (runs: 256, μ: 135974872, ~: 135971462)
+MerkleProofVerificationTest:testFuzzMultiProofVerifySingleLeaf(bytes32[],uint256) (runs: 256, μ: 1649976156, ~: 1649972704)
+MerkleProofVerificationTest:testFuzzVerify(bytes32[],uint256) (runs: 256, μ: 135974868, ~: 135971492)
 MerkleProofVerificationTest:testFuzzVerifyMultiProofMultipleLeaves(bool,bool,bool) (runs: 256, μ: 412472467, ~: 412472462)
 MerkleProofVerificationTest:testInvalidMerkleMultiProof() (gas: 412478415)
 MerkleProofVerificationTest:testInvalidMerkleProof() (gas: 33970390)
@@ -615,7 +615,7 @@ Ownable2StepInvariants:invariantPendingOwner() (runs: 256, calls: 3840, reverts:
 Ownable2StepTest:testAcceptOwnershipNonPendingOwner() (gas: 46604)
 Ownable2StepTest:testAcceptOwnershipSuccess() (gas: 39404)
 Ownable2StepTest:testFuzzAcceptOwnershipNonPendingOwner(address) (runs: 256, μ: 45814, ~: 45814)
-Ownable2StepTest:testFuzzAcceptOwnershipSuccess(address,address) (runs: 256, μ: 65112, ~: 65084)
+Ownable2StepTest:testFuzzAcceptOwnershipSuccess(address,address) (runs: 256, μ: 65110, ~: 65084)
 Ownable2StepTest:testFuzzPendingOwnerResetAfterRenounceOwnership(address) (runs: 256, μ: 38751, ~: 38735)
 Ownable2StepTest:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13954, ~: 13954)
 Ownable2StepTest:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 43684, ~: 43668)
diff --git a/foundry.toml b/foundry.toml
index 26ec3a95..d1bae026 100644
--- a/foundry.toml
+++ b/foundry.toml
@@ -13,7 +13,7 @@ invariant = { runs = 256 }                                  # the number of runs
 ffi = true                                                  # whether to enable foreign function interface (ffi) cheatcodes or not
 verbosity = 3                                               # the verbosity of tests
 fs_permissions = [{ access = "read-write", path = "./"}]    # set read-write access to project root
-solc_version = '0.8.22'                                     # override for the solc version
+solc_version = '0.8.23'                                     # override for the solc version
 evm_version = 'shanghai'                                    # set the EVM target version
 
 ## default overrides for the CI runs
diff --git a/lib/create-util b/lib/create-util
index cb5f7ffc..30480dac 160000
--- a/lib/create-util
+++ b/lib/create-util
@@ -1,1 +1,1 @@
-Subproject commit cb5f7ffc35638aafe159d26e028049ee8116acc2
+Subproject commit 30480dac0edf5fd543d38b06de8e613c152e0d80
diff --git a/lib/forge-std b/lib/forge-std
index 267acd30..37a37ab7 160000
--- a/lib/forge-std
+++ b/lib/forge-std
@@ -1,1 +1,1 @@
-Subproject commit 267acd30a625086b3f16e1a28cfe0c5097fa46b8
+Subproject commit 37a37ab73364d6644bfe11edf88a07880f99bd56
diff --git a/lib/openzeppelin-contracts b/lib/openzeppelin-contracts
index 94697be8..7de6fd4a 160000
--- a/lib/openzeppelin-contracts
+++ b/lib/openzeppelin-contracts
@@ -1,1 +1,1 @@
-Subproject commit 94697be8a3f0dfcd95dfb13ffbd39b5973f5c65d
+Subproject commit 7de6fd4a2604764497990bcc0013f95763713190
diff --git a/lib/utils/VyperDeployer.sol b/lib/utils/VyperDeployer.sol
index 5f1ce434..f1ec872f 100644
--- a/lib/utils/VyperDeployer.sol
+++ b/lib/utils/VyperDeployer.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {Create} from "create-util/Create.sol";
 
diff --git a/package.json b/package.json
index 76830d3b..f5fa8587 100644
--- a/package.json
+++ b/package.json
@@ -43,7 +43,7 @@
     "keccak256": "^1.0.6",
     "merkletreejs": "^0.3.11",
     "prettier": "^3.0.3",
-    "prettier-plugin-solidity": "^1.1.3",
+    "prettier-plugin-solidity": "^1.2.0",
     "solhint": "^4.0.0"
   }
 }
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 2e777059..38f68cf5 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -27,8 +27,8 @@ devDependencies:
     specifier: ^3.0.3
     version: 3.0.3
   prettier-plugin-solidity:
-    specifier: ^1.1.3
-    version: 1.1.3(prettier@3.0.3)
+    specifier: ^1.2.0
+    version: 1.2.0(prettier@3.0.3)
   solhint:
     specifier: ^4.0.0
     version: 4.0.0
@@ -567,10 +567,10 @@ packages:
     engines: { node: ">=14.16" }
     dev: true
 
-  /@solidity-parser/parser@0.16.1:
+  /@solidity-parser/parser@0.16.2:
     resolution:
       {
-        integrity: sha512-PdhRFNhbTtu3x8Axm0uYpqOy/lODYQK+MlYSgqIsq2L8SFYEHJPHNUiOTAJbDGzNjjr1/n9AcIayxafR/fWmYw==,
+        integrity: sha512-PI9NfoA3P8XK2VBkK5oIfRgKDsicwDZfkVq9ZTBCQYGOP1N2owgY2dyLGyU5/J/hQs8KRk55kdmvTLjy3Mu3vg==,
       }
     dependencies:
       antlr4ts: 0.5.0-alpha.4
@@ -586,10 +586,10 @@ packages:
       defer-to-connect: 2.0.1
     dev: true
 
-  /@types/http-cache-semantics@4.0.3:
+  /@types/http-cache-semantics@4.0.4:
     resolution:
       {
-        integrity: sha512-V46MYLFp08Wf2mmaBhvgjStM3tPa+2GAdy/iqoX+noX1//zje2x4XmrIU0cAwyClATsTmahbtoQ2EwP7I5WSiA==,
+        integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==,
       }
     dev: true
 
@@ -823,7 +823,7 @@ packages:
       }
     engines: { node: ">=14.16" }
     dependencies:
-      "@types/http-cache-semantics": 4.0.3
+      "@types/http-cache-semantics": 4.0.4
       get-stream: 6.0.1
       http-cache-semantics: 4.1.1
       keyv: 4.5.4
@@ -2036,16 +2036,16 @@ packages:
     engines: { node: ">= 0.8.0" }
     dev: true
 
-  /prettier-plugin-solidity@1.1.3(prettier@3.0.3):
+  /prettier-plugin-solidity@1.2.0(prettier@3.0.3):
     resolution:
       {
-        integrity: sha512-fQ9yucPi2sBbA2U2Xjh6m4isUTJ7S7QLc/XDDsktqqxYfTwdYKJ0EnnywXHwCGAaYbQNK+HIYPL1OemxuMsgeg==,
+        integrity: sha512-fgxcUZpVAP+LlRfy5JI5oaAkXGkmsje2VJ5krv/YMm+rcTZbIUwFguSw5f+WFuttMjpDm6wB4UL7WVkArEfiVA==,
       }
-    engines: { node: ">=12" }
+    engines: { node: ">=16" }
     peerDependencies:
-      prettier: ">=2.3.0 || >=3.0.0-alpha.0"
+      prettier: ">=2.3.0"
     dependencies:
-      "@solidity-parser/parser": 0.16.1
+      "@solidity-parser/parser": 0.16.2
       prettier: 3.0.3
       semver: 7.5.4
       solidity-comments-extractor: 0.0.7
@@ -2270,7 +2270,7 @@ packages:
       }
     hasBin: true
     dependencies:
-      "@solidity-parser/parser": 0.16.1
+      "@solidity-parser/parser": 0.16.2
       ajv: 6.12.6
       antlr4: 4.13.1
       ast-parents: 0.0.1
diff --git a/src/extensions/ERC4626.vy b/src/extensions/ERC4626.vy
index 4e7066fd..c6775ecf 100644
--- a/src/extensions/ERC4626.vy
+++ b/src/extensions/ERC4626.vy
@@ -24,32 +24,29 @@
         https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/ERC4626.sol,
         as well as by fubuloubu's implementation here:
         https://github.com/fubuloubu/ERC4626/blob/main/contracts/VyperVault.vy.
-@custom:security Most of the following security analysis was sourced from OpenZeppelin's
-                 implementation: This implementation uses virtual assets and shares to
-                 mitigate the risk of inflation attacks. The `internal` `immutable` variable
-                 `_DECIMALS_OFFSET` corresponds to an offset in the decimal representation
-                 between the underlying asset's decimals and the vault decimals. This offset
-                 also determines the rate of virtual shares to virtual assets in the vault,
-                 which itself determines the initial exchange rate. While not fully
-                 preventing the attack, analysis (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/docs/modules/ROOT/pages/erc4626.adoc#security-concern-inflation-attack)
-                 shows that a standard offset of `0` makes it non-profitable, as a result
-                 of the value being captured by the virtual shares (out of the attacker's
-                 donation) matching the attacker's expected gains. With a larger offset,
-                 the attack becomes orders of magnitude more expensive than it is profitable.
+@custom:security Most of the following security analysis was sourced from OpenZeppelin's implementation:
+                 This implementation uses virtual assets and shares to help developers mitigate the risk
+                 of inflation attacks. The `internal` `immutable` variable `_DECIMALS_OFFSET` corresponds
+                 to an offset in the decimal representation between the underlying asset's decimals and the
+                 vault decimals. This offset also determines the rate of virtual shares to virtual assets
+                 in the vault, which itself determines the initial exchange rate. While not fully preventing
+                 the attack, analysis (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/docs/modules/ROOT/pages/erc4626.adoc#security-concern-inflation-attack)
+                 shows that a standard offset of `0` makes it non-profitable even if an attacker is able to
+                 capture value from multiple user deposits, as a result of the value being captured by the
+                 virtual shares (out of the attacker's donation) matching the attacker's expected gains. With
+                 a larger offset, the attack becomes orders of magnitude more expensive than it is profitable.
                  More details about the underlying mathematics can be found here:
                  https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/docs/modules/ROOT/pages/erc4626.adoc#security-concern-inflation-attack.
 
-                 Furthermore, another potential approach would be that vault deployers can
-                 protect against this attack by making an initial deposit of a non-trivial
-                 amount of the asset, such that price manipulation becomes infeasible. For
-                 the detailed discussion, please refer to:
+                 Furthermore, another potential approach would be that vault deployers can protect against
+                 this attack by making an initial deposit of a non-trivial amount of the asset, such that
+                 price manipulation becomes infeasible. For the detailed discussion, please refer to:
                  https://ethereum-magicians.org/t/address-eip-4626-inflation-attacks-with-virtual-shares-and-assets/12677.
 
-                 The drawback of the implemented approach is that the virtual shares do
-                 capture (a very small) part of the value being accrued to the vault. Also,
-                 if the vault experiences losses, the users try to exit the vault, the virtual
-                 shares and assets will cause the first user to exit to experience reduced losses
-                 in detriment to the last users that will experience bigger losses.
+                 The drawback of the implemented approach is that the virtual shares do capture (a very small)
+                 part of the value being accrued to the vault. Also, if the vault experiences losses, the users
+                 try to exit the vault, the virtual shares and assets will cause the first user to exit to
+                 experience reduced losses in detriment to the last users that will experience bigger losses.
 """
 
 


Test patch:
diff --git a/test/auth/AccessControl.t.sol b/test/auth/AccessControl.t.sol
index c344add7..43eae8ab 100644
--- a/test/auth/AccessControl.t.sol
+++ b/test/auth/AccessControl.t.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {Test} from "forge-std/Test.sol";
 import {VyperDeployer} from "utils/VyperDeployer.sol";
diff --git a/test/auth/Ownable.t.sol b/test/auth/Ownable.t.sol
index dd8e5d47..6e74b347 100644
--- a/test/auth/Ownable.t.sol
+++ b/test/auth/Ownable.t.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {Test} from "forge-std/Test.sol";
 import {VyperDeployer} from "utils/VyperDeployer.sol";
diff --git a/test/auth/Ownable2Step.t.sol b/test/auth/Ownable2Step.t.sol
index 9293f002..e26d0ed7 100644
--- a/test/auth/Ownable2Step.t.sol
+++ b/test/auth/Ownable2Step.t.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {Test} from "forge-std/Test.sol";
 import {VyperDeployer} from "utils/VyperDeployer.sol";
diff --git a/test/auth/interfaces/IAccessControlExtended.sol b/test/auth/interfaces/IAccessControlExtended.sol
index 82455b38..3d3df270 100644
--- a/test/auth/interfaces/IAccessControlExtended.sol
+++ b/test/auth/interfaces/IAccessControlExtended.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {IERC165} from "openzeppelin/utils/introspection/IERC165.sol";
 import {IAccessControl} from "openzeppelin/access/IAccessControl.sol";
diff --git a/test/auth/interfaces/IOwnable.sol b/test/auth/interfaces/IOwnable.sol
index fd9ab8d8..629dbcb2 100644
--- a/test/auth/interfaces/IOwnable.sol
+++ b/test/auth/interfaces/IOwnable.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 interface IOwnable {
     event OwnershipTransferred(
diff --git a/test/auth/interfaces/IOwnable2Step.sol b/test/auth/interfaces/IOwnable2Step.sol
index 248206b9..18c98f85 100644
--- a/test/auth/interfaces/IOwnable2Step.sol
+++ b/test/auth/interfaces/IOwnable2Step.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 interface IOwnable2Step {
     event OwnershipTransferStarted(
diff --git a/test/extensions/ERC2981.t.sol b/test/extensions/ERC2981.t.sol
index a835c7b1..9327b1bf 100644
--- a/test/extensions/ERC2981.t.sol
+++ b/test/extensions/ERC2981.t.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {Test} from "forge-std/Test.sol";
 import {VyperDeployer} from "utils/VyperDeployer.sol";
diff --git a/test/extensions/ERC4626.t.sol b/test/extensions/ERC4626.t.sol
index fb8587d2..7c526658 100644
--- a/test/extensions/ERC4626.t.sol
+++ b/test/extensions/ERC4626.t.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {Test} from "forge-std/Test.sol";
 import {ERC4626Test} from "erc4626-tests/ERC4626.test.sol";
diff --git a/test/extensions/interfaces/IERC2981Extended.sol b/test/extensions/interfaces/IERC2981Extended.sol
index d0c570e9..043302c0 100644
--- a/test/extensions/interfaces/IERC2981Extended.sol
+++ b/test/extensions/interfaces/IERC2981Extended.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {IERC2981} from "openzeppelin/interfaces/IERC2981.sol";
 
diff --git a/test/extensions/interfaces/IERC4626Extended.sol b/test/extensions/interfaces/IERC4626Extended.sol
index b649bed7..1c225583 100644
--- a/test/extensions/interfaces/IERC4626Extended.sol
+++ b/test/extensions/interfaces/IERC4626Extended.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {IERC20Metadata} from "openzeppelin/token/ERC20/extensions/IERC20Metadata.sol";
 import {IERC20Permit} from "openzeppelin/token/ERC20/extensions/IERC20Permit.sol";
@@ -7,6 +7,9 @@ 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 {
-
-}
+interface IERC4626Extended is
+    IERC20Metadata,
+    IERC20Permit,
+    IERC4626,
+    IERC5267
+{}
diff --git a/test/extensions/mocks/ERC20ExcessDecimalsMock.sol b/test/extensions/mocks/ERC20ExcessDecimalsMock.sol
index d59ce148..e4b4e7d8 100644
--- a/test/extensions/mocks/ERC20ExcessDecimalsMock.sol
+++ b/test/extensions/mocks/ERC20ExcessDecimalsMock.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: MIT
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 /**
  * @title ERC20ExcessDecimalsMock
diff --git a/test/tokens/ERC1155.t.sol b/test/tokens/ERC1155.t.sol
index 41465821..ac4ae342 100644
--- a/test/tokens/ERC1155.t.sol
+++ b/test/tokens/ERC1155.t.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {Test} from "forge-std/Test.sol";
 import {VyperDeployer} from "utils/VyperDeployer.sol";
diff --git a/test/tokens/ERC20.t.sol b/test/tokens/ERC20.t.sol
index d7042822..56e02b2d 100644
--- a/test/tokens/ERC20.t.sol
+++ b/test/tokens/ERC20.t.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {Test} from "forge-std/Test.sol";
 import {VyperDeployer} from "utils/VyperDeployer.sol";
diff --git a/test/tokens/ERC721.t.sol b/test/tokens/ERC721.t.sol
index a113e93c..b1e69816 100644
--- a/test/tokens/ERC721.t.sol
+++ b/test/tokens/ERC721.t.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {Test} from "forge-std/Test.sol";
 import {stdError} from "forge-std/StdError.sol";
diff --git a/test/tokens/interfaces/IERC1155Extended.sol b/test/tokens/interfaces/IERC1155Extended.sol
index 1c180994..bf87c467 100644
--- a/test/tokens/interfaces/IERC1155Extended.sol
+++ b/test/tokens/interfaces/IERC1155Extended.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {IERC1155MetadataURI} from "openzeppelin/token/ERC1155/extensions/IERC1155MetadataURI.sol";
 
diff --git a/test/tokens/interfaces/IERC20Extended.sol b/test/tokens/interfaces/IERC20Extended.sol
index fd1e75c2..f678cdb1 100644
--- a/test/tokens/interfaces/IERC20Extended.sol
+++ b/test/tokens/interfaces/IERC20Extended.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {IERC20Metadata} from "openzeppelin/token/ERC20/extensions/IERC20Metadata.sol";
 import {IERC20Permit} from "openzeppelin/token/ERC20/extensions/IERC20Permit.sol";
diff --git a/test/tokens/interfaces/IERC4494.sol b/test/tokens/interfaces/IERC4494.sol
index ec80df07..2d99b238 100644
--- a/test/tokens/interfaces/IERC4494.sol
+++ b/test/tokens/interfaces/IERC4494.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {IERC165} from "openzeppelin/utils/introspection/IERC165.sol";
 
diff --git a/test/tokens/interfaces/IERC721Extended.sol b/test/tokens/interfaces/IERC721Extended.sol
index f8112b39..b3d737b0 100644
--- a/test/tokens/interfaces/IERC721Extended.sol
+++ b/test/tokens/interfaces/IERC721Extended.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {IERC721Metadata} from "openzeppelin/token/ERC721/extensions/IERC721Metadata.sol";
 import {IERC721Enumerable} from "openzeppelin/token/ERC721/extensions/IERC721Enumerable.sol";
diff --git a/test/tokens/mocks/ERC1155ReceiverMock.sol b/test/tokens/mocks/ERC1155ReceiverMock.sol
index c659e060..9185f95f 100644
--- a/test/tokens/mocks/ERC1155ReceiverMock.sol
+++ b/test/tokens/mocks/ERC1155ReceiverMock.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: MIT
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {ERC165} from "openzeppelin/utils/introspection/ERC165.sol";
 import {IERC1155Receiver} from "openzeppelin/token/ERC1155/IERC1155Receiver.sol";
diff --git a/test/tokens/mocks/ERC721ReceiverMock.sol b/test/tokens/mocks/ERC721ReceiverMock.sol
index 4cbf199c..03b46c89 100644
--- a/test/tokens/mocks/ERC721ReceiverMock.sol
+++ b/test/tokens/mocks/ERC721ReceiverMock.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: MIT
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {IERC721Receiver} from "openzeppelin/token/ERC721/IERC721Receiver.sol";
 
diff --git a/test/utils/Base64.t.sol b/test/utils/Base64.t.sol
index e6d87255..6a35ebf4 100644
--- a/test/utils/Base64.t.sol
+++ b/test/utils/Base64.t.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {PRBTest} from "prb/test/PRBTest.sol";
 import {VyperDeployer} from "utils/VyperDeployer.sol";
diff --git a/test/utils/BatchDistributor.t.sol b/test/utils/BatchDistributor.t.sol
index 85920a2b..18c9b11b 100644
--- a/test/utils/BatchDistributor.t.sol
+++ b/test/utils/BatchDistributor.t.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {Test} from "forge-std/Test.sol";
 import {VyperDeployer} from "utils/VyperDeployer.sol";
diff --git a/test/utils/Create2Address.t.sol b/test/utils/Create2Address.t.sol
index 593d83fc..52ad90f0 100644
--- a/test/utils/Create2Address.t.sol
+++ b/test/utils/Create2Address.t.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {Test} from "forge-std/Test.sol";
 import {VyperDeployer} from "utils/VyperDeployer.sol";
diff --git a/test/utils/CreateAddress.t.sol b/test/utils/CreateAddress.t.sol
index e98cbb15..c9116943 100644
--- a/test/utils/CreateAddress.t.sol
+++ b/test/utils/CreateAddress.t.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {Test} from "forge-std/Test.sol";
 import {VyperDeployer} from "utils/VyperDeployer.sol";
diff --git a/test/utils/ECDSA.t.sol b/test/utils/ECDSA.t.sol
index 69ec801a..b224dc6b 100644
--- a/test/utils/ECDSA.t.sol
+++ b/test/utils/ECDSA.t.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {Test} from "forge-std/Test.sol";
 import {VyperDeployer} from "utils/VyperDeployer.sol";
diff --git a/test/utils/EIP712DomainSeparator.t.sol b/test/utils/EIP712DomainSeparator.t.sol
index 9443a00f..08c98f48 100644
--- a/test/utils/EIP712DomainSeparator.t.sol
+++ b/test/utils/EIP712DomainSeparator.t.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {Test} from "forge-std/Test.sol";
 import {VyperDeployer} from "utils/VyperDeployer.sol";
diff --git a/test/utils/Math.t.sol b/test/utils/Math.t.sol
index 50c3f448..0e9b1499 100644
--- a/test/utils/Math.t.sol
+++ b/test/utils/Math.t.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {Test} from "forge-std/Test.sol";
 import {VyperDeployer} from "utils/VyperDeployer.sol";
diff --git a/test/utils/MerkleProofVerification.t.sol b/test/utils/MerkleProofVerification.t.sol
index 2e8aba89..e5cd347e 100644
--- a/test/utils/MerkleProofVerification.t.sol
+++ b/test/utils/MerkleProofVerification.t.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {Test} from "forge-std/Test.sol";
 import {VyperDeployer} from "utils/VyperDeployer.sol";
diff --git a/test/utils/Multicall.t.sol b/test/utils/Multicall.t.sol
index 49c8677a..62b7294d 100644
--- a/test/utils/Multicall.t.sol
+++ b/test/utils/Multicall.t.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {Test} from "forge-std/Test.sol";
 import {VyperDeployer} from "utils/VyperDeployer.sol";
diff --git a/test/utils/SignatureChecker.t.sol b/test/utils/SignatureChecker.t.sol
index 164fd6f3..2f4bc67b 100644
--- a/test/utils/SignatureChecker.t.sol
+++ b/test/utils/SignatureChecker.t.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {Test} from "forge-std/Test.sol";
 import {VyperDeployer} from "utils/VyperDeployer.sol";
diff --git a/test/utils/interfaces/IBase64.sol b/test/utils/interfaces/IBase64.sol
index 9234e147..69f5c047 100644
--- a/test/utils/interfaces/IBase64.sol
+++ b/test/utils/interfaces/IBase64.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 interface IBase64 {
     function encode(
diff --git a/test/utils/interfaces/IBatchDistributor.sol b/test/utils/interfaces/IBatchDistributor.sol
index c3e955ac..1026e084 100644
--- a/test/utils/interfaces/IBatchDistributor.sol
+++ b/test/utils/interfaces/IBatchDistributor.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {IERC20} from "openzeppelin/token/ERC20/IERC20.sol";
 
diff --git a/test/utils/interfaces/ICreate2Address.sol b/test/utils/interfaces/ICreate2Address.sol
index 6d88333c..ad829609 100644
--- a/test/utils/interfaces/ICreate2Address.sol
+++ b/test/utils/interfaces/ICreate2Address.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 interface ICreate2Address {
     function compute_address_self(
diff --git a/test/utils/interfaces/ICreateAddress.sol b/test/utils/interfaces/ICreateAddress.sol
index d5fb5e5f..dd002989 100644
--- a/test/utils/interfaces/ICreateAddress.sol
+++ b/test/utils/interfaces/ICreateAddress.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 interface ICreateAddress {
     function compute_address_rlp_self(
diff --git a/test/utils/interfaces/IECDSA.sol b/test/utils/interfaces/IECDSA.sol
index a978b1d8..b6588e43 100644
--- a/test/utils/interfaces/IECDSA.sol
+++ b/test/utils/interfaces/IECDSA.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 interface IECDSA {
     function recover_sig(
diff --git a/test/utils/interfaces/IEIP712DomainSeparator.sol b/test/utils/interfaces/IEIP712DomainSeparator.sol
index 04494b9d..cf2ffa0b 100644
--- a/test/utils/interfaces/IEIP712DomainSeparator.sol
+++ b/test/utils/interfaces/IEIP712DomainSeparator.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {IERC5267} from "openzeppelin/interfaces/IERC5267.sol";
 
diff --git a/test/utils/interfaces/IMath.sol b/test/utils/interfaces/IMath.sol
index 33f41e12..e2fa72e2 100644
--- a/test/utils/interfaces/IMath.sol
+++ b/test/utils/interfaces/IMath.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 interface IMath {
     function uint256_average(
diff --git a/test/utils/interfaces/IMerkleProofVerification.sol b/test/utils/interfaces/IMerkleProofVerification.sol
index 645d31d1..b740cbbe 100644
--- a/test/utils/interfaces/IMerkleProofVerification.sol
+++ b/test/utils/interfaces/IMerkleProofVerification.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 interface IMerkleProofVerification {
     function verify(
diff --git a/test/utils/interfaces/IMulticall.sol b/test/utils/interfaces/IMulticall.sol
index a9f8b3e9..4afa886b 100644
--- a/test/utils/interfaces/IMulticall.sol
+++ b/test/utils/interfaces/IMulticall.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 interface IMulticall {
     struct Batch {
diff --git a/test/utils/interfaces/ISignatureChecker.sol b/test/utils/interfaces/ISignatureChecker.sol
index 33bb99bc..2386e53d 100644
--- a/test/utils/interfaces/ISignatureChecker.sol
+++ b/test/utils/interfaces/ISignatureChecker.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: WTFPL
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 interface ISignatureChecker {
     function is_valid_signature_now(
diff --git a/test/utils/mocks/Create2Impl.sol b/test/utils/mocks/Create2Impl.sol
index 335d807b..3afdd15b 100644
--- a/test/utils/mocks/Create2Impl.sol
+++ b/test/utils/mocks/Create2Impl.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: MIT
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {Create2} from "openzeppelin/utils/Create2.sol";
 
diff --git a/test/utils/mocks/ERC1271MaliciousMock.sol b/test/utils/mocks/ERC1271MaliciousMock.sol
index a606712f..c4a39baf 100644
--- a/test/utils/mocks/ERC1271MaliciousMock.sol
+++ b/test/utils/mocks/ERC1271MaliciousMock.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: MIT
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {IERC1271} from "openzeppelin/interfaces/IERC1271.sol";
 
diff --git a/test/utils/mocks/ERC1271WalletMock.sol b/test/utils/mocks/ERC1271WalletMock.sol
index 7d728c0c..433c8d2c 100644
--- a/test/utils/mocks/ERC1271WalletMock.sol
+++ b/test/utils/mocks/ERC1271WalletMock.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: MIT
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {Ownable} from "openzeppelin/access/Ownable.sol";
 import {IERC1271} from "openzeppelin/interfaces/IERC1271.sol";
diff --git a/test/utils/mocks/ERC20Mock.sol b/test/utils/mocks/ERC20Mock.sol
index deb3a6fa..b7d91b4f 100644
--- a/test/utils/mocks/ERC20Mock.sol
+++ b/test/utils/mocks/ERC20Mock.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: MIT
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 import {ERC20} from "openzeppelin/token/ERC20/ERC20.sol";
 
diff --git a/test/utils/mocks/EtherReceiver.sol b/test/utils/mocks/EtherReceiver.sol
index 82733fc7..c9dae227 100644
--- a/test/utils/mocks/EtherReceiver.sol
+++ b/test/utils/mocks/EtherReceiver.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: MIT
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 /**
  * @title EtherReceiver
diff --git a/test/utils/mocks/MockCallee.sol b/test/utils/mocks/MockCallee.sol
index 8ec75120..129883c7 100644
--- a/test/utils/mocks/MockCallee.sol
+++ b/test/utils/mocks/MockCallee.sol
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: MIT
-pragma solidity ^0.8.22;
+pragma solidity ^0.8.23;
 
 /**
  * @dev Error that occurs when a method reverts.