Repository: pcaversaccio/snekmate (language: python)

Issue:
♻️ Use Keyword Arguments for Event Instantiation
Vyper changed event instantiation from taking positional arguments to taking keyword arguments (see PR [#4257](https://github.com/vyperlang/vyper/pull/4257)). We need to refactor all 🐍 snekmate event instantiations accordingly.


Discussion / hints:

Fix patch:
diff --git a/.gas-snapshot b/.gas-snapshot
index 0238b7a8..2302fce1 100644
--- a/.gas-snapshot
+++ b/.gas-snapshot
@@ -9,7 +9,7 @@ AccessControlTest:testFuzzRenounceRoleNonMsgSender(address) (runs: 256, μ: 9474
 AccessControlTest:testFuzzRenounceRoleSuccess(address) (runs: 256, μ: 41996, ~: 41981)
 AccessControlTest:testFuzzRevokeRoleMultipleTimesSuccess(address) (runs: 256, μ: 41708, ~: 41693)
 AccessControlTest:testFuzzRevokeRoleNonAdmin(address,address) (runs: 256, μ: 16390, ~: 16390)
-AccessControlTest:testFuzzRevokeRoleSuccess(address) (runs: 256, μ: 40524, ~: 40510)
+AccessControlTest:testFuzzRevokeRoleSuccess(address) (runs: 256, μ: 40525, ~: 40510)
 AccessControlTest:testFuzzSetRoleAdminPreviousAdminCallsGrantRole(address,address) (runs: 256, μ: 75962, ~: 75962)
 AccessControlTest:testFuzzSetRoleAdminPreviousAdminCallsRevokeRole(address,address) (runs: 256, μ: 101503, ~: 101503)
 AccessControlTest:testFuzzSetRoleAdminSuccess(address,address) (runs: 256, μ: 91053, ~: 91053)
@@ -17,7 +17,7 @@ AccessControlTest:testGrantRoleAdminRoleSuccess() (gas: 44805)
 AccessControlTest:testGrantRoleMultipleTimesSuccess() (gas: 50832)
 AccessControlTest:testGrantRoleNonAdmin() (gas: 14689)
 AccessControlTest:testGrantRoleSuccess() (gas: 45015)
-AccessControlTest:testInitialSetup() (gas: 479221)
+AccessControlTest:testInitialSetup() (gas: 479236)
 AccessControlTest:testRenounceRoleAdminRoleSuccess() (gas: 20892)
 AccessControlTest:testRenounceRoleMultipleTimesSuccess() (gas: 46584)
 AccessControlTest:testRenounceRoleNonMsgSender() (gas: 10335)
@@ -61,8 +61,8 @@ BatchDistributorTest:testDistributeTokenMultipleAddressesSuccess() (gas: 617057)
 BatchDistributorTest:testDistributeTokenOneAddressSuccess() (gas: 579047)
 BatchDistributorTest:testDistributeTokenRevertWithInsufficientAllowance() (gas: 573557)
 BatchDistributorTest:testDistributeTokenRevertWithInsufficientBalance() (gas: 574210)
-BatchDistributorTest:testFuzzDistributeEtherMultipleAddressesSuccess(((address,uint256)[]),uint256) (runs: 256, μ: 1749651, ~: 1784036)
-BatchDistributorTest:testFuzzDistributeTokenMultipleAddressesSuccess(((address,uint256)[]),address,uint256) (runs: 256, μ: 1325426, ~: 1251024)
+BatchDistributorTest:testFuzzDistributeEtherMultipleAddressesSuccess(((address,uint256)[]),uint256) (runs: 256, μ: 1753753, ~: 1784036)
+BatchDistributorTest:testFuzzDistributeTokenMultipleAddressesSuccess(((address,uint256)[]),address,uint256) (runs: 256, μ: 1325439, ~: 1251024)
 Create2AddressTest:testComputeAddress() (gas: 532144)
 Create2AddressTest:testComputeAddressSelf() (gas: 540803)
 Create2AddressTest:testFuzzComputeAddress(bytes32,address) (runs: 256, μ: 532738, ~: 532738)
@@ -88,26 +88,26 @@ CreateAddressTest:testComputeAddressSelfNonceUint56() (gas: 534900)
 CreateAddressTest:testComputeAddressSelfNonceUint64() (gas: 534981)
 CreateAddressTest:testComputeAddressSelfNonceUint8() (gas: 534627)
 CreateAddressTest:testComputeAddressSelfRevertTooHighNonce() (gas: 8874)
-CreateAddressTest:testFuzzComputeAddressNonce0x7f(uint64,address) (runs: 256, μ: 533146, ~: 533224)
-CreateAddressTest:testFuzzComputeAddressNonceUint16(uint64,address) (runs: 256, μ: 532581, ~: 532831)
-CreateAddressTest:testFuzzComputeAddressNonceUint24(uint64,address) (runs: 256, μ: 532706, ~: 532789)
-CreateAddressTest:testFuzzComputeAddressNonceUint32(uint64,address) (runs: 256, μ: 532697, ~: 532818)
-CreateAddressTest:testFuzzComputeAddressNonceUint40(uint64,address) (runs: 256, μ: 532821, ~: 532888)
-CreateAddressTest:testFuzzComputeAddressNonceUint48(uint64,address) (runs: 256, μ: 532794, ~: 532894)
-CreateAddressTest:testFuzzComputeAddressNonceUint56(uint64,address) (runs: 256, μ: 532858, ~: 532942)
-CreateAddressTest:testFuzzComputeAddressNonceUint64(uint64,address) (runs: 256, μ: 532894, ~: 532992)
-CreateAddressTest:testFuzzComputeAddressNonceUint8(uint64,address) (runs: 256, μ: 532603, ~: 532663)
-CreateAddressTest:testFuzzComputeAddressRevertTooHighNonce(uint256,address) (runs: 256, μ: 12841, ~: 13144)
-CreateAddressTest:testFuzzComputeAddressSelfNonce0x7f(uint64) (runs: 256, μ: 539385, ~: 539445)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint16(uint64) (runs: 256, μ: 538623, ~: 538903)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint24(uint64) (runs: 256, μ: 538962, ~: 539043)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint32(uint64) (runs: 256, μ: 538952, ~: 539051)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint40(uint64) (runs: 256, μ: 539046, ~: 539122)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint48(uint64) (runs: 256, μ: 539044, ~: 539109)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint56(uint64) (runs: 256, μ: 539115, ~: 539175)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint64(uint64) (runs: 256, μ: 539210, ~: 539296)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint8(uint64) (runs: 256, μ: 538716, ~: 538769)
-CreateAddressTest:testFuzzComputeAddressSelfRevertTooHighNonce(uint256) (runs: 256, μ: 12680, ~: 12998)
+CreateAddressTest:testFuzzComputeAddressNonce0x7f(uint64,address) (runs: 256, μ: 533138, ~: 533224)
+CreateAddressTest:testFuzzComputeAddressNonceUint16(uint64,address) (runs: 256, μ: 532577, ~: 532829)
+CreateAddressTest:testFuzzComputeAddressNonceUint24(uint64,address) (runs: 256, μ: 532704, ~: 532789)
+CreateAddressTest:testFuzzComputeAddressNonceUint32(uint64,address) (runs: 256, μ: 532698, ~: 532818)
+CreateAddressTest:testFuzzComputeAddressNonceUint40(uint64,address) (runs: 256, μ: 532822, ~: 532888)
+CreateAddressTest:testFuzzComputeAddressNonceUint48(uint64,address) (runs: 256, μ: 532793, ~: 532894)
+CreateAddressTest:testFuzzComputeAddressNonceUint56(uint64,address) (runs: 256, μ: 532857, ~: 532942)
+CreateAddressTest:testFuzzComputeAddressNonceUint64(uint64,address) (runs: 256, μ: 532895, ~: 532992)
+CreateAddressTest:testFuzzComputeAddressNonceUint8(uint64,address) (runs: 256, μ: 532605, ~: 532663)
+CreateAddressTest:testFuzzComputeAddressRevertTooHighNonce(uint256,address) (runs: 256, μ: 12839, ~: 13144)
+CreateAddressTest:testFuzzComputeAddressSelfNonce0x7f(uint64) (runs: 256, μ: 539386, ~: 539445)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint16(uint64) (runs: 256, μ: 538613, ~: 538903)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint24(uint64) (runs: 256, μ: 538963, ~: 539043)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint32(uint64) (runs: 256, μ: 538955, ~: 539051)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint40(uint64) (runs: 256, μ: 539047, ~: 539122)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint48(uint64) (runs: 256, μ: 539045, ~: 539109)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint56(uint64) (runs: 256, μ: 539116, ~: 539175)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint64(uint64) (runs: 256, μ: 539214, ~: 539296)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint8(uint64) (runs: 256, μ: 538722, ~: 538769)
+CreateAddressTest:testFuzzComputeAddressSelfRevertTooHighNonce(uint256) (runs: 256, μ: 12677, ~: 12998)
 ECDSATest:testFuzzRecoverWithInvalidSignature(bytes,string) (runs: 256, μ: 15336, ~: 15339)
 ECDSATest:testFuzzRecoverWithTooLongSignature(bytes,string) (runs: 256, μ: 13772, ~: 13775)
 ECDSATest:testFuzzRecoverWithValidSignature(string,string) (runs: 256, μ: 21662, ~: 21660)
@@ -155,25 +155,25 @@ ERC1155Test:testExistsAfterSingleBurn() (gas: 120522)
 ERC1155Test:testExistsAfterSingleMint() (gas: 107182)
 ERC1155Test:testExistsBeforeMint() (gas: 10456)
 ERC1155Test:testFuzzBurnBatchSuccess(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 114412, ~: 114399)
-ERC1155Test:testFuzzBurnSuccess(address,address,uint256) (runs: 256, μ: 123484, ~: 123484)
+ERC1155Test:testFuzzBurnSuccess(address,address,uint256) (runs: 256, μ: 123474, ~: 123484)
 ERC1155Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13928, ~: 13928)
 ERC1155Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48706, ~: 48692)
 ERC1155Test:testFuzzSafeBatchTransferFromByApprovedOperator(address,address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 195985, ~: 195984)
 ERC1155Test:testFuzzSafeBatchTransferFromEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 160563, ~: 160542)
 ERC1155Test:testFuzzSafeBatchTransferFromNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 528669, ~: 528669)
 ERC1155Test:testFuzzSafeBatchTransferFromWithData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 529064, ~: 529361)
-ERC1155Test:testFuzzSafeMintBatchEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 138108, ~: 138102)
+ERC1155Test:testFuzzSafeMintBatchEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 138107, ~: 138102)
 ERC1155Test:testFuzzSafeMintBatchNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 500117, ~: 500117)
 ERC1155Test:testFuzzSafeMintBatchNonMinter(address) (runs: 256, μ: 26517, ~: 26517)
 ERC1155Test:testFuzzSafeMintBatchWithData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 500495, ~: 500656)
 ERC1155Test:testFuzzSafeMintEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 140555, ~: 140537)
 ERC1155Test:testFuzzSafeMintNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 503459, ~: 503459)
 ERC1155Test:testFuzzSafeMintNonMinter(address) (runs: 256, μ: 26112, ~: 26112)
-ERC1155Test:testFuzzSafeMintWithData(address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 504599, ~: 504229)
+ERC1155Test:testFuzzSafeMintWithData(address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 504589, ~: 504229)
 ERC1155Test:testFuzzSafeTransferFromByApprovedOperator(address,address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 187660, ~: 187648)
-ERC1155Test:testFuzzSafeTransferFromEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 152325, ~: 152293)
+ERC1155Test:testFuzzSafeTransferFromEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 152324, ~: 152293)
 ERC1155Test:testFuzzSafeTransferFromNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 578642, ~: 578642)
-ERC1155Test:testFuzzSafeTransferFromWithData(address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 580737, ~: 580010)
+ERC1155Test:testFuzzSafeTransferFromWithData(address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 580727, ~: 580010)
 ERC1155Test:testFuzzSetApprovalForAllRevoke(address,address) (runs: 256, μ: 31947, ~: 31915)
 ERC1155Test:testFuzzSetApprovalForAllSuccess(address,address) (runs: 256, μ: 45319, ~: 45319)
 ERC1155Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 15489, ~: 15490)
@@ -182,11 +182,11 @@ ERC1155Test:testFuzzSetUriNonMinter(address) (runs: 256, μ: 14413, ~: 14413)
 ERC1155Test:testFuzzTotalSupplyAfterBatchBurn(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 108010, ~: 107998)
 ERC1155Test:testFuzzTotalSupplyAfterBatchMint(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 126253, ~: 126284)
 ERC1155Test:testFuzzTotalSupplyAfterSingleBurn(address,uint256,bytes) (runs: 256, μ: 120543, ~: 120509)
-ERC1155Test:testFuzzTotalSupplyAfterSingleMint(uint256,uint256,bytes) (runs: 256, μ: 81288, ~: 107841)
+ERC1155Test:testFuzzTotalSupplyAfterSingleMint(uint256,uint256,bytes) (runs: 256, μ: 79189, ~: 107838)
 ERC1155Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14036, ~: 14036)
 ERC1155Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 75645, ~: 75613)
 ERC1155Test:testHasOwner() (gas: 12677)
-ERC1155Test:testInitialSetup() (gas: 2892404)
+ERC1155Test:testInitialSetup() (gas: 2892439)
 ERC1155Test:testRenounceOwnershipNonOwner() (gas: 10875)
 ERC1155Test:testRenounceOwnershipSuccess() (gas: 22882)
 ERC1155Test:testSafeBatchTransferFromByApprovedOperator() (gas: 309595)
@@ -253,12 +253,12 @@ ERC1155Test:testTotalSupplyBeforeMint() (gas: 10457)
 ERC1155Test:testTransferOwnershipNonOwner() (gas: 12426)
 ERC1155Test:testTransferOwnershipSuccess() (gas: 53809)
 ERC1155Test:testTransferOwnershipToZeroAddress() (gas: 15604)
-ERC1155Test:testUriBaseAndTokenUriNotSet() (gas: 2851412)
+ERC1155Test:testUriBaseAndTokenUriNotSet() (gas: 2851447)
 ERC1155Test:testUriBaseAndTokenUriSet() (gas: 64187)
-ERC1155Test:testUriNoBaseURI() (gas: 2900815)
+ERC1155Test:testUriNoBaseURI() (gas: 2900850)
 ERC1155Test:testUriNoTokenUri() (gas: 18805)
-ERC20Invariants:statefulFuzzOwner() (runs: 256, calls: 3840, reverts: 3444)
-ERC20Invariants:statefulFuzzTotalSupply() (runs: 256, calls: 3840, reverts: 3444)
+ERC20Invariants:statefulFuzzOwner() (runs: 256, calls: 3840, reverts: 3442)
+ERC20Invariants:statefulFuzzTotalSupply() (runs: 256, calls: 3840, reverts: 3442)
 ERC20Test:testApproveExceedingBalanceCase1() (gas: 40802)
 ERC20Test:testApproveExceedingBalanceCase2() (gas: 47789)
 ERC20Test:testApproveFromZeroAddress() (gas: 12962)
@@ -281,28 +281,28 @@ ERC20Test:testCachedDomainSeparator() (gas: 10598)
 ERC20Test:testDomainSeparator() (gas: 11819)
 ERC20Test:testEIP712Domain() (gas: 18200)
 ERC20Test:testFuzzApproveSuccess(address,uint256) (runs: 256, μ: 41115, ~: 41193)
-ERC20Test:testFuzzBurnFromInsufficientAllowance(address,uint256,uint8) (runs: 256, μ: 205964, ~: 205979)
+ERC20Test:testFuzzBurnFromInsufficientAllowance(address,uint256,uint8) (runs: 256, μ: 205962, ~: 205979)
 ERC20Test:testFuzzBurnFromSuccess(address,uint256) (runs: 256, μ: 339788, ~: 339651)
 ERC20Test:testFuzzBurnInvalidAmount(address,uint256) (runs: 256, μ: 16394, ~: 16394)
-ERC20Test:testFuzzBurnSuccessCase(uint256) (runs: 256, μ: 314363, ~: 314151)
+ERC20Test:testFuzzBurnSuccessCase(uint256) (runs: 256, μ: 314363, ~: 314150)
 ERC20Test:testFuzzDomainSeparator(uint8) (runs: 256, μ: 12027, ~: 12055)
 ERC20Test:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 21697, ~: 21747)
 ERC20Test:testFuzzMintNonMinter(string,uint256) (runs: 256, μ: 12921, ~: 12914)
-ERC20Test:testFuzzMintSuccess(string,uint256) (runs: 256, μ: 55411, ~: 56122)
+ERC20Test:testFuzzMintSuccess(string,uint256) (runs: 256, μ: 55408, ~: 56074)
 ERC20Test:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 44560, ~: 44554)
 ERC20Test:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 70553, ~: 70554)
 ERC20Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13929, ~: 13929)
-ERC20Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48634, ~: 48620)
+ERC20Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48635, ~: 48620)
 ERC20Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 15520, ~: 15521)
 ERC20Test:testFuzzSetMinterSuccess(string) (runs: 256, μ: 33569, ~: 33576)
-ERC20Test:testFuzzTransferFromInsufficientAllowance(address,address,uint256,uint8) (runs: 256, μ: 204606, ~: 204593)
-ERC20Test:testFuzzTransferFromSuccess(address,address,uint256) (runs: 256, μ: 233560, ~: 234137)
+ERC20Test:testFuzzTransferFromInsufficientAllowance(address,address,uint256,uint8) (runs: 256, μ: 204605, ~: 204593)
+ERC20Test:testFuzzTransferFromSuccess(address,address,uint256) (runs: 256, μ: 233564, ~: 234140)
 ERC20Test:testFuzzTransferInvalidAmount(address,address,uint256) (runs: 256, μ: 16752, ~: 16752)
 ERC20Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14040, ~: 14040)
 ERC20Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 75609, ~: 75577)
 ERC20Test:testFuzzTransferSuccess(address,uint256) (runs: 256, μ: 205509, ~: 205569)
 ERC20Test:testHasOwner() (gas: 12655)
-ERC20Test:testInitialSetup() (gas: 1566549)
+ERC20Test:testInitialSetup() (gas: 1566577)
 ERC20Test:testMintNonMinter() (gas: 12460)
 ERC20Test:testMintOverflow() (gas: 16783)
 ERC20Test:testMintSuccess() (gas: 51789)
@@ -340,22 +340,22 @@ ERC2981Test:testDeleteDefaultRoyaltyNonOwner() (gas: 10668)
 ERC2981Test:testFuzzDeleteDefaultRoyaltyNonOwner(address) (runs: 256, μ: 13332, ~: 13332)
 ERC2981Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13901, ~: 13901)
 ERC2981Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 25199, ~: 25199)
-ERC2981Test:testFuzzResetTokenRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 97467, ~: 97736)
+ERC2981Test:testFuzzResetTokenRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 97455, ~: 97729)
 ERC2981Test:testFuzzResetTokenRoyaltyNonOwner(address) (runs: 256, μ: 13306, ~: 13306)
-ERC2981Test:testFuzzRoyaltyInfoDefaultRoyalty(address,uint256,uint256,uint96,uint256) (runs: 256, μ: 80644, ~: 81179)
-ERC2981Test:testFuzzRoyaltyInfoDeleteDefaultRoyalty(address,uint256,uint256,uint96,uint256) (runs: 256, μ: 65546, ~: 65921)
-ERC2981Test:testFuzzRoyaltyInfoSetTokenRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 122287, ~: 122718)
-ERC2981Test:testFuzzRoyaltyInfoSetTokenRoyaltyUpdate(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 168707, ~: 169293)
-ERC2981Test:testFuzzRoyaltyInfoUpdateDefaultRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 88656, ~: 88931)
+ERC2981Test:testFuzzRoyaltyInfoDefaultRoyalty(address,uint256,uint256,uint96,uint256) (runs: 256, μ: 80642, ~: 81179)
+ERC2981Test:testFuzzRoyaltyInfoDeleteDefaultRoyalty(address,uint256,uint256,uint96,uint256) (runs: 256, μ: 65545, ~: 65918)
+ERC2981Test:testFuzzRoyaltyInfoSetTokenRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 122271, ~: 122718)
+ERC2981Test:testFuzzRoyaltyInfoSetTokenRoyaltyUpdate(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 168691, ~: 169293)
+ERC2981Test:testFuzzRoyaltyInfoUpdateDefaultRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 88640, ~: 88931)
 ERC2981Test:testFuzzSetDefaultRoyaltyNonOwner(address) (runs: 256, μ: 15608, ~: 15608)
-ERC2981Test:testFuzzSetDefaultRoyaltyTooHighFeeNumerator(uint96) (runs: 256, μ: 21077, ~: 20869)
+ERC2981Test:testFuzzSetDefaultRoyaltyTooHighFeeNumerator(uint96) (runs: 256, μ: 21083, ~: 20869)
 ERC2981Test:testFuzzSetTokenRoyaltyInvalidReceiver(address) (runs: 256, μ: 18664, ~: 18664)
 ERC2981Test:testFuzzSetTokenRoyaltyNonOwner(address) (runs: 256, μ: 15625, ~: 15625)
-ERC2981Test:testFuzzSetTokenRoyaltyTooHighFeeNumerator(uint96) (runs: 256, μ: 21095, ~: 20887)
+ERC2981Test:testFuzzSetTokenRoyaltyTooHighFeeNumerator(uint96) (runs: 256, μ: 21101, ~: 20887)
 ERC2981Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14053, ~: 14053)
 ERC2981Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 30234, ~: 30234)
 ERC2981Test:testHasOwner() (gas: 12590)
-ERC2981Test:testInitialSetup() (gas: 494325)
+ERC2981Test:testInitialSetup() (gas: 494340)
 ERC2981Test:testRenounceOwnershipNonOwner() (gas: 10806)
 ERC2981Test:testRenounceOwnershipSuccess() (gas: 17989)
 ERC2981Test:testResetTokenRoyalty() (gas: 94236)
@@ -391,13 +391,13 @@ ERC4626VaultTest:testEmptyVaultDeposit() (gas: 567200)
 ERC4626VaultTest:testEmptyVaultMint() (gas: 568085)
 ERC4626VaultTest:testEmptyVaultRedeem() (gas: 202461)
 ERC4626VaultTest:testEmptyVaultwithdraw() (gas: 215305)
-ERC4626VaultTest:testFail_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 553396, ~: 556438)
-ERC4626VaultTest:testFail_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 555199, ~: 557997)
+ERC4626VaultTest:testFail_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 553512, ~: 556295)
+ERC4626VaultTest:testFail_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 555345, ~: 557997)
 ERC4626VaultTest:testFuzzDomainSeparator(uint8) (runs: 256, μ: 11916, ~: 11944)
 ERC4626VaultTest:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 21719, ~: 21769)
 ERC4626VaultTest:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 44525, ~: 44519)
 ERC4626VaultTest:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 70460, ~: 70461)
-ERC4626VaultTest:testInitialSetup() (gas: 5968117)
+ERC4626VaultTest:testInitialSetup() (gas: 5968263)
 ERC4626VaultTest:testMintWithNoApproval() (gas: 24354)
 ERC4626VaultTest:testMintZero() (gas: 41192)
 ERC4626VaultTest:testMultipleMintDepositRedeemWithdraw() (gas: 376784)
@@ -415,30 +415,30 @@ ERC4626VaultTest:testVaultInteractionsForSomeoneElse() (gas: 224104)
 ERC4626VaultTest:testWithdrawInsufficientAllowance() (gas: 122383)
 ERC4626VaultTest:testWithdrawInsufficientAssets() (gas: 117788)
 ERC4626VaultTest:testWithdrawWithNoAssets() (gas: 21277)
-ERC4626VaultTest:test_RT_deposit_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472416, ~: 473172)
-ERC4626VaultTest:test_RT_deposit_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474219, ~: 474400)
-ERC4626VaultTest:test_RT_mint_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472132, ~: 473262)
-ERC4626VaultTest:test_RT_mint_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474048, ~: 474469)
-ERC4626VaultTest:test_RT_redeem_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472576, ~: 473239)
-ERC4626VaultTest:test_RT_redeem_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472679, ~: 473324)
-ERC4626VaultTest:test_RT_withdraw_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473768, ~: 474423)
-ERC4626VaultTest:test_RT_withdraw_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473853, ~: 474587)
-ERC4626VaultTest:test_asset((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424201, ~: 426303)
-ERC4626VaultTest:test_convertToAssets((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 428871, ~: 430540)
-ERC4626VaultTest:test_convertToShares((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 428872, ~: 430554)
-ERC4626VaultTest:test_deposit((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 469792, ~: 471116)
-ERC4626VaultTest:test_maxDeposit((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424195, ~: 426297)
-ERC4626VaultTest:test_maxMint((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424238, ~: 426340)
-ERC4626VaultTest:test_maxRedeem((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424335, ~: 426437)
-ERC4626VaultTest:test_maxWithdraw((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 425785, ~: 427682)
-ERC4626VaultTest:test_mint((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 469826, ~: 471132)
-ERC4626VaultTest:test_previewDeposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 464890, ~: 465772)
-ERC4626VaultTest:test_previewMint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 464637, ~: 465952)
-ERC4626VaultTest:test_previewRedeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 467005, ~: 467215)
-ERC4626VaultTest:test_previewWithdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 467901, ~: 468540)
-ERC4626VaultTest:test_redeem((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 472993, ~: 473825)
-ERC4626VaultTest:test_totalAssets((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424784, ~: 426886)
-ERC4626VaultTest:test_withdraw((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 474608, ~: 475018)
+ERC4626VaultTest:test_RT_deposit_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472353, ~: 473172)
+ERC4626VaultTest:test_RT_deposit_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474151, ~: 474400)
+ERC4626VaultTest:test_RT_mint_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 471768, ~: 473262)
+ERC4626VaultTest:test_RT_mint_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473687, ~: 474472)
+ERC4626VaultTest:test_RT_redeem_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472581, ~: 473262)
+ERC4626VaultTest:test_RT_redeem_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472685, ~: 473347)
+ERC4626VaultTest:test_RT_withdraw_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473768, ~: 474420)
+ERC4626VaultTest:test_RT_withdraw_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473905, ~: 474544)
+ERC4626VaultTest:test_asset((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424192, ~: 426300)
+ERC4626VaultTest:test_convertToAssets((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 429062, ~: 430536)
+ERC4626VaultTest:test_convertToShares((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 429073, ~: 430552)
+ERC4626VaultTest:test_deposit((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 469785, ~: 471113)
+ERC4626VaultTest:test_maxDeposit((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424186, ~: 426295)
+ERC4626VaultTest:test_maxMint((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424229, ~: 426337)
+ERC4626VaultTest:test_maxRedeem((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424326, ~: 426435)
+ERC4626VaultTest:test_maxWithdraw((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 425774, ~: 427682)
+ERC4626VaultTest:test_mint((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 469844, ~: 471132)
+ERC4626VaultTest:test_previewDeposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 464825, ~: 465772)
+ERC4626VaultTest:test_previewMint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 464335, ~: 465952)
+ERC4626VaultTest:test_previewRedeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 467225, ~: 467214)
+ERC4626VaultTest:test_previewWithdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 468344, ~: 468540)
+ERC4626VaultTest:test_redeem((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 472955, ~: 473823)
+ERC4626VaultTest:test_totalAssets((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424775, ~: 426884)
+ERC4626VaultTest:test_withdraw((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 474745, ~: 475016)
 ERC721Invariants:statefulFuzzOwner() (runs: 256, calls: 3840, reverts: 3483)
 ERC721Invariants:statefulFuzzTotalSupply() (runs: 256, calls: 3840, reverts: 3483)
 ERC721Test:testApproveClearingApprovalWithNoPriorApproval() (gas: 177097)
@@ -468,14 +468,14 @@ ERC721Test:testFuzzApproveWithNoPriorApproval(address,address) (runs: 256, μ: 1
 ERC721Test:testFuzzApproveWithPriorApproval(address,address) (runs: 256, μ: 204296, ~: 204306)
 ERC721Test:testFuzzBurnSuccess(address) (runs: 256, μ: 305341, ~: 305335)
 ERC721Test:testFuzzDomainSeparator(uint8) (runs: 256, μ: 12029, ~: 12056)
-ERC721Test:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 21782, ~: 21834)
+ERC721Test:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 21782, ~: 21820)
 ERC721Test:testFuzzGetApprovedApprovedTokenId(address,address) (runs: 256, μ: 194337, ~: 194347)
 ERC721Test:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 200560, ~: 200554)
 ERC721Test:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 227008, ~: 227009)
 ERC721Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13974, ~: 13974)
 ERC721Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48629, ~: 48615)
 ERC721Test:testFuzzSafeMintNonMinter(address) (runs: 256, μ: 15677, ~: 15677)
-ERC721Test:testFuzzSafeMintSuccess(address[]) (runs: 256, μ: 21205447, ~: 20959660)
+ERC721Test:testFuzzSafeMintSuccess(address[]) (runs: 256, μ: 21747604, ~: 21481569)
 ERC721Test:testFuzzSafeTransferFromWithData(address,address,address,bytes) (runs: 256, μ: 1433791, ~: 1433893)
 ERC721Test:testFuzzSetApprovalForAllSuccess(address,address) (runs: 256, μ: 189156, ~: 189156)
 ERC721Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 15520, ~: 15521)
@@ -489,7 +489,7 @@ ERC721Test:testGetApprovedApprovedTokenId() (gas: 193886)
 ERC721Test:testGetApprovedInvalidTokenId() (gas: 11076)
 ERC721Test:testGetApprovedNotApprovedTokenId() (gas: 170325)
 ERC721Test:testHasOwner() (gas: 12626)
-ERC721Test:testInitialSetup() (gas: 2512726)
+ERC721Test:testInitialSetup() (gas: 2512760)
 ERC721Test:testOwnerOf() (gas: 166033)
 ERC721Test:testOwnerOfInvalidTokenId() (gas: 11009)
 ERC721Test:testPermitBadChainId() (gas: 199351)
@@ -537,7 +537,7 @@ ERC721Test:testTokenOfOwnerByIndexReverts() (gas: 545656)
 ERC721Test:testTokenURIAfterBurning() (gas: 138536)
 ERC721Test:testTokenURIDefault() (gas: 168178)
 ERC721Test:testTokenURIInvalidTokenId() (gas: 13114)
-ERC721Test:testTokenURINoBaseURI() (gas: 2632192)
+ERC721Test:testTokenURINoBaseURI() (gas: 2632225)
 ERC721Test:testTokenURINoTokenUri() (gas: 125681)
 ERC721Test:testTotalSupply() (gas: 328172)
 ERC721Test:testTransferFrom() (gas: 574008)
@@ -547,19 +547,19 @@ ERC721Test:testTransferOwnershipToZeroAddress() (gas: 15540)
 MathTest:testCbrtRoundDown() (gas: 51605)
 MathTest:testCbrtRoundUp() (gas: 52252)
 MathTest:testCeilDiv() (gas: 14716)
-MathTest:testFuzzCbrt(uint256,bool) (runs: 256, μ: 22381, ~: 22302)
+MathTest:testFuzzCbrt(uint256,bool) (runs: 256, μ: 22400, ~: 22336)
 MathTest:testFuzzCeilDiv(uint256,uint256) (runs: 256, μ: 9759, ~: 9760)
 MathTest:testFuzzInt256Average(int256,int256) (runs: 256, μ: 8533, ~: 8533)
-MathTest:testFuzzLog10(uint256,bool) (runs: 256, μ: 10374, ~: 10347)
+MathTest:testFuzzLog10(uint256,bool) (runs: 256, μ: 10375, ~: 10347)
 MathTest:testFuzzLog2(uint256,bool) (runs: 256, μ: 10134, ~: 10177)
-MathTest:testFuzzLog256(uint256,bool) (runs: 256, μ: 10217, ~: 10139)
+MathTest:testFuzzLog256(uint256,bool) (runs: 256, μ: 10220, ~: 10139)
 MathTest:testFuzzMulDiv(uint256,uint256,uint256) (runs: 256, μ: 14269, ~: 14059)
 MathTest:testFuzzMulDivDomain(uint256,uint256,uint256) (runs: 256, μ: 10847, ~: 10886)
 MathTest:testFuzzSignum(int256) (runs: 256, μ: 8483, ~: 8475)
 MathTest:testFuzzUint256Average(uint256,uint256) (runs: 256, μ: 8662, ~: 8662)
-MathTest:testFuzzWadCbrt(uint256) (runs: 256, μ: 22266, ~: 21976)
+MathTest:testFuzzWadCbrt(uint256) (runs: 256, μ: 22274, ~: 21981)
 MathTest:testFuzzWadExp(int256) (runs: 256, μ: 14698, ~: 15050)
-MathTest:testFuzzWadLn(int256) (runs: 256, μ: 16343, ~: 16083)
+MathTest:testFuzzWadLn(int256) (runs: 256, μ: 16342, ~: 16083)
 MathTest:testInt256Average() (gas: 18813)
 MathTest:testLog10RoundDown() (gas: 26172)
 MathTest:testLog10RoundUp() (gas: 27375)
@@ -580,8 +580,8 @@ MathTest:testWadExp() (gas: 34284)
 MathTest:testWadExpOverflow() (gas: 11133)
 MathTest:testWadLn() (gas: 31203)
 MathTest:testWadLnNegativeValues() (gas: 11090)
-MerkleProofVerificationTest:testFuzzMultiProofVerifySingleLeaf(bytes32[],uint256) (runs: 256, μ: 262416, ~: 274019)
-MerkleProofVerificationTest:testFuzzVerify(bytes32[],uint256) (runs: 256, μ: 177002, ~: 186814)
+MerkleProofVerificationTest:testFuzzMultiProofVerifySingleLeaf(bytes32[],uint256) (runs: 256, μ: 262415, ~: 273990)
+MerkleProofVerificationTest:testFuzzVerify(bytes32[],uint256) (runs: 256, μ: 177000, ~: 186785)
 MerkleProofVerificationTest:testFuzzVerifyMultiProofMultipleLeaves(bool,bool,bool) (runs: 256, μ: 45519, ~: 45510)
 MerkleProofVerificationTest:testInvalidMerkleMultiProof() (gas: 46727)
 MerkleProofVerificationTest:testInvalidMerkleProof() (gas: 18786)
@@ -622,7 +622,7 @@ Ownable2StepTest:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 45317
 Ownable2StepTest:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 13989, ~: 13989)
 Ownable2StepTest:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 52111, ~: 52111)
 Ownable2StepTest:testHasOwner() (gas: 12524)
-Ownable2StepTest:testInitialSetup() (gas: 241651)
+Ownable2StepTest:testInitialSetup() (gas: 241666)
 Ownable2StepTest:testPendingOwnerResetAfterRenounceOwnership() (gas: 40753)
 Ownable2StepTest:testRenounceOwnershipNonOwner() (gas: 10831)
 Ownable2StepTest:testRenounceOwnershipSuccess() (gas: 20236)
@@ -634,7 +634,7 @@ OwnableTest:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 25196, ~:
 OwnableTest:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14031, ~: 14031)
 OwnableTest:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 30209, ~: 30209)
 OwnableTest:testHasOwner() (gas: 12499)
-OwnableTest:testInitialSetup() (gas: 212014)
+OwnableTest:testInitialSetup() (gas: 212029)
 OwnableTest:testRenounceOwnershipNonOwner() (gas: 10805)
 OwnableTest:testRenounceOwnershipSuccess() (gas: 17942)
 OwnableTest:testTransferOwnershipNonOwner() (gas: 12287)
@@ -666,13 +666,13 @@ SignatureCheckerTest:testFuzzEOAWithInvalidSignature(bytes,string) (runs: 256, 
 SignatureCheckerTest:testFuzzEOAWithInvalidSigner(string,string) (runs: 256, μ: 20409, ~: 20410)
 SignatureCheckerTest:testFuzzEOAWithValidSignature(string,string) (runs: 256, μ: 20341, ~: 20342)
 SignatureCheckerTest:testInitialSetup() (gas: 8356)
-TimelockControllerInvariants:statefulFuzzExecutedLessThanOrEqualToScheduled() (runs: 256, calls: 3840, reverts: 1318)
-TimelockControllerInvariants:statefulFuzzExecutedProposalCancellation() (runs: 256, calls: 3840, reverts: 1271)
-TimelockControllerInvariants:statefulFuzzExecutingCancelledProposal() (runs: 256, calls: 3840, reverts: 1202)
-TimelockControllerInvariants:statefulFuzzExecutingNotReadyProposal() (runs: 256, calls: 3840, reverts: 1333)
-TimelockControllerInvariants:statefulFuzzOnceProposalExecution() (runs: 256, calls: 3840, reverts: 1290)
-TimelockControllerInvariants:statefulFuzzProposalsExecutedMatchCount() (runs: 256, calls: 3840, reverts: 1319)
-TimelockControllerInvariants:statefulFuzzSumOfProposals() (runs: 256, calls: 3840, reverts: 1319)
+TimelockControllerInvariants:statefulFuzzExecutedLessThanOrEqualToScheduled() (runs: 256, calls: 3840, reverts: 1310)
+TimelockControllerInvariants:statefulFuzzExecutedProposalCancellation() (runs: 256, calls: 3840, reverts: 1274)
+TimelockControllerInvariants:statefulFuzzExecutingCancelledProposal() (runs: 256, calls: 3840, reverts: 1188)
+TimelockControllerInvariants:statefulFuzzExecutingNotReadyProposal() (runs: 256, calls: 3840, reverts: 1276)
+TimelockControllerInvariants:statefulFuzzOnceProposalExecution() (runs: 256, calls: 3840, reverts: 1266)
+TimelockControllerInvariants:statefulFuzzProposalsExecutedMatchCount() (runs: 256, calls: 3840, reverts: 1310)
+TimelockControllerInvariants:statefulFuzzSumOfProposals() (runs: 256, calls: 3840, reverts: 1311)
 TimelockControllerTest:testAdminCannotBatchExecute() (gas: 750632)
 TimelockControllerTest:testAdminCannotBatchSchedule() (gas: 748419)
 TimelockControllerTest:testAdminCannotCancel() (gas: 13369)
@@ -710,15 +710,15 @@ TimelockControllerTest:testExecutorCanExecute() (gas: 29459)
 TimelockControllerTest:testExecutorCannotBatchSchedule() (gas: 1485514)
 TimelockControllerTest:testExecutorCannotCancel() (gas: 15459)
 TimelockControllerTest:testExecutorCannotSchedule() (gas: 19124)
-TimelockControllerTest:testFuzzBatchValue(uint256) (runs: 256, μ: 4650531, ~: 4650340)
+TimelockControllerTest:testFuzzBatchValue(uint256) (runs: 256, μ: 4650528, ~: 4650340)
 TimelockControllerTest:testFuzzHashOperation(address,uint256,bytes,bytes32,bytes32) (runs: 256, μ: 10601, ~: 10581)
 TimelockControllerTest:testFuzzHashOperationBatch(address[],uint256[],bytes[],bytes32,bytes32) (runs: 256, μ: 1826836, ~: 1817245)
-TimelockControllerTest:testFuzzOperationValue(uint256) (runs: 256, μ: 111585, ~: 111394)
-TimelockControllerTest:testHandleERC1155() (gas: 41560092)
-TimelockControllerTest:testHandleERC721() (gas: 7160444)
+TimelockControllerTest:testFuzzOperationValue(uint256) (runs: 256, μ: 111582, ~: 111394)
+TimelockControllerTest:testHandleERC1155() (gas: 41560127)
+TimelockControllerTest:testHandleERC721() (gas: 7160478)
 TimelockControllerTest:testHashOperation() (gas: 12365)
 TimelockControllerTest:testHashOperationBatch() (gas: 1525338)
-TimelockControllerTest:testInitialSetup() (gas: 4325063)
+TimelockControllerTest:testInitialSetup() (gas: 4325125)
 TimelockControllerTest:testInvalidOperation() (gas: 10716)
 TimelockControllerTest:testOperationAlreadyScheduled() (gas: 51483)
 TimelockControllerTest:testOperationCancelFinished() (gas: 99491)
diff --git a/.github/workflows/halmos.yml b/.github/workflows/halmos.yml
index 68fc4078..e5ba8a1d 100644
--- a/.github/workflows/halmos.yml
+++ b/.github/workflows/halmos.yml
@@ -36,7 +36,7 @@ jobs:
           architecture: ${{ matrix.architecture }}
 
       - name: Install Vyper
-        run: pip install vyper
+        run: pip install git+https://github.com/vyperlang/vyper@master
 
       - name: Show the Vyper version
         run: vyper --version
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f0b711ba..8b65dcee 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,15 +5,28 @@
 ### ♻️ Refactoring
 
 - **Authentication**
-  - [`access_control`](https://github.com/pcaversaccio/snekmate/blob/v0.1.1/src/snekmate/auth/access_control.vy): Use relative `interfaces` `import`s. ([#263](https://github.com/pcaversaccio/snekmate/pull/263))
+  - [`ownable`](https://github.com/pcaversaccio/snekmate/blob/v0.1.1/src/snekmate/auth/ownable.vy): Use keyword arguments for event instantiation. ([#280](https://github.com/pcaversaccio/snekmate/pull/280))
+  - [`ownable_2step`](https://github.com/pcaversaccio/snekmate/blob/v0.1.1/src/snekmate/auth/ownable_2step.vy): Use keyword arguments for event instantiation. ([#280](https://github.com/pcaversaccio/snekmate/pull/280))
+  - [`access_control`](https://github.com/pcaversaccio/snekmate/blob/v0.1.1/src/snekmate/auth/access_control.vy):
+    - Use relative `interfaces` `import`s. ([#263](https://github.com/pcaversaccio/snekmate/pull/263))
+    - Use keyword arguments for event instantiation. ([#280](https://github.com/pcaversaccio/snekmate/pull/280))
 - **Extensions**
   - [`erc2981`](https://github.com/pcaversaccio/snekmate/blob/v0.1.1/src/snekmate/extensions/erc2981.vy):
     - Use relative `interfaces` `import`s. ([#263](https://github.com/pcaversaccio/snekmate/pull/263))
     - Remove unnecessary `denominator` variable declaration. ([#267](https://github.com/pcaversaccio/snekmate/pull/267))
+  - [`erc4626`](https://github.com/pcaversaccio/snekmate/blob/v0.1.1/src/snekmate/extensions/erc4626.vy): Use keyword arguments for event instantiation. ([#280](https://github.com/pcaversaccio/snekmate/pull/280))
+- **Governance**
+  - [`timelock_controller`](https://github.com/pcaversaccio/snekmate/blob/v0.1.1/src/snekmate/governance/timelock_controller.vy): Use keyword arguments for event instantiation. ([#280](https://github.com/pcaversaccio/snekmate/pull/280))
 - **Tokens**
-  - [`erc20`](https://github.com/pcaversaccio/snekmate/blob/v0.1.1/src/snekmate/tokens/erc20.vy): Use relative `interfaces` `import`s. ([#263](https://github.com/pcaversaccio/snekmate/pull/263))
-  - [`erc721`](https://github.com/pcaversaccio/snekmate/blob/v0.1.1/src/snekmate/tokens/erc721.vy): Use relative `interfaces` `import`s. ([#263](https://github.com/pcaversaccio/snekmate/pull/263))
-  - [`erc1155`](https://github.com/pcaversaccio/snekmate/blob/v0.1.1/src/snekmate/tokens/erc1155.vy): Use relative `interfaces` `import`s. ([#263](https://github.com/pcaversaccio/snekmate/pull/263))
+  - [`erc20`](https://github.com/pcaversaccio/snekmate/blob/v0.1.1/src/snekmate/tokens/erc20.vy):
+    - Use relative `interfaces` `import`s. ([#263](https://github.com/pcaversaccio/snekmate/pull/263))
+    - Use keyword arguments for event instantiation. ([#280](https://github.com/pcaversaccio/snekmate/pull/280))
+  - [`erc721`](https://github.com/pcaversaccio/snekmate/blob/v0.1.1/src/snekmate/tokens/erc721.vy):
+    - Use relative `interfaces` `import`s. ([#263](https://github.com/pcaversaccio/snekmate/pull/263))
+    - Use keyword arguments for event instantiation. ([#280](https://github.com/pcaversaccio/snekmate/pull/280))
+  - [`erc1155`](https://github.com/pcaversaccio/snekmate/blob/v0.1.1/src/snekmate/tokens/erc1155.vy):
+    - Use relative `interfaces` `import`s. ([#263](https://github.com/pcaversaccio/snekmate/pull/263))
+    - Use keyword arguments for event instantiation. ([#280](https://github.com/pcaversaccio/snekmate/pull/280))
 - **Utility Functions**
   - [`eip712_domain_separator`](https://github.com/pcaversaccio/snekmate/blob/v0.1.1/src/snekmate/utils/eip712_domain_separator.vy): Use relative `interfaces` `import`s. ([#263](https://github.com/pcaversaccio/snekmate/pull/263))
   - [`math`](https://github.com/pcaversaccio/snekmate/blob/v0.1.1/src/snekmate/utils/math.vy): Use mutable `internal` function parameters. ([#267](https://github.com/pcaversaccio/snekmate/pull/267))
diff --git a/src/snekmate/auth/access_control.vy b/src/snekmate/auth/access_control.vy
index ebbcb444..e6467380 100644
--- a/src/snekmate/auth/access_control.vy
+++ b/src/snekmate/auth/access_control.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title Multi-Role-Based Access Control Functions
 @custom:contract-name access_control
@@ -210,7 +210,7 @@ def _set_role_admin(role: bytes32, admin_role: bytes32):
     """
     previous_admin_role: bytes32 = self.getRoleAdmin[role]
     self.getRoleAdmin[role] = admin_role
-    log IAccessControl.RoleAdminChanged(role, previous_admin_role, admin_role)
+    log IAccessControl.RoleAdminChanged(role=role, previousAdminRole=previous_admin_role, newAdminRole=admin_role)
 
 
 @internal
@@ -224,7 +224,7 @@ def _grant_role(role: bytes32, account: address):
     """
     if (not(self.hasRole[role][account])):
         self.hasRole[role][account] = True
-        log IAccessControl.RoleGranted(role, account, msg.sender)
+        log IAccessControl.RoleGranted(role=role, account=account, sender=msg.sender)
 
 
 @internal
@@ -238,4 +238,4 @@ def _revoke_role(role: bytes32, account: address):
     """
     if (self.hasRole[role][account]):
         self.hasRole[role][account] = False
-        log IAccessControl.RoleRevoked(role, account, msg.sender)
+        log IAccessControl.RoleRevoked(role=role, account=account, sender=msg.sender)
diff --git a/src/snekmate/auth/interfaces/IAccessControl.vyi b/src/snekmate/auth/interfaces/IAccessControl.vyi
index af8b48d1..0043175c 100644
--- a/src/snekmate/auth/interfaces/IAccessControl.vyi
+++ b/src/snekmate/auth/interfaces/IAccessControl.vyi
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title `access_control` Interface Definition
 @custom:contract-name IAccessControl
diff --git a/src/snekmate/auth/mocks/access_control_mock.vy b/src/snekmate/auth/mocks/access_control_mock.vy
index 44e5cebb..e1bdba9d 100644
--- a/src/snekmate/auth/mocks/access_control_mock.vy
+++ b/src/snekmate/auth/mocks/access_control_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title `access_control` Module Reference Implementation
 @custom:contract-name access_control_mock
diff --git a/src/snekmate/auth/mocks/ownable_2step_mock.vy b/src/snekmate/auth/mocks/ownable_2step_mock.vy
index 736364e8..47a85e87 100644
--- a/src/snekmate/auth/mocks/ownable_2step_mock.vy
+++ b/src/snekmate/auth/mocks/ownable_2step_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title `ownable_2step` Module Reference Implementation
 @custom:contract-name ownable_2step_mock
diff --git a/src/snekmate/auth/mocks/ownable_mock.vy b/src/snekmate/auth/mocks/ownable_mock.vy
index 2baae010..c15a82f3 100644
--- a/src/snekmate/auth/mocks/ownable_mock.vy
+++ b/src/snekmate/auth/mocks/ownable_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title `ownable` Module Reference Implementation
 @custom:contract-name ownable_mock
diff --git a/src/snekmate/auth/ownable.vy b/src/snekmate/auth/ownable.vy
index c4f118cb..1c97c244 100644
--- a/src/snekmate/auth/ownable.vy
+++ b/src/snekmate/auth/ownable.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title Owner-Based Access Control Functions
 @custom:contract-name ownable
@@ -90,4 +90,4 @@ def _transfer_ownership(new_owner: address):
     """
     old_owner: address = self.owner
     self.owner = new_owner
-    log OwnershipTransferred(old_owner, new_owner)
+    log OwnershipTransferred(previous_owner=old_owner, new_owner=new_owner)
diff --git a/src/snekmate/auth/ownable_2step.vy b/src/snekmate/auth/ownable_2step.vy
index da514395..83e570d0 100644
--- a/src/snekmate/auth/ownable_2step.vy
+++ b/src/snekmate/auth/ownable_2step.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title 2-Step Ownership Transfer Functions
 @custom:contract-name ownable_2step
@@ -83,7 +83,7 @@ def transfer_ownership(new_owner: address):
     """
     ownable._check_owner()
     self.pending_owner = new_owner
-    log OwnershipTransferStarted(ownable.owner, new_owner)
+    log OwnershipTransferStarted(previous_owner=ownable.owner, new_owner=new_owner)
 
 
 @external
diff --git a/src/snekmate/extensions/erc2981.vy b/src/snekmate/extensions/erc2981.vy
index bea33bfd..9f5551e7 100644
--- a/src/snekmate/extensions/erc2981.vy
+++ b/src/snekmate/extensions/erc2981.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title ERC-721 and ERC-1155 Compatible ERC-2981 Reference Implementation
 @custom:contract-name erc2981
diff --git a/src/snekmate/extensions/erc4626.vy b/src/snekmate/extensions/erc4626.vy
index 88db11a1..f24330ef 100644
--- a/src/snekmate/extensions/erc4626.vy
+++ b/src/snekmate/extensions/erc4626.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title Modern and Gas-Efficient ERC-4626 Tokenised Vault Implementation
 @custom:contract-name erc4626
@@ -658,7 +658,7 @@ def _deposit(sender: address, receiver: address, assets: uint256, shares: uint25
     # the target address is an EOA), the call reverts.
     assert extcall _ASSET.transferFrom(sender, self, assets, default_return_value=True), "erc4626: transferFrom operation did not succeed"
     erc20._mint(receiver, shares)
-    log IERC4626.Deposit(sender, receiver, assets, shares)
+    log IERC4626.Deposit(sender=sender, owner=receiver, assets=assets, shares=shares)
 
 
 @internal
@@ -697,4 +697,4 @@ def _withdraw(sender: address, receiver: address, owner: address, assets: uint25
     # you add the kwarg `skip_contract_check=True`. If the check fails (i.e.
     # the target address is an EOA), the call reverts.
     assert extcall _ASSET.transfer(receiver, assets, default_return_value=True), "erc4626: transfer operation did not succeed"
-    log IERC4626.Withdraw(sender, receiver, owner, assets, shares)
+    log IERC4626.Withdraw(sender=sender, receiver=receiver, owner=owner, assets=assets, shares=shares)
diff --git a/src/snekmate/extensions/interfaces/IERC2981.vyi b/src/snekmate/extensions/interfaces/IERC2981.vyi
index a2bb26a0..1e02ae63 100644
--- a/src/snekmate/extensions/interfaces/IERC2981.vyi
+++ b/src/snekmate/extensions/interfaces/IERC2981.vyi
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title EIP-2981 Interface Definition
 @custom:contract-name IERC2981
diff --git a/src/snekmate/extensions/mocks/erc2981_mock.vy b/src/snekmate/extensions/mocks/erc2981_mock.vy
index 823a76e8..71bc390b 100644
--- a/src/snekmate/extensions/mocks/erc2981_mock.vy
+++ b/src/snekmate/extensions/mocks/erc2981_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title `erc2981` Module Reference Implementation
 @custom:contract-name erc2981_mock
diff --git a/src/snekmate/extensions/mocks/erc4626_mock.vy b/src/snekmate/extensions/mocks/erc4626_mock.vy
index 6d2a7874..28ee55e2 100644
--- a/src/snekmate/extensions/mocks/erc4626_mock.vy
+++ b/src/snekmate/extensions/mocks/erc4626_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title `erc4626` Module Reference Implementation
 @custom:contract-name erc4626_mock
diff --git a/src/snekmate/governance/mocks/timelock_controller_mock.vy b/src/snekmate/governance/mocks/timelock_controller_mock.vy
index 755af3e3..dbcafabb 100644
--- a/src/snekmate/governance/mocks/timelock_controller_mock.vy
+++ b/src/snekmate/governance/mocks/timelock_controller_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title `timelock_controller` Module Reference Implementation
 @custom:contract-name timelock_controller_mock
diff --git a/src/snekmate/governance/timelock_controller.vy b/src/snekmate/governance/timelock_controller.vy
index ffb62476..7a11906c 100644
--- a/src/snekmate/governance/timelock_controller.vy
+++ b/src/snekmate/governance/timelock_controller.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title Multi-Role-Based Timelock Controller Reference Implementation
 @custom:contract-name timelock_controller
@@ -275,7 +275,7 @@ def __init__(minimum_delay_: uint256, proposers_: DynArray[address, _DYNARRAY_BO
 
     # Set the minimum delay.
     self.get_minimum_delay = minimum_delay_
-    log MinimumDelayChange(empty(uint256), minimum_delay_)
+    log MinimumDelayChange(old_duration=empty(uint256), new_duration=minimum_delay_)
 
 
 @external
@@ -425,9 +425,9 @@ def schedule(target: address, amount: uint256, payload: Bytes[1_024], predecesso
     id: bytes32 = self._hash_operation(target, amount, payload, predecessor, salt)
 
     self._schedule(id, delay)
-    log CallScheduled(id, empty(uint256), target, amount, payload, predecessor, delay)
+    log CallScheduled(id=id, index=empty(uint256), target=target, amount=amount, payload=payload, predecessor=predecessor, delay=delay)
     if (salt != empty(bytes32)):
-        log CallSalt(id, salt)
+        log CallSalt(id=id, salt=salt)
 
 
 @external
@@ -456,14 +456,14 @@ def schedule_batch(targets: DynArray[address, _DYNARRAY_BOUND], amounts: DynArra
     self._schedule(id, delay)
     idx: uint256 = empty(uint256)
     for target: address in targets:
-        log CallScheduled(id, idx, target, amounts[idx], payloads[idx], predecessor, delay)
+        log CallScheduled(id=id, index=idx, target=target, amount=amounts[idx], payload=payloads[idx], predecessor=predecessor, delay=delay)
         # The following line cannot overflow because we have
         # limited the dynamic array `targets` by the `constant`
         # parameter `_DYNARRAY_BOUND`, which is bounded by the
         # maximum value of `uint8`.
         idx = unsafe_add(idx, 1)
     if (salt != empty(bytes32)):
-        log CallSalt(id, salt)
+        log CallSalt(id=id, salt=salt)
 
 
 @external
@@ -476,7 +476,7 @@ def cancel(id: bytes32):
     access_control._check_role(CANCELLER_ROLE, msg.sender)
     assert self._is_operation_pending(id), "timelock_controller: operation cannot be cancelled"
     self.get_timestamp[id] = empty(uint256)
-    log Cancelled(id)
+    log Cancelled(id=id)
 
 
 @external
@@ -503,7 +503,7 @@ def execute(target: address, amount: uint256, payload: Bytes[1_024], predecessor
 
     self._before_call(id, predecessor)
     self._execute(target, amount, payload)
-    log CallExecuted(id, empty(uint256), target, amount, payload)
+    log CallExecuted(id=id, index=empty(uint256), target=target, amount=amount, payload=payload)
     self._after_call(id)
 
 
@@ -536,7 +536,7 @@ def execute_batch(targets: DynArray[address, _DYNARRAY_BOUND], amounts: DynArray
     idx: uint256 = empty(uint256)
     for target: address in targets:
         self._execute(target, amounts[idx], payloads[idx])
-        log CallExecuted(id, idx, target, amounts[idx], payloads[idx])
+        log CallExecuted(id=id, index=idx, target=target, amount=amounts[idx], payload=payloads[idx])
         # The following line cannot overflow because we have
         # limited the dynamic array `targets` by the `constant`
         # parameter `_DYNARRAY_BOUND`, which is bounded by the
@@ -558,7 +558,7 @@ def update_delay(new_delay: uint256):
     @param new_delay The new 32-byte minimum delay in seconds.
     """
     assert msg.sender == self, "timelock_controller: caller must be timelock"
-    log MinimumDelayChange(self.get_minimum_delay, new_delay)
+    log MinimumDelayChange(old_duration=self.get_minimum_delay, new_duration=new_delay)
     self.get_minimum_delay = new_delay
 
 
diff --git a/src/snekmate/tokens/erc1155.vy b/src/snekmate/tokens/erc1155.vy
index 76dfd3ba..2990e371 100644
--- a/src/snekmate/tokens/erc1155.vy
+++ b/src/snekmate/tokens/erc1155.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title Modern and Gas-Efficient ERC-1155 Implementation
 @custom:contract-name erc1155
@@ -156,7 +156,7 @@ def __init__(base_uri_: String[80]):
     _BASE_URI = base_uri_
 
     self.is_minter[msg.sender] = True
-    log RoleMinterChanged(msg.sender, True)
+    log RoleMinterChanged(minter=msg.sender, status=True)
 
 
 @external
@@ -419,7 +419,7 @@ def set_minter(minter: address, status: bool):
     # that `msg.sender` is the `owner`.
     assert minter != msg.sender, "erc1155: minter is owner address"
     self.is_minter[minter] = status
-    log RoleMinterChanged(minter, status)
+    log RoleMinterChanged(minter=minter, status=status)
 
 
 @external
@@ -440,11 +440,11 @@ def transfer_ownership(new_owner: address):
     assert new_owner != empty(address), "erc1155: new owner is the zero address"
 
     self.is_minter[msg.sender] = False
-    log RoleMinterChanged(msg.sender, False)
+    log RoleMinterChanged(minter=msg.sender, status=False)
 
     ownable._transfer_ownership(new_owner)
     self.is_minter[new_owner] = True
-    log RoleMinterChanged(new_owner, True)
+    log RoleMinterChanged(minter=new_owner, status=True)
 
 
 @external
@@ -466,7 +466,7 @@ def renounce_ownership():
     """
     ownable._check_owner()
     self.is_minter[msg.sender] = False
-    log RoleMinterChanged(msg.sender, False)
+    log RoleMinterChanged(minter=msg.sender, status=False)
     ownable._transfer_ownership(empty(address))
 
 
@@ -482,7 +482,7 @@ def _set_approval_for_all(owner: address, operator: address, approved: bool):
     """
     assert owner != operator, "erc1155: setting approval status for self"
     self.isApprovedForAll[owner][operator] = approved
-    log IERC1155.ApprovalForAll(owner, operator, approved)
+    log IERC1155.ApprovalForAll(_owner=owner, _operator=operator, _approved=approved)
 
 
 @internal
@@ -522,7 +522,7 @@ def _safe_transfer_from(owner: address, to: address, id: uint256, amount: uint25
     # due to an arithmetic check of the entire token
     # supply in the functions `_safe_mint` and `_safe_mint_batch`.
     self.balanceOf[to][id] = unsafe_add(self.balanceOf[to][id], amount)
-    log IERC1155.TransferSingle(msg.sender, owner, to, id, amount)
+    log IERC1155.TransferSingle(_operator=msg.sender, _from=owner, _to=to, _id=id, _value=amount)
 
     self._after_token_transfer(owner, to, self._as_singleton_array(id), self._as_singleton_array(amount), data)
 
@@ -578,7 +578,7 @@ def _safe_batch_transfer_from(owner: address, to: address, ids: DynArray[uint256
         # maximum value of `uint16`.
         idx = unsafe_add(idx, 1)
 
-    log IERC1155.TransferBatch(msg.sender, owner, to, ids, amounts)
+    log IERC1155.TransferBatch(_operator=msg.sender, _from=owner, _to=to, _ids=ids, _values=amounts)
 
     self._after_token_transfer(owner, to, ids, amounts, data)
 
@@ -617,7 +617,7 @@ def _safe_mint(owner: address, id: uint256, amount: uint256, data: Bytes[1_024])
     # due to an arithmetic check of the entire token
     # supply in the function `_before_token_transfer`.
     self.balanceOf[owner][id] = unsafe_add(self.balanceOf[owner][id], amount)
-    log IERC1155.TransferSingle(msg.sender, empty(address), owner, id, amount)
+    log IERC1155.TransferSingle(_operator=msg.sender, _from=empty(address), _to=owner, _id=id, _value=amount)
 
     self._after_token_transfer(empty(address), owner, self._as_singleton_array(id), self._as_singleton_array(amount), data)
 
@@ -667,7 +667,7 @@ def _safe_mint_batch(owner: address, ids: DynArray[uint256, _BATCH_SIZE], amount
         # maximum value of `uint16`.
         idx = unsafe_add(idx, 1)
 
-    log IERC1155.TransferBatch(msg.sender, empty(address), owner, ids, amounts)
+    log IERC1155.TransferBatch(_operator=msg.sender, _from=empty(address), _to=owner, _ids=ids, _values=amounts)
 
     self._after_token_transfer(empty(address), owner, ids, amounts, data)
 
@@ -728,7 +728,7 @@ def _set_uri(id: uint256, token_uri: String[432]):
            string URI for computing `uri`.
     """
     self._token_uris[id] = token_uri
-    log IERC1155.URI(self._uri(id), id)
+    log IERC1155.URI(_value=self._uri(id), _id=id)
 
 
 @internal
@@ -750,7 +750,7 @@ def _burn(owner: address, id: uint256, amount: uint256):
     owner_balance: uint256 = self.balanceOf[owner][id]
     assert owner_balance >= amount, "erc1155: burn amount exceeds balance"
     self.balanceOf[owner][id] = unsafe_sub(owner_balance, amount)
-    log IERC1155.TransferSingle(msg.sender, owner, empty(address), id, amount)
+    log IERC1155.TransferSingle(_operator=msg.sender, _from=owner, _to=empty(address), _id=id, _value=amount)
 
     self._after_token_transfer(owner, empty(address), self._as_singleton_array(id), self._as_singleton_array(amount), b"")
 
@@ -786,7 +786,7 @@ def _burn_batch(owner: address, ids: DynArray[uint256, _BATCH_SIZE], amounts: Dy
         # maximum value of `uint16`.
         idx = unsafe_add(idx, 1)
 
-    log IERC1155.TransferBatch(msg.sender, owner, empty(address), ids, amounts)
+    log IERC1155.TransferBatch(_operator=msg.sender, _from=owner, _to=empty(address), _ids=ids, _values=amounts)
 
     self._after_token_transfer(owner, empty(address), ids, amounts, b"")
 
diff --git a/src/snekmate/tokens/erc20.vy b/src/snekmate/tokens/erc20.vy
index 37e0f231..8019575e 100644
--- a/src/snekmate/tokens/erc20.vy
+++ b/src/snekmate/tokens/erc20.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title Modern and Gas-Efficient ERC-20 + EIP-2612 Implementation
 @custom:contract-name erc20
@@ -202,7 +202,7 @@ def __init__(name_: String[25], symbol_: String[5], decimals_: uint8, name_eip71
     decimals = decimals_
 
     self.is_minter[msg.sender] = True
-    log RoleMinterChanged(msg.sender, True)
+    log RoleMinterChanged(minter=msg.sender, status=True)
 
     eip712_domain_separator.__init__(name_eip712_, version_eip712_)
 
@@ -339,7 +339,7 @@ def set_minter(minter: address, status: bool):
     # that `msg.sender` is the `owner`.
     assert minter != msg.sender, "erc20: minter is owner address"
     self.is_minter[minter] = status
-    log RoleMinterChanged(minter, status)
+    log RoleMinterChanged(minter=minter, status=status)
 
 
 @external
@@ -406,11 +406,11 @@ def transfer_ownership(new_owner: address):
     assert new_owner != empty(address), "erc20: new owner is the zero address"
 
     self.is_minter[msg.sender] = False
-    log RoleMinterChanged(msg.sender, False)
+    log RoleMinterChanged(minter=msg.sender, status=False)
 
     ownable._transfer_ownership(new_owner)
     self.is_minter[new_owner] = True
-    log RoleMinterChanged(new_owner, True)
+    log RoleMinterChanged(minter=new_owner, status=True)
 
 
 @external
@@ -432,7 +432,7 @@ def renounce_ownership():
     """
     ownable._check_owner()
     self.is_minter[msg.sender] = False
-    log RoleMinterChanged(msg.sender, False)
+    log RoleMinterChanged(minter=msg.sender, status=False)
     ownable._transfer_ownership(empty(address))
 
 
@@ -457,7 +457,7 @@ def _transfer(owner: address, to: address, amount: uint256):
     assert owner_balanceOf >= amount, "erc20: transfer amount exceeds balance"
     self.balanceOf[owner] = unsafe_sub(owner_balanceOf, amount)
     self.balanceOf[to] = unsafe_add(self.balanceOf[to], amount)
-    log IERC20.Transfer(owner, to, amount)
+    log IERC20.Transfer(sender=owner, receiver=to, value=amount)
 
     self._after_token_transfer(owner, to, amount)
 
@@ -480,7 +480,7 @@ def _mint(owner: address, amount: uint256):
 
     self.totalSupply += amount
     self.balanceOf[owner] = unsafe_add(self.balanceOf[owner], amount)
-    log IERC20.Transfer(empty(address), owner, amount)
+    log IERC20.Transfer(sender=empty(address), receiver=owner, value=amount)
 
     self._after_token_transfer(empty(address), owner, amount)
 
@@ -504,7 +504,7 @@ def _burn(owner: address, amount: uint256):
     assert account_balance >= amount, "erc20: burn amount exceeds balance"
     self.balanceOf[owner] = unsafe_sub(account_balance, amount)
     self.totalSupply = unsafe_sub(self.totalSupply, amount)
-    log IERC20.Transfer(owner, empty(address), amount)
+    log IERC20.Transfer(sender=owner, receiver=empty(address), value=amount)
 
     self._after_token_transfer(owner, empty(address), amount)
 
@@ -525,7 +525,7 @@ def _approve(owner: address, spender: address, amount: uint256):
     assert spender != empty(address), "erc20: approve to the zero address"
 
     self.allowance[owner][spender] = amount
-    log IERC20.Approval(owner, spender, amount)
+    log IERC20.Approval(owner=owner, spender=spender, value=amount)
 
 
 @internal
diff --git a/src/snekmate/tokens/erc721.vy b/src/snekmate/tokens/erc721.vy
index 9899930e..2d46536a 100644
--- a/src/snekmate/tokens/erc721.vy
+++ b/src/snekmate/tokens/erc721.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title Modern and Gas-Efficient ERC-721 + EIP-4494 Implementation
 @custom:contract-name erc721
@@ -274,7 +274,7 @@ def __init__(name_: String[25], symbol_: String[5], base_uri_: String[80], name_
     _BASE_URI = base_uri_
 
     self.is_minter[msg.sender] = True
-    log RoleMinterChanged(msg.sender, True)
+    log RoleMinterChanged(minter=msg.sender, status=True)
 
     eip712_domain_separator.__init__(name_eip712_, version_eip712_)
 
@@ -405,7 +405,7 @@ def transferFrom(owner: address, to: address, token_id: uint256):
 
 @external
 @payable
-def safeTransferFrom(owner: address, to: address, token_id: uint256, data: Bytes[1_024]=b""):
+def safeTransferFrom(owner: address, to: address, token_id: uint256, data: Bytes[1_024] = b""):
     """
     @dev Safely transfers `token_id` token from `owner`
          to `to`.
@@ -426,7 +426,8 @@ def safeTransferFrom(owner: address, to: address, token_id: uint256, data: Bytes
             compatible with the function overloading of `safeTransferFrom`
             in the standard ERC-721 interface. You can find more
             information here:
-            https://github.com/vyperlang/vyper/issues/903.
+            - https://github.com/vyperlang/vyper/issues/903,
+            - https://github.com/vyperlang/vyper/pull/987.
 
             IMPORTANT: The function is declared as `payable`
             to comply with the EIP-721 standard definition:
@@ -581,7 +582,7 @@ def set_minter(minter: address, status: bool):
     # that `msg.sender` is the `owner`.
     assert minter != msg.sender, "erc721: minter is owner address"
     self.is_minter[minter] = status
-    log RoleMinterChanged(minter, status)
+    log RoleMinterChanged(minter=minter, status=status)
 
 
 @external
@@ -646,11 +647,11 @@ def transfer_ownership(new_owner: address):
     assert new_owner != empty(address), "erc721: new owner is the zero address"
 
     self.is_minter[msg.sender] = False
-    log RoleMinterChanged(msg.sender, False)
+    log RoleMinterChanged(minter=msg.sender, status=False)
 
     ownable._transfer_ownership(new_owner)
     self.is_minter[new_owner] = True
-    log RoleMinterChanged(new_owner, True)
+    log RoleMinterChanged(minter=new_owner, status=True)
 
 
 @external
@@ -672,7 +673,7 @@ def renounce_ownership():
     """
     ownable._check_owner()
     self.is_minter[msg.sender] = False
-    log RoleMinterChanged(msg.sender, False)
+    log RoleMinterChanged(minter=msg.sender, status=False)
     ownable._transfer_ownership(empty(address))
 
 
@@ -740,7 +741,7 @@ def _approve(to: address, token_id: uint256):
     @param token_id The 32-byte identifier of the token.
     """
     self._token_approvals[token_id] = to
-    log IERC721.Approval(self._owner_of(token_id), to, token_id)
+    log IERC721.Approval(owner=self._owner_of(token_id), approved=to, token_id=token_id)
 
 
 @internal
@@ -768,7 +769,7 @@ def _set_approval_for_all(owner: address, operator: address, approved: bool):
     """
     assert owner != operator, "erc721: approve to caller"
     self.isApprovedForAll[owner][operator] = approved
-    log IERC721.ApprovalForAll(owner, operator, approved)
+    log IERC721.ApprovalForAll(owner=owner, operator=operator, approved=approved)
 
 
 @internal
@@ -837,7 +838,7 @@ def _mint(owner: address, token_id: uint256):
     # this is no longer even theoretically possible.
     self._balances[owner] = unsafe_add(self._balances[owner], 1)
     self._owners[token_id] = owner
-    log IERC721.Transfer(empty(address), owner, token_id)
+    log IERC721.Transfer(sender=empty(address), receiver=owner, token_id=token_id)
 
     self._after_token_transfer(empty(address), owner, token_id)
 
@@ -905,7 +906,7 @@ def _transfer(owner: address, to: address, token_id: uint256):
     self._balances[owner] = unsafe_sub(self._balances[owner], 1)
     self._balances[to] = unsafe_add(self._balances[to], 1)
     self._owners[token_id] = to
-    log IERC721.Transfer(owner, to, token_id)
+    log IERC721.Transfer(sender=owner, receiver=to, token_id=token_id)
 
     self._after_token_transfer(owner, to, token_id)
 
@@ -921,7 +922,7 @@ def _set_token_uri(token_id: uint256, token_uri: String[432]):
     """
     assert self._exists(token_id), "erc721: URI set of nonexistent token"
     self._token_uris[token_id] = token_uri
-    log IERC4906.MetadataUpdate(token_id)
+    log IERC4906.MetadataUpdate(_tokenId=token_id)
 
 
 @internal
@@ -958,7 +959,7 @@ def _burn(token_id: uint256):
     # received through minting and transfer.
     self._balances[owner] = unsafe_sub(self._balances[owner], 1)
     self._owners[token_id] = empty(address)
-    log IERC721.Transfer(owner, empty(address), token_id)
+    log IERC721.Transfer(sender=owner, receiver=empty(address), token_id=token_id)
 
     self._after_token_transfer(owner, empty(address), token_id)
 
diff --git a/src/snekmate/tokens/interfaces/IERC1155.vyi b/src/snekmate/tokens/interfaces/IERC1155.vyi
index ca5ee5c3..a8e99f67 100644
--- a/src/snekmate/tokens/interfaces/IERC1155.vyi
+++ b/src/snekmate/tokens/interfaces/IERC1155.vyi
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title EIP-1155 Interface Definition
 @custom:contract-name IERC1155
diff --git a/src/snekmate/tokens/interfaces/IERC1155MetadataURI.vyi b/src/snekmate/tokens/interfaces/IERC1155MetadataURI.vyi
index d9caa180..92e11904 100644
--- a/src/snekmate/tokens/interfaces/IERC1155MetadataURI.vyi
+++ b/src/snekmate/tokens/interfaces/IERC1155MetadataURI.vyi
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title EIP-1155 Optional Metadata Interface Definition
 @custom:contract-name IERC1155MetadataURI
diff --git a/src/snekmate/tokens/interfaces/IERC1155Receiver.vyi b/src/snekmate/tokens/interfaces/IERC1155Receiver.vyi
index 4a65824f..251e66c9 100644
--- a/src/snekmate/tokens/interfaces/IERC1155Receiver.vyi
+++ b/src/snekmate/tokens/interfaces/IERC1155Receiver.vyi
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title EIP-1155 Token Receiver Interface Definition
 @custom:contract-name IERC1155Receiver
diff --git a/src/snekmate/tokens/interfaces/IERC20Permit.vyi b/src/snekmate/tokens/interfaces/IERC20Permit.vyi
index 24cce558..4af7fd88 100644
--- a/src/snekmate/tokens/interfaces/IERC20Permit.vyi
+++ b/src/snekmate/tokens/interfaces/IERC20Permit.vyi
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title EIP-2612 Interface Definition
 @custom:contract-name IERC20Permit
diff --git a/src/snekmate/tokens/interfaces/IERC4906.vyi b/src/snekmate/tokens/interfaces/IERC4906.vyi
index 826662e0..a3c14eb2 100644
--- a/src/snekmate/tokens/interfaces/IERC4906.vyi
+++ b/src/snekmate/tokens/interfaces/IERC4906.vyi
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title EIP-4906 Interface Definition
 @custom:contract-name IERC4906
diff --git a/src/snekmate/tokens/interfaces/IERC721Enumerable.vyi b/src/snekmate/tokens/interfaces/IERC721Enumerable.vyi
index 9ffb27be..5c094db5 100644
--- a/src/snekmate/tokens/interfaces/IERC721Enumerable.vyi
+++ b/src/snekmate/tokens/interfaces/IERC721Enumerable.vyi
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title EIP-721 Optional Enumeration Interface Definition
 @custom:contract-name IERC721Enumerable
diff --git a/src/snekmate/tokens/interfaces/IERC721Metadata.vyi b/src/snekmate/tokens/interfaces/IERC721Metadata.vyi
index 2abf6b9e..ae1a7e72 100644
--- a/src/snekmate/tokens/interfaces/IERC721Metadata.vyi
+++ b/src/snekmate/tokens/interfaces/IERC721Metadata.vyi
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title EIP-721 Optional Metadata Interface Definition
 @custom:contract-name IERC721Metadata
diff --git a/src/snekmate/tokens/interfaces/IERC721Permit.vyi b/src/snekmate/tokens/interfaces/IERC721Permit.vyi
index 2d0695b5..63cc0469 100644
--- a/src/snekmate/tokens/interfaces/IERC721Permit.vyi
+++ b/src/snekmate/tokens/interfaces/IERC721Permit.vyi
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title EIP-4494 Interface Definition
 @custom:contract-name IERC721Permit
diff --git a/src/snekmate/tokens/interfaces/IERC721Receiver.vyi b/src/snekmate/tokens/interfaces/IERC721Receiver.vyi
index b6e92c68..db892b56 100644
--- a/src/snekmate/tokens/interfaces/IERC721Receiver.vyi
+++ b/src/snekmate/tokens/interfaces/IERC721Receiver.vyi
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title EIP-721 Token Receiver Interface Definition
 @custom:contract-name IERC721Receiver
diff --git a/src/snekmate/tokens/mocks/erc1155_mock.vy b/src/snekmate/tokens/mocks/erc1155_mock.vy
index be684743..460070d3 100644
--- a/src/snekmate/tokens/mocks/erc1155_mock.vy
+++ b/src/snekmate/tokens/mocks/erc1155_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title `erc1155` Module Reference Implementation
 @custom:contract-name erc1155_mock
@@ -114,6 +114,6 @@ def _customMint(owner: address, id: uint256, amount: uint256):
     # due to an arithmetic check of the entire token
     # supply in the function `_before_token_transfer`.
     erc1155.balanceOf[owner][id] = unsafe_add(erc1155.balanceOf[owner][id], amount)
-    log IERC1155.TransferSingle(msg.sender, empty(address), owner, id, amount)
+    log IERC1155.TransferSingle(_operator=msg.sender, _from=empty(address), _to=owner, _id=id, _value=amount)
 
     erc1155._after_token_transfer(empty(address), owner, erc1155._as_singleton_array(id), erc1155._as_singleton_array(amount), b"")
diff --git a/src/snekmate/tokens/mocks/erc20_mock.vy b/src/snekmate/tokens/mocks/erc20_mock.vy
index 818c22b4..24db022d 100644
--- a/src/snekmate/tokens/mocks/erc20_mock.vy
+++ b/src/snekmate/tokens/mocks/erc20_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title `erc20` Module Reference Implementation
 @custom:contract-name erc20_mock
diff --git a/src/snekmate/tokens/mocks/erc721_mock.vy b/src/snekmate/tokens/mocks/erc721_mock.vy
index 349842c9..44299be8 100644
--- a/src/snekmate/tokens/mocks/erc721_mock.vy
+++ b/src/snekmate/tokens/mocks/erc721_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title `erc721` Module Reference Implementation
 @custom:contract-name erc721_mock
diff --git a/src/snekmate/utils/base64.vy b/src/snekmate/utils/base64.vy
index cdc4815a..33b131e1 100644
--- a/src/snekmate/utils/base64.vy
+++ b/src/snekmate/utils/base64.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title Base64 Encoding and Decoding Functions
 @custom:contract-name base64
diff --git a/src/snekmate/utils/batch_distributor.vy b/src/snekmate/utils/batch_distributor.vy
index 38de404f..aec8130c 100644
--- a/src/snekmate/utils/batch_distributor.vy
+++ b/src/snekmate/utils/batch_distributor.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title Batch Sending Both Native and ERC-20 Tokens
 @custom:contract-name batch_distributor
diff --git a/src/snekmate/utils/create2_address.vy b/src/snekmate/utils/create2_address.vy
index da779047..1db41263 100644
--- a/src/snekmate/utils/create2_address.vy
+++ b/src/snekmate/utils/create2_address.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title `CREATE2` EVM Opcode Utility Functions for Address Calculations
 @custom:contract-name create2_address
diff --git a/src/snekmate/utils/create_address.vy b/src/snekmate/utils/create_address.vy
index 3491b25c..d6d2b49c 100644
--- a/src/snekmate/utils/create_address.vy
+++ b/src/snekmate/utils/create_address.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title `CREATE` EVM Opcode Utility Functions for Address Calculations
 @custom:contract-name create_address
diff --git a/src/snekmate/utils/ecdsa.vy b/src/snekmate/utils/ecdsa.vy
index b1c68c2c..bacf67ec 100644
--- a/src/snekmate/utils/ecdsa.vy
+++ b/src/snekmate/utils/ecdsa.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title Elliptic Curve Digital Signature Algorithm (ECDSA) Secp256k1-Based Functions
 @custom:contract-name ecdsa
diff --git a/src/snekmate/utils/eip712_domain_separator.vy b/src/snekmate/utils/eip712_domain_separator.vy
index db9156b7..bf379fb2 100644
--- a/src/snekmate/utils/eip712_domain_separator.vy
+++ b/src/snekmate/utils/eip712_domain_separator.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title EIP-712 Domain Separator
 @custom:contract-name eip712_domain_separator
diff --git a/src/snekmate/utils/interfaces/IERC1271.vyi b/src/snekmate/utils/interfaces/IERC1271.vyi
index c200aecc..e402a9ad 100644
--- a/src/snekmate/utils/interfaces/IERC1271.vyi
+++ b/src/snekmate/utils/interfaces/IERC1271.vyi
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title EIP-1271 Interface Definition
 @custom:contract-name IERC1271
diff --git a/src/snekmate/utils/interfaces/IERC5267.vyi b/src/snekmate/utils/interfaces/IERC5267.vyi
index a7b0f44a..d89d87ee 100644
--- a/src/snekmate/utils/interfaces/IERC5267.vyi
+++ b/src/snekmate/utils/interfaces/IERC5267.vyi
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title EIP-5267 Interface Definition
 @custom:contract-name IERC5267
diff --git a/src/snekmate/utils/math.vy b/src/snekmate/utils/math.vy
index c6c106e4..b43782fb 100644
--- a/src/snekmate/utils/math.vy
+++ b/src/snekmate/utils/math.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title Standard Mathematical Utility Functions
 @custom:contract-name math
diff --git a/src/snekmate/utils/merkle_proof_verification.vy b/src/snekmate/utils/merkle_proof_verification.vy
index f12ca68e..6e660f2f 100644
--- a/src/snekmate/utils/merkle_proof_verification.vy
+++ b/src/snekmate/utils/merkle_proof_verification.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title Merkle Tree Proof Verification Functions
 @custom:contract-name merkle_proof_verification
diff --git a/src/snekmate/utils/message_hash_utils.vy b/src/snekmate/utils/message_hash_utils.vy
index 032e8562..56008436 100644
--- a/src/snekmate/utils/message_hash_utils.vy
+++ b/src/snekmate/utils/message_hash_utils.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title Signature Message Hash Utility Functions
 @custom:contract-name message_hash_utils
diff --git a/src/snekmate/utils/mocks/base64_mock.vy b/src/snekmate/utils/mocks/base64_mock.vy
index 7ec07b16..158205c9 100644
--- a/src/snekmate/utils/mocks/base64_mock.vy
+++ b/src/snekmate/utils/mocks/base64_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title `base64` Module Reference Implementation
 @custom:contract-name base64_mock
diff --git a/src/snekmate/utils/mocks/batch_distributor_mock.vy b/src/snekmate/utils/mocks/batch_distributor_mock.vy
index d1bbc575..61fa502f 100644
--- a/src/snekmate/utils/mocks/batch_distributor_mock.vy
+++ b/src/snekmate/utils/mocks/batch_distributor_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title `batch_distributor` Module Reference Implementation
 @custom:contract-name batch_distributor_mock
diff --git a/src/snekmate/utils/mocks/create2_address_mock.vy b/src/snekmate/utils/mocks/create2_address_mock.vy
index 440b4e3f..1608581e 100644
--- a/src/snekmate/utils/mocks/create2_address_mock.vy
+++ b/src/snekmate/utils/mocks/create2_address_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title `create2_address` Module Reference Implementation
 @custom:contract-name create2_address_mock
diff --git a/src/snekmate/utils/mocks/create_address_mock.vy b/src/snekmate/utils/mocks/create_address_mock.vy
index e26d9958..fd3db79d 100644
--- a/src/snekmate/utils/mocks/create_address_mock.vy
+++ b/src/snekmate/utils/mocks/create_address_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title `create_address` Module Reference Implementation
 @custom:contract-name create_address_mock
diff --git a/src/snekmate/utils/mocks/ecdsa_mock.vy b/src/snekmate/utils/mocks/ecdsa_mock.vy
index 6bf8529c..c1905660 100644
--- a/src/snekmate/utils/mocks/ecdsa_mock.vy
+++ b/src/snekmate/utils/mocks/ecdsa_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title `ecdsa` Module Reference Implementation
 @custom:contract-name ecdsa_mock
diff --git a/src/snekmate/utils/mocks/eip712_domain_separator_mock.vy b/src/snekmate/utils/mocks/eip712_domain_separator_mock.vy
index 10132d80..ce9e2680 100644
--- a/src/snekmate/utils/mocks/eip712_domain_separator_mock.vy
+++ b/src/snekmate/utils/mocks/eip712_domain_separator_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title `eip712_domain_separator` Module Reference Implementation
 @custom:contract-name eip712_domain_separator_mock
diff --git a/src/snekmate/utils/mocks/math_mock.vy b/src/snekmate/utils/mocks/math_mock.vy
index af75643d..1ca8ddf6 100644
--- a/src/snekmate/utils/mocks/math_mock.vy
+++ b/src/snekmate/utils/mocks/math_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title `math` Module Reference Implementation
 @custom:contract-name math_mock
diff --git a/src/snekmate/utils/mocks/merkle_proof_verification_mock.vy b/src/snekmate/utils/mocks/merkle_proof_verification_mock.vy
index 90211849..99c4b7a6 100644
--- a/src/snekmate/utils/mocks/merkle_proof_verification_mock.vy
+++ b/src/snekmate/utils/mocks/merkle_proof_verification_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title `merkle_proof_verification` Module Reference Implementation
 @custom:contract-name merkle_proof_verification_mock
diff --git a/src/snekmate/utils/mocks/message_hash_utils_mock.vy b/src/snekmate/utils/mocks/message_hash_utils_mock.vy
index dd691e02..6836fcad 100644
--- a/src/snekmate/utils/mocks/message_hash_utils_mock.vy
+++ b/src/snekmate/utils/mocks/message_hash_utils_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title `message_hash_utils` Module Reference Implementation
 @custom:contract-name message_hash_utils_mock
diff --git a/src/snekmate/utils/mocks/multicall_mock.vy b/src/snekmate/utils/mocks/multicall_mock.vy
index 5b3c5eac..72cb942f 100644
--- a/src/snekmate/utils/mocks/multicall_mock.vy
+++ b/src/snekmate/utils/mocks/multicall_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title `multicall` Module Reference Implementation
 @custom:contract-name multicall_mock
diff --git a/src/snekmate/utils/mocks/p256_mock.vy b/src/snekmate/utils/mocks/p256_mock.vy
index f4e0658d..cfbafa51 100644
--- a/src/snekmate/utils/mocks/p256_mock.vy
+++ b/src/snekmate/utils/mocks/p256_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title `p256` Module Reference Implementation
 @custom:contract-name p256_mock
diff --git a/src/snekmate/utils/mocks/signature_checker_mock.vy b/src/snekmate/utils/mocks/signature_checker_mock.vy
index f911fcaa..4385c4a2 100644
--- a/src/snekmate/utils/mocks/signature_checker_mock.vy
+++ b/src/snekmate/utils/mocks/signature_checker_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title `signature_checker` Module Reference Implementation
 @custom:contract-name signature_checker_mock
diff --git a/src/snekmate/utils/multicall.vy b/src/snekmate/utils/multicall.vy
index e24ff8a1..d6443575 100644
--- a/src/snekmate/utils/multicall.vy
+++ b/src/snekmate/utils/multicall.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title Multicall Functions
 @custom:contract-name multicall
diff --git a/src/snekmate/utils/p256.vy b/src/snekmate/utils/p256.vy
index 236f67e0..920ae29d 100644
--- a/src/snekmate/utils/p256.vy
+++ b/src/snekmate/utils/p256.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title Elliptic Curve Digital Signature Algorithm (ECDSA) Secp256r1-Based Functions
 @custom:contract-name p256
diff --git a/src/snekmate/utils/signature_checker.vy b/src/snekmate/utils/signature_checker.vy
index 1a1f85d3..0cc99d25 100644
--- a/src/snekmate/utils/signature_checker.vy
+++ b/src/snekmate/utils/signature_checker.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0
+# pragma version ~=0.4.1
 """
 @title ECDSA and EIP-1271 Signature Verification Functions
 @custom:contract-name signature_checker


Test patch:
diff --git a/.github/workflows/test-contracts.yml b/.github/workflows/test-contracts.yml
index 1e245fec..04693526 100644
--- a/.github/workflows/test-contracts.yml
+++ b/.github/workflows/test-contracts.yml
@@ -34,6 +34,12 @@ jobs:
           python-version: ${{ matrix.python_version }}
           architecture: ${{ matrix.architecture }}
 
+      - name: Install Vyper
+        run: pip install git+https://github.com/vyperlang/vyper@master
+
+      - name: Show the Vyper version
+        run: vyper --version
+
       - name: Setup Ape
         uses: ApeWorX/github-action@v3
         with:
@@ -42,12 +48,6 @@ jobs:
       - name: Check Ape compilation
         run: ape compile
 
-      - name: Remove Ape Vyper and install latest Vyper
-        run: pip install --force-reinstall vyper
-
-      - name: Show the Vyper version
-        run: vyper --version
-
       - name: Install pnpm
         uses: pnpm/action-setup@v3
         with: