From 99b749a34977882fa15349595ee3629abf95d0c1 Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Tue, 16 Apr 2024 13:23:44 +0200 Subject: [PATCH 1/5] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Make=20`ERC721`=20Modu?= =?UTF-8?q?le-Friendly?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Pascal Marco Caversaccio --- .gas-snapshot | 326 +++++++++--------- CHANGELOG.md | 1 + README.md | 3 +- src/snekmate/extensions/mocks/ERC2981Mock.vy | 2 +- src/snekmate/governance/TimelockController.vy | 16 +- src/snekmate/tokens/ERC1155.vy | 20 +- src/snekmate/tokens/ERC721.vy | 258 ++++---------- src/snekmate/tokens/mocks/ERC721Mock.vy | 108 ++++++ src/snekmate/utils/CreateAddress.vy | 4 +- src/snekmate/utils/ECDSA.vy | 4 +- src/snekmate/utils/EIP712DomainSeparator.vy | 2 +- src/snekmate/utils/Math.vy | 16 +- src/snekmate/utils/MerkleProofVerification.vy | 4 +- src/snekmate/utils/SignatureChecker.vy | 2 +- test/governance/TimelockController.t.sol | 6 +- test/tokens/ERC721.t.sol | 28 +- 16 files changed, 397 insertions(+), 403 deletions(-) create mode 100644 src/snekmate/tokens/mocks/ERC721Mock.vy diff --git a/.gas-snapshot b/.gas-snapshot index 659fd8a3..8f0e9185 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -1,5 +1,5 @@ AccessControlInvariants:statefulFuzzGetRoleAdmin() (runs: 256, calls: 3840, reverts: 3840) -AccessControlInvariants:statefulFuzzHasRole() (runs: 256, calls: 3840, reverts: 3839) +AccessControlInvariants:statefulFuzzHasRole() (runs: 256, calls: 3840, reverts: 3840) AccessControlTest:testFuzzGrantRoleAdminRoleSuccess(address) (runs: 256, μ: 44086, ~: 44086) AccessControlTest:testFuzzGrantRoleMultipleTimesSuccess(address) (runs: 256, μ: 49993, ~: 49993) AccessControlTest:testFuzzGrantRoleNonAdmin(address,address) (runs: 256, μ: 16763, ~: 16763) @@ -61,52 +61,52 @@ BatchDistributorTest:testDistributeTokenMultipleAddressesSuccess() (gas: 644741) BatchDistributorTest:testDistributeTokenOneAddressSuccess() (gas: 606328) BatchDistributorTest:testDistributeTokenRevertWithInsufficientAllowance() (gas: 601641) BatchDistributorTest:testDistributeTokenRevertWithInsufficientBalance() (gas: 602294) -BatchDistributorTest:testFuzzDistributeEtherMultipleAddressesSuccess(((address,uint256)[]),uint256) (runs: 256, μ: 1780946, ~: 1662496) -BatchDistributorTest:testFuzzDistributeTokenMultipleAddressesSuccess(((address,uint256)[]),address,uint256) (runs: 256, μ: 1348383, ~: 1322416) +BatchDistributorTest:testFuzzDistributeEtherMultipleAddressesSuccess(((address,uint256)[]),uint256) (runs: 256, μ: 1791156, ~: 1662856) +BatchDistributorTest:testFuzzDistributeTokenMultipleAddressesSuccess(((address,uint256)[]),address,uint256) (runs: 256, μ: 1348115, ~: 1322416) Create2AddressTest:testComputeAddress() (gas: 550587) Create2AddressTest:testComputeAddressSelf() (gas: 559319) Create2AddressTest:testFuzzComputeAddress(bytes32,address) (runs: 256, μ: 551182, ~: 551182) Create2AddressTest:testFuzzComputeAddressSelf(bytes32) (runs: 256, μ: 559340, ~: 559340) CreateAddressTest:testComputeAddressNonce0x00() (gas: 16545) -CreateAddressTest:testComputeAddressNonce0x7f() (gas: 535262) +CreateAddressTest:testComputeAddressNonce0x7f() (gas: 535273) CreateAddressTest:testComputeAddressNonceUint16() (gas: 535314) CreateAddressTest:testComputeAddressNonceUint24() (gas: 535409) CreateAddressTest:testComputeAddressNonceUint32() (gas: 535371) CreateAddressTest:testComputeAddressNonceUint40() (gas: 535443) CreateAddressTest:testComputeAddressNonceUint48() (gas: 535471) -CreateAddressTest:testComputeAddressNonceUint56() (gas: 535499) -CreateAddressTest:testComputeAddressNonceUint64() (gas: 535636) +CreateAddressTest:testComputeAddressNonceUint56() (gas: 535495) +CreateAddressTest:testComputeAddressNonceUint64() (gas: 535623) CreateAddressTest:testComputeAddressNonceUint8() (gas: 535354) CreateAddressTest:testComputeAddressRevertTooHighNonce() (gas: 10928) -CreateAddressTest:testComputeAddressSelfNonce0x7f() (gas: 539553) +CreateAddressTest:testComputeAddressSelfNonce0x7f() (gas: 539564) CreateAddressTest:testComputeAddressSelfNonceUint16() (gas: 539774) CreateAddressTest:testComputeAddressSelfNonceUint24() (gas: 539803) CreateAddressTest:testComputeAddressSelfNonceUint32() (gas: 539899) CreateAddressTest:testComputeAddressSelfNonceUint40() (gas: 539928) CreateAddressTest:testComputeAddressSelfNonceUint48() (gas: 539956) -CreateAddressTest:testComputeAddressSelfNonceUint56() (gas: 539985) -CreateAddressTest:testComputeAddressSelfNonceUint64() (gas: 540102) +CreateAddressTest:testComputeAddressSelfNonceUint56() (gas: 539981) +CreateAddressTest:testComputeAddressSelfNonceUint64() (gas: 540089) CreateAddressTest:testComputeAddressSelfNonceUint8() (gas: 539708) CreateAddressTest:testComputeAddressSelfRevertTooHighNonce() (gas: 9190) -CreateAddressTest:testFuzzComputeAddressNonce0x7f(uint64,address) (runs: 256, μ: 538248, ~: 538402) -CreateAddressTest:testFuzzComputeAddressNonceUint16(uint64,address) (runs: 256, μ: 537739, ~: 537867) +CreateAddressTest:testFuzzComputeAddressNonce0x7f(uint64,address) (runs: 256, μ: 538261, ~: 538413) +CreateAddressTest:testFuzzComputeAddressNonceUint16(uint64,address) (runs: 256, μ: 537738, ~: 537867) CreateAddressTest:testFuzzComputeAddressNonceUint24(uint64,address) (runs: 256, μ: 537889, ~: 537993) CreateAddressTest:testFuzzComputeAddressNonceUint32(uint64,address) (runs: 256, μ: 537869, ~: 538000) -CreateAddressTest:testFuzzComputeAddressNonceUint40(uint64,address) (runs: 256, μ: 537994, ~: 538092) -CreateAddressTest:testFuzzComputeAddressNonceUint48(uint64,address) (runs: 256, μ: 537975, ~: 538076) -CreateAddressTest:testFuzzComputeAddressNonceUint56(uint64,address) (runs: 256, μ: 537991, ~: 538105) -CreateAddressTest:testFuzzComputeAddressNonceUint64(uint64,address) (runs: 256, μ: 538008, ~: 538209) -CreateAddressTest:testFuzzComputeAddressNonceUint8(uint64,address) (runs: 256, μ: 537770, ~: 537867) -CreateAddressTest:testFuzzComputeAddressRevertTooHighNonce(uint256,address) (runs: 256, μ: 13165, ~: 13139) -CreateAddressTest:testFuzzComputeAddressSelfNonce0x7f(uint64) (runs: 256, μ: 544549, ~: 544650) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint16(uint64) (runs: 256, μ: 543791, ~: 543939) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint24(uint64) (runs: 256, μ: 544045, ~: 544140) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint32(uint64) (runs: 256, μ: 544114, ~: 544236) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint40(uint64) (runs: 256, μ: 544139, ~: 544220) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint48(uint64) (runs: 256, μ: 544177, ~: 544294) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint56(uint64) (runs: 256, μ: 544276, ~: 544364) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint64(uint64) (runs: 256, μ: 544326, ~: 544494) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint8(uint64) (runs: 256, μ: 543857, ~: 543931) +CreateAddressTest:testFuzzComputeAddressNonceUint40(uint64,address) (runs: 256, μ: 537996, ~: 538092) +CreateAddressTest:testFuzzComputeAddressNonceUint48(uint64,address) (runs: 256, μ: 537974, ~: 538076) +CreateAddressTest:testFuzzComputeAddressNonceUint56(uint64,address) (runs: 256, μ: 537994, ~: 538101) +CreateAddressTest:testFuzzComputeAddressNonceUint64(uint64,address) (runs: 256, μ: 537994, ~: 538196) +CreateAddressTest:testFuzzComputeAddressNonceUint8(uint64,address) (runs: 256, μ: 537771, ~: 537867) +CreateAddressTest:testFuzzComputeAddressRevertTooHighNonce(uint256,address) (runs: 256, μ: 13167, ~: 13139) +CreateAddressTest:testFuzzComputeAddressSelfNonce0x7f(uint64) (runs: 256, μ: 544563, ~: 544661) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint16(uint64) (runs: 256, μ: 543794, ~: 543939) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint24(uint64) (runs: 256, μ: 544048, ~: 544140) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint32(uint64) (runs: 256, μ: 544117, ~: 544236) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint40(uint64) (runs: 256, μ: 544133, ~: 544220) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint48(uint64) (runs: 256, μ: 544176, ~: 544294) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint56(uint64) (runs: 256, μ: 544271, ~: 544360) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint64(uint64) (runs: 256, μ: 544315, ~: 544481) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint8(uint64) (runs: 256, μ: 543861, ~: 543931) CreateAddressTest:testFuzzComputeAddressSelfRevertTooHighNonce(uint256) (runs: 256, μ: 13056, ~: 13014) ECDSATest:testFuzzRecoverWithInvalidSignature(bytes,string) (runs: 256, μ: 15647, ~: 15652) ECDSATest:testFuzzRecoverWithTooLongSignature(bytes,string) (runs: 256, μ: 13917, ~: 13920) @@ -160,22 +160,22 @@ ERC1155Test:testFuzzBurnBatchSuccess(address,uint256,uint256,uint256,uint256) (r ERC1155Test:testFuzzBurnSuccess(address,address,uint256) (runs: 256, μ: 141351, ~: 141361) ERC1155Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 14072, ~: 14072) ERC1155Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48765, ~: 48749) -ERC1155Test:testFuzzSafeBatchTransferFromByApprovedOperator(address,address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 227521, ~: 227503) +ERC1155Test:testFuzzSafeBatchTransferFromByApprovedOperator(address,address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 227531, ~: 227503) ERC1155Test:testFuzzSafeBatchTransferFromEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 191856, ~: 191831) -ERC1155Test:testFuzzSafeBatchTransferFromNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 565661, ~: 565691) -ERC1155Test:testFuzzSafeBatchTransferFromWithData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 566254, ~: 565848) +ERC1155Test:testFuzzSafeBatchTransferFromNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 565691, ~: 565691) +ERC1155Test:testFuzzSafeBatchTransferFromWithData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 566248, ~: 565848) ERC1155Test:testFuzzSafeMintBatchEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 153753, ~: 153765) ERC1155Test:testFuzzSafeMintBatchNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 521494, ~: 521494) ERC1155Test:testFuzzSafeMintBatchNonMinter(address) (runs: 256, μ: 41062, ~: 41062) -ERC1155Test:testFuzzSafeMintBatchWithData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 521825, ~: 521609) +ERC1155Test:testFuzzSafeMintBatchWithData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 521826, ~: 521609) ERC1155Test:testFuzzSafeMintEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 152854, ~: 152845) ERC1155Test:testFuzzSafeMintNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 521696, ~: 521706) ERC1155Test:testFuzzSafeMintNonMinter(address) (runs: 256, μ: 33388, ~: 33388) -ERC1155Test:testFuzzSafeMintWithData(address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 523008, ~: 522574) +ERC1155Test:testFuzzSafeMintWithData(address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 523025, ~: 522574) ERC1155Test:testFuzzSafeTransferFromByApprovedOperator(address,address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 206616, ~: 206578) ERC1155Test:testFuzzSafeTransferFromEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 171026, ~: 170993) ERC1155Test:testFuzzSafeTransferFromNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 610344, ~: 610344) -ERC1155Test:testFuzzSafeTransferFromWithData(address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 612419, ~: 611606) +ERC1155Test:testFuzzSafeTransferFromWithData(address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 612409, ~: 611606) ERC1155Test:testFuzzSetApprovalForAllRevoke(address,address) (runs: 256, μ: 31998, ~: 31969) ERC1155Test:testFuzzSetApprovalForAllSuccess(address,address) (runs: 256, μ: 45362, ~: 45362) ERC1155Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 15868, ~: 15867) @@ -342,18 +342,18 @@ ERC2981Test:testDeleteDefaultRoyaltyNonOwner() (gas: 10656) ERC2981Test:testFuzzDeleteDefaultRoyaltyNonOwner(address) (runs: 256, μ: 13390, ~: 13390) ERC2981Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 14045, ~: 14045) ERC2981Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 25274, ~: 25274) -ERC2981Test:testFuzzResetTokenRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 95514, ~: 97984) +ERC2981Test:testFuzzResetTokenRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 95519, ~: 97992) ERC2981Test:testFuzzResetTokenRoyaltyNonOwner(address) (runs: 256, μ: 13342, ~: 13342) ERC2981Test:testFuzzRoyaltyInfoDefaultRoyalty(address,uint256,uint256,uint96,uint256) (runs: 256, μ: 80008, ~: 81442) ERC2981Test:testFuzzRoyaltyInfoDeleteDefaultRoyalty(address,uint256,uint256,uint96,uint256) (runs: 256, μ: 65167, ~: 66161) ERC2981Test:testFuzzRoyaltyInfoSetTokenRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 119682, ~: 122933) ERC2981Test:testFuzzRoyaltyInfoSetTokenRoyaltyUpdate(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 165333, ~: 169643) -ERC2981Test:testFuzzRoyaltyInfoUpdateDefaultRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 87424, ~: 89169) +ERC2981Test:testFuzzRoyaltyInfoUpdateDefaultRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 87660, ~: 89169) ERC2981Test:testFuzzSetDefaultRoyaltyNonOwner(address) (runs: 256, μ: 15647, ~: 15647) -ERC2981Test:testFuzzSetDefaultRoyaltyTooHighFeeNumerator(uint96) (runs: 256, μ: 21564, ~: 21379) +ERC2981Test:testFuzzSetDefaultRoyaltyTooHighFeeNumerator(uint96) (runs: 256, μ: 21565, ~: 21379) ERC2981Test:testFuzzSetTokenRoyaltyInvalidReceiver(address) (runs: 256, μ: 18724, ~: 18724) ERC2981Test:testFuzzSetTokenRoyaltyNonOwner(address) (runs: 256, μ: 15664, ~: 15664) -ERC2981Test:testFuzzSetTokenRoyaltyTooHighFeeNumerator(uint96) (runs: 256, μ: 21582, ~: 21397) +ERC2981Test:testFuzzSetTokenRoyaltyTooHighFeeNumerator(uint96) (runs: 256, μ: 21583, ~: 21397) ERC2981Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14112, ~: 14112) ERC2981Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 30265, ~: 30265) ERC2981Test:testHasOwner() (gas: 12549) @@ -393,10 +393,10 @@ ERC4626VaultTest:testEmptyVaultDeposit() (gas: 567916) ERC4626VaultTest:testEmptyVaultMint() (gas: 568733) ERC4626VaultTest:testEmptyVaultRedeem() (gas: 203315) ERC4626VaultTest:testEmptyVaultwithdraw() (gas: 216172) -ERC4626VaultTest:testFail_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 555851, ~: 558607) -ERC4626VaultTest:testFail_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 557698, ~: 560311) +ERC4626VaultTest:testFail_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 556097, ~: 558607) +ERC4626VaultTest:testFail_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 557960, ~: 560311) ERC4626VaultTest:testFuzzDomainSeparator(uint8) (runs: 256, μ: 11946, ~: 11966) -ERC4626VaultTest:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 22205, ~: 22188) +ERC4626VaultTest:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 22209, ~: 22213) ERC4626VaultTest:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 45306, ~: 45304) ERC4626VaultTest:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 70966, ~: 70962) ERC4626VaultTest:testInitialSetup() (gas: 6097320) @@ -417,32 +417,32 @@ ERC4626VaultTest:testVaultInteractionsForSomeoneElse() (gas: 224733) ERC4626VaultTest:testWithdrawInsufficientAllowance() (gas: 122657) ERC4626VaultTest:testWithdrawInsufficientAssets() (gas: 118047) ERC4626VaultTest:testWithdrawWithNoAssets() (gas: 21600) -ERC4626VaultTest:test_RT_deposit_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472974, ~: 476289) -ERC4626VaultTest:test_RT_deposit_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474541, ~: 477597) -ERC4626VaultTest:test_RT_mint_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472779, ~: 476080) -ERC4626VaultTest:test_RT_mint_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474711, ~: 478385) -ERC4626VaultTest:test_RT_redeem_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473124, ~: 476818) -ERC4626VaultTest:test_RT_redeem_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473736, ~: 476927) -ERC4626VaultTest:test_RT_withdraw_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474805, ~: 477661) -ERC4626VaultTest:test_RT_withdraw_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474761, ~: 478632) -ERC4626VaultTest:test_asset((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423655, ~: 427751) -ERC4626VaultTest:test_convertToAssets((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 430200, ~: 433065) -ERC4626VaultTest:test_convertToShares((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 429452, ~: 432880) -ERC4626VaultTest:test_deposit((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 471601, ~: 473903) -ERC4626VaultTest:test_maxDeposit((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423649, ~: 427745) -ERC4626VaultTest:test_maxMint((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423674, ~: 427770) -ERC4626VaultTest:test_maxRedeem((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423789, ~: 427885) -ERC4626VaultTest:test_maxWithdraw((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 425323, ~: 429381) -ERC4626VaultTest:test_mint((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 472012, ~: 474228) -ERC4626VaultTest:test_previewDeposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 465261, ~: 468479) -ERC4626VaultTest:test_previewMint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 465710, ~: 469130) -ERC4626VaultTest:test_previewRedeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 467944, ~: 470582) -ERC4626VaultTest:test_previewWithdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 470604, ~: 472135) -ERC4626VaultTest:test_redeem((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 474929, ~: 477114) -ERC4626VaultTest:test_totalAssets((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424239, ~: 428334) -ERC4626VaultTest:test_withdraw((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 476676, ~: 478595) -ERC721Invariants:invariantOwner() (runs: 256, calls: 3840, reverts: 3439) -ERC721Invariants:invariantTotalSupply() (runs: 256, calls: 3840, reverts: 3439) +ERC4626VaultTest:test_RT_deposit_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472029, ~: 475943) +ERC4626VaultTest:test_RT_deposit_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474067, ~: 477732) +ERC4626VaultTest:test_RT_mint_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472891, ~: 476433) +ERC4626VaultTest:test_RT_mint_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474566, ~: 478464) +ERC4626VaultTest:test_RT_redeem_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473133, ~: 476769) +ERC4626VaultTest:test_RT_redeem_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473107, ~: 476903) +ERC4626VaultTest:test_RT_withdraw_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474784, ~: 478307) +ERC4626VaultTest:test_RT_withdraw_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 475159, ~: 478656) +ERC4626VaultTest:test_asset((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 422840, ~: 427865) +ERC4626VaultTest:test_convertToAssets((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 430395, ~: 433128) +ERC4626VaultTest:test_convertToShares((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 429450, ~: 432935) +ERC4626VaultTest:test_deposit((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 471532, ~: 473847) +ERC4626VaultTest:test_maxDeposit((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 422835, ~: 427860) +ERC4626VaultTest:test_maxMint((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 422860, ~: 427884) +ERC4626VaultTest:test_maxRedeem((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 422975, ~: 428000) +ERC4626VaultTest:test_maxWithdraw((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424521, ~: 429623) +ERC4626VaultTest:test_mint((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 471585, ~: 474194) +ERC4626VaultTest:test_previewDeposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 464973, ~: 468449) +ERC4626VaultTest:test_previewMint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 465730, ~: 469109) +ERC4626VaultTest:test_previewRedeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 467941, ~: 470620) +ERC4626VaultTest:test_previewWithdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 470697, ~: 472281) +ERC4626VaultTest:test_redeem((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 474885, ~: 477054) +ERC4626VaultTest:test_totalAssets((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423426, ~: 428448) +ERC4626VaultTest:test_withdraw((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 476856, ~: 478504) +ERC721Invariants:statefulFuzzOwner() (runs: 256, calls: 3840, reverts: 3439) +ERC721Invariants:statefulFuzzTotalSupply() (runs: 256, calls: 3840, reverts: 3439) ERC721Test:testApproveClearingApprovalWithNoPriorApproval() (gas: 177703) ERC721Test:testApproveClearingApprovalWithPriorApproval() (gas: 186783) ERC721Test:testApproveFromApprovedAddress() (gas: 199968) @@ -459,47 +459,47 @@ ERC721Test:testBalanceOfCase2() (gas: 12256) ERC721Test:testBalanceOfZeroAddress() (gas: 11233) ERC721Test:testBurnSuccess() (gas: 306780) ERC721Test:testBurnSuccessViaApproveAndSetApprovalForAll() (gas: 372708) -ERC721Test:testCachedDomainSeparator() (gas: 10588) -ERC721Test:testDomainSeparator() (gas: 11839) -ERC721Test:testEIP712Domain() (gas: 18910) -ERC721Test:testFuzzApproveClearingApprovalWithNoPriorApproval(address,address) (runs: 256, μ: 197202, ~: 197202) -ERC721Test:testFuzzApproveClearingApprovalWithPriorApproval(address,address) (runs: 256, μ: 184851, ~: 184861) +ERC721Test:testCachedDomainSeparator() (gas: 10601) +ERC721Test:testDomainSeparator() (gas: 11832) +ERC721Test:testEIP712Domain() (gas: 18900) +ERC721Test:testFuzzApproveClearingApprovalWithNoPriorApproval(address,address) (runs: 256, μ: 197182, ~: 197202) +ERC721Test:testFuzzApproveClearingApprovalWithPriorApproval(address,address) (runs: 256, μ: 184841, ~: 184861) ERC721Test:testFuzzApproveFromNonOwner(address) (runs: 256, μ: 173144, ~: 173144) ERC721Test:testFuzzApproveFromOperatorAddress(address,address,address) (runs: 256, μ: 223352, ~: 223352) -ERC721Test:testFuzzApproveWithNoPriorApproval(address,address) (runs: 256, μ: 197157, ~: 197157) -ERC721Test:testFuzzApproveWithPriorApproval(address,address) (runs: 256, μ: 204673, ~: 204673) +ERC721Test:testFuzzApproveWithNoPriorApproval(address,address) (runs: 256, μ: 197137, ~: 197157) +ERC721Test:testFuzzApproveWithPriorApproval(address,address) (runs: 256, μ: 204653, ~: 204673) ERC721Test:testFuzzBurnSuccess(address) (runs: 256, μ: 306118, ~: 306104) -ERC721Test:testFuzzDomainSeparator(uint8) (runs: 256, μ: 12030, ~: 12052) -ERC721Test:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 22385, ~: 22390) -ERC721Test:testFuzzGetApprovedApprovedTokenId(address,address) (runs: 256, μ: 194788, ~: 194788) -ERC721Test:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 201756, ~: 201754) -ERC721Test:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 227880, ~: 227876) +ERC721Test:testFuzzDomainSeparator(uint8) (runs: 256, μ: 12026, ~: 12045) +ERC721Test:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 22358, ~: 22360) +ERC721Test:testFuzzGetApprovedApprovedTokenId(address,address) (runs: 256, μ: 194768, ~: 194788) +ERC721Test:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 201782, ~: 201780) +ERC721Test:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 227906, ~: 227902) ERC721Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 14033, ~: 14033) -ERC721Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48687, ~: 48672) +ERC721Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48688, ~: 48672) ERC721Test:testFuzzSafeMintNonMinter(address) (runs: 256, μ: 16008, ~: 16008) -ERC721Test:testFuzzSafeMintSuccess(address[]) (runs: 256, μ: 21695521, ~: 22321101) -ERC721Test:testFuzzSafeTransferFromWithData(address,address,address,bytes) (runs: 256, μ: 1461131, ~: 1462200) +ERC721Test:testFuzzSafeMintSuccess(address[]) (runs: 256, μ: 21518425, ~: 22059525) +ERC721Test:testFuzzSafeTransferFromWithData(address,address,address,bytes) (runs: 256, μ: 1461589, ~: 1462590) ERC721Test:testFuzzSetApprovalForAllSuccess(address,address) (runs: 256, μ: 189686, ~: 189686) ERC721Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 15918, ~: 15917) ERC721Test:testFuzzSetMinterSuccess(string) (runs: 256, μ: 33847, ~: 33847) -ERC721Test:testFuzzTokenByIndex(address,string[]) (runs: 256, μ: 22562676, ~: 23258671) -ERC721Test:testFuzzTotalSupply(address,string[]) (runs: 256, μ: 22379043, ~: 23068070) -ERC721Test:testFuzzTransferFrom(address,address,address) (runs: 256, μ: 569551, ~: 569538) +ERC721Test:testFuzzTokenByIndex(address,string[]) (runs: 256, μ: 22543974, ~: 23258671) +ERC721Test:testFuzzTotalSupply(address,string[]) (runs: 256, μ: 22360480, ~: 23068070) +ERC721Test:testFuzzTransferFrom(address,address,address) (runs: 256, μ: 569557, ~: 569538) ERC721Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14185, ~: 14185) ERC721Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 75742, ~: 75715) ERC721Test:testGetApprovedApprovedTokenId() (gas: 194690) ERC721Test:testGetApprovedInvalidTokenId() (gas: 11191) ERC721Test:testGetApprovedNotApprovedTokenId() (gas: 170916) ERC721Test:testHasOwner() (gas: 12585) -ERC721Test:testInitialSetup() (gas: 2593253) +ERC721Test:testInitialSetup() (gas: 2596898) ERC721Test:testOwnerOf() (gas: 166557) ERC721Test:testOwnerOfInvalidTokenId() (gas: 11146) -ERC721Test:testPermitBadChainId() (gas: 200249) -ERC721Test:testPermitBadNonce() (gas: 197419) -ERC721Test:testPermitExpiredDeadline() (gas: 170787) -ERC721Test:testPermitOtherSignature() (gas: 198296) -ERC721Test:testPermitReplaySignature() (gas: 230645) -ERC721Test:testPermitSuccess() (gas: 226912) +ERC721Test:testPermitBadChainId() (gas: 200262) +ERC721Test:testPermitBadNonce() (gas: 197445) +ERC721Test:testPermitExpiredDeadline() (gas: 170800) +ERC721Test:testPermitOtherSignature() (gas: 198322) +ERC721Test:testPermitReplaySignature() (gas: 230684) +ERC721Test:testPermitSuccess() (gas: 226938) ERC721Test:testRenounceOwnershipNonOwner() (gas: 11039) ERC721Test:testRenounceOwnershipSuccess() (gas: 22899) ERC721Test:testSafeMintNonMinter() (gas: 13339) @@ -513,13 +513,13 @@ ERC721Test:testSafeMintReceiverContractRevertsWithoutMessage() (gas: 337342) ERC721Test:testSafeMintSuccess() (gas: 526184) ERC721Test:testSafeMintToZeroAddress() (gas: 38529) ERC721Test:testSafeMintTokenAlreadyMinted() (gas: 363526) -ERC721Test:testSafeTransferFromNoData() (gas: 1461700) -ERC721Test:testSafeTransferFromReceiverFunctionNotImplemented() (gas: 181220) -ERC721Test:testSafeTransferFromReceiverInvalidReturnIdentifier() (gas: 405690) -ERC721Test:testSafeTransferFromReceiverRevertsWithMessage() (gas: 402761) -ERC721Test:testSafeTransferFromReceiverRevertsWithPanic() (gas: 403027) -ERC721Test:testSafeTransferFromReceiverRevertsWithoutMessage() (gas: 402391) -ERC721Test:testSafeTransferFromWithData() (gas: 1217469) +ERC721Test:testSafeTransferFromNoData() (gas: 1462086) +ERC721Test:testSafeTransferFromReceiverFunctionNotImplemented() (gas: 181243) +ERC721Test:testSafeTransferFromReceiverInvalidReturnIdentifier() (gas: 405713) +ERC721Test:testSafeTransferFromReceiverRevertsWithMessage() (gas: 402784) +ERC721Test:testSafeTransferFromReceiverRevertsWithPanic() (gas: 403050) +ERC721Test:testSafeTransferFromReceiverRevertsWithoutMessage() (gas: 402414) +ERC721Test:testSafeTransferFromWithData() (gas: 1217856) ERC721Test:testSetApprovalForAllOperatorIsOwner() (gas: 167751) ERC721Test:testSetApprovalForAllSuccessCase1() (gas: 196300) ERC721Test:testSetApprovalForAllSuccessCase2() (gas: 189617) @@ -534,34 +534,34 @@ ERC721Test:testSupportsInterfaceSuccess() (gas: 14714) ERC721Test:testSupportsInterfaceSuccessGasCost() (gas: 9365) ERC721Test:testTokenByIndex() (gas: 556613) ERC721Test:testTokenByIndexOutOfBounds() (gas: 331111) -ERC721Test:testTokenOfOwnerByIndex() (gas: 576445) -ERC721Test:testTokenOfOwnerByIndexReverts() (gas: 548519) +ERC721Test:testTokenOfOwnerByIndex() (gas: 576468) +ERC721Test:testTokenOfOwnerByIndexReverts() (gas: 548588) ERC721Test:testTokenURIAfterBurning() (gas: 139079) ERC721Test:testTokenURIDefault() (gas: 169580) ERC721Test:testTokenURIInvalidTokenId() (gas: 13266) -ERC721Test:testTokenURINoBaseURI() (gas: 2712287) +ERC721Test:testTokenURINoBaseURI() (gas: 2715928) ERC721Test:testTokenURINoTokenUri() (gas: 126774) ERC721Test:testTotalSupply() (gas: 329177) ERC721Test:testTransferFrom() (gas: 579090) ERC721Test:testTransferOwnershipNonOwner() (gas: 12707) ERC721Test:testTransferOwnershipSuccess() (gas: 54110) ERC721Test:testTransferOwnershipToZeroAddress() (gas: 15838) -MathTest:testCbrtRoundDown() (gas: 51840) -MathTest:testCbrtRoundUp() (gas: 52487) +MathTest:testCbrtRoundDown() (gas: 51656) +MathTest:testCbrtRoundUp() (gas: 52303) MathTest:testCeilDiv() (gas: 14821) -MathTest:testFuzzCbrt(uint256,bool) (runs: 256, μ: 22380, ~: 22161) +MathTest:testFuzzCbrt(uint256,bool) (runs: 256, μ: 22376, ~: 22165) MathTest:testFuzzCeilDiv(uint256,uint256) (runs: 256, μ: 9743, ~: 9770) MathTest:testFuzzInt256Average(int256,int256) (runs: 256, μ: 8625, ~: 8625) -MathTest:testFuzzLog10(uint256,bool) (runs: 256, μ: 10207, ~: 10226) +MathTest:testFuzzLog10(uint256,bool) (runs: 256, μ: 10206, ~: 10226) MathTest:testFuzzLog2(uint256,bool) (runs: 256, μ: 9982, ~: 9994) MathTest:testFuzzLog256(uint256,bool) (runs: 256, μ: 10091, ~: 10092) MathTest:testFuzzMulDiv(uint256,uint256,uint256) (runs: 256, μ: 14325, ~: 14078) MathTest:testFuzzMulDivDomain(uint256,uint256,uint256) (runs: 256, μ: 10811, ~: 10890) MathTest:testFuzzSignum(int256) (runs: 256, μ: 8508, ~: 8500) MathTest:testFuzzUint256Average(uint256,uint256) (runs: 256, μ: 8688, ~: 8688) -MathTest:testFuzzWadCbrt(uint256) (runs: 256, μ: 22230, ~: 21922) +MathTest:testFuzzWadCbrt(uint256) (runs: 256, μ: 22229, ~: 21896) MathTest:testFuzzWadExp(int256) (runs: 256, μ: 15309, ~: 15410) -MathTest:testFuzzWadLn(int256) (runs: 256, μ: 16829, ~: 16614) +MathTest:testFuzzWadLn(int256) (runs: 256, μ: 16823, ~: 16609) MathTest:testInt256Average() (gas: 18843) MathTest:testLog10RoundDown() (gas: 25912) MathTest:testLog10RoundUp() (gas: 27093) @@ -577,13 +577,13 @@ MathTest:testMulDivRoundUpLargeValues() (gas: 17901) MathTest:testMulDivRoundUpSmallValues() (gas: 11836) MathTest:testSignum() (gas: 17752) MathTest:testUint256Average() (gas: 12911) -MathTest:testWadCbrt() (gas: 48483) +MathTest:testWadCbrt() (gas: 48299) MathTest:testWadExp() (gas: 34590) MathTest:testWadExpOverflow() (gas: 11387) MathTest:testWadLn() (gas: 31609) MathTest:testWadLnNegativeValues() (gas: 11360) -MerkleProofVerificationTest:testFuzzMultiProofVerifySingleLeaf(bytes32[],uint256) (runs: 256, μ: 262136, ~: 258952) -MerkleProofVerificationTest:testFuzzVerify(bytes32[],uint256) (runs: 256, μ: 174896, ~: 171683) +MerkleProofVerificationTest:testFuzzMultiProofVerifySingleLeaf(bytes32[],uint256) (runs: 256, μ: 262136, ~: 258922) +MerkleProofVerificationTest:testFuzzVerify(bytes32[],uint256) (runs: 256, μ: 174897, ~: 171653) MerkleProofVerificationTest:testFuzzVerifyMultiProofMultipleLeaves(bool,bool,bool) (runs: 256, μ: 46263, ~: 46254) MerkleProofVerificationTest:testInvalidMerkleMultiProof() (gas: 49759) MerkleProofVerificationTest:testInvalidMerkleProof() (gas: 20183) @@ -659,79 +659,79 @@ SignatureCheckerTest:testFuzzEOAWithInvalidSignature(bytes,string) (runs: 256, SignatureCheckerTest:testFuzzEOAWithInvalidSigner(string,string) (runs: 256, μ: 21689, ~: 21750) SignatureCheckerTest:testFuzzEOAWithValidSignature(string,string) (runs: 256, μ: 21599, ~: 21660) SignatureCheckerTest:testInitialSetup() (gas: 8292) -TimelockControllerInvariants:statefulFuzzExecutedLessThanOrEqualToScheduled() (runs: 256, calls: 3840, reverts: 1257) -TimelockControllerInvariants:statefulFuzzExecutedProposalCancellation() (runs: 256, calls: 3840, reverts: 1313) -TimelockControllerInvariants:statefulFuzzExecutingCancelledProposal() (runs: 256, calls: 3840, reverts: 1227) -TimelockControllerInvariants:statefulFuzzExecutingNotReadyProposal() (runs: 256, calls: 3840, reverts: 1231) -TimelockControllerInvariants:statefulFuzzOnceProposalExecution() (runs: 256, calls: 3840, reverts: 1301) -TimelockControllerInvariants:statefulFuzzProposalsExecutedMatchCount() (runs: 256, calls: 3840, reverts: 1257) -TimelockControllerInvariants:statefulFuzzSumOfProposals() (runs: 256, calls: 3840, reverts: 1257) +TimelockControllerInvariants:statefulFuzzExecutedLessThanOrEqualToScheduled() (runs: 256, calls: 3840, reverts: 1237) +TimelockControllerInvariants:statefulFuzzExecutedProposalCancellation() (runs: 256, calls: 3840, reverts: 1220) +TimelockControllerInvariants:statefulFuzzExecutingCancelledProposal() (runs: 256, calls: 3840, reverts: 1225) +TimelockControllerInvariants:statefulFuzzExecutingNotReadyProposal() (runs: 256, calls: 3840, reverts: 1261) +TimelockControllerInvariants:statefulFuzzOnceProposalExecution() (runs: 256, calls: 3840, reverts: 1202) +TimelockControllerInvariants:statefulFuzzProposalsExecutedMatchCount() (runs: 256, calls: 3840, reverts: 1237) +TimelockControllerInvariants:statefulFuzzSumOfProposals() (runs: 256, calls: 3840, reverts: 1237) TimelockControllerTest:testAdminCannotBatchExecute() (gas: 750799) TimelockControllerTest:testAdminCannotBatchSchedule() (gas: 748585) TimelockControllerTest:testAdminCannotCancel() (gas: 13498) TimelockControllerTest:testAdminCannotExecute() (gas: 18575) TimelockControllerTest:testAdminCannotSchedule() (gas: 16247) -TimelockControllerTest:testBatchCancelFinished() (gas: 4641674) -TimelockControllerTest:testBatchEqualAndGreaterMinimumDelay() (gas: 6145320) -TimelockControllerTest:testBatchHasBeenExecuted() (gas: 4639664) -TimelockControllerTest:testBatchHasNotBeenExecuted() (gas: 3078909) +TimelockControllerTest:testBatchCancelFinished() (gas: 4641660) +TimelockControllerTest:testBatchEqualAndGreaterMinimumDelay() (gas: 6145346) +TimelockControllerTest:testBatchHasBeenExecuted() (gas: 4639650) +TimelockControllerTest:testBatchHasNotBeenExecuted() (gas: 3078922) TimelockControllerTest:testBatchInsufficientDelay() (gas: 1532946) TimelockControllerTest:testBatchMinimumDelayUpdate() (gas: 3086625) -TimelockControllerTest:testBatchOperationAlreadyScheduled() (gas: 4593607) -TimelockControllerTest:testBatchOperationIsNotReady() (gas: 4598924) -TimelockControllerTest:testBatchPendingIfExecuted() (gas: 4638278) -TimelockControllerTest:testBatchPendingIfNotYetExecuted() (gas: 3078917) -TimelockControllerTest:testBatchPredecessorInvalid() (gas: 4601277) -TimelockControllerTest:testBatchPredecessorMultipleNotExecuted() (gas: 6141986) -TimelockControllerTest:testBatchPredecessorNotExecuted() (gas: 7663257) -TimelockControllerTest:testBatchPredecessorNotScheduled() (gas: 6117137) -TimelockControllerTest:testBatchReadyAfterTheExecutionTime() (gas: 3079482) -TimelockControllerTest:testBatchReadyBeforeTheExecutionTime() (gas: 3079499) -TimelockControllerTest:testBatchReadyOnTheExecutionTime() (gas: 3079385) -TimelockControllerTest:testBatchScheduleAndExecuteWithEmptySalt() (gas: 4647462) -TimelockControllerTest:testBatchScheduleAndExecuteWithNonEmptySalt() (gas: 4650907) -TimelockControllerTest:testBatchTargetRevert() (gas: 9186634) -TimelockControllerTest:testBatchTimestampHasBeenExecuted() (gas: 4638116) +TimelockControllerTest:testBatchOperationAlreadyScheduled() (gas: 4593620) +TimelockControllerTest:testBatchOperationIsNotReady() (gas: 4598937) +TimelockControllerTest:testBatchPendingIfExecuted() (gas: 4638264) +TimelockControllerTest:testBatchPendingIfNotYetExecuted() (gas: 3078930) +TimelockControllerTest:testBatchPredecessorInvalid() (gas: 4601270) +TimelockControllerTest:testBatchPredecessorMultipleNotExecuted() (gas: 6141972) +TimelockControllerTest:testBatchPredecessorNotExecuted() (gas: 7663243) +TimelockControllerTest:testBatchPredecessorNotScheduled() (gas: 6117130) +TimelockControllerTest:testBatchReadyAfterTheExecutionTime() (gas: 3079475) +TimelockControllerTest:testBatchReadyBeforeTheExecutionTime() (gas: 3079512) +TimelockControllerTest:testBatchReadyOnTheExecutionTime() (gas: 3079378) +TimelockControllerTest:testBatchScheduleAndExecuteWithEmptySalt() (gas: 4647467) +TimelockControllerTest:testBatchScheduleAndExecuteWithNonEmptySalt() (gas: 4650912) +TimelockControllerTest:testBatchTargetRevert() (gas: 9186620) +TimelockControllerTest:testBatchTimestampHasBeenExecuted() (gas: 4638102) TimelockControllerTest:testBatchTimestampHasNotBeenExecuted() (gas: 3078737) TimelockControllerTest:testCanReceiveEther() (gas: 15016) -TimelockControllerTest:testCancellerCanCancelOperation() (gas: 3065216) -TimelockControllerTest:testCompleteOperationWithAssignExecutorRoleToZeroAddress() (gas: 125293) -TimelockControllerTest:testCompletePipelineOperationMinimumDelayUpdate() (gas: 73786) -TimelockControllerTest:testCompletePipelineOperationSetRoleAdmin() (gas: 101117) +TimelockControllerTest:testCancellerCanCancelOperation() (gas: 3065229) +TimelockControllerTest:testCompleteOperationWithAssignExecutorRoleToZeroAddress() (gas: 125279) +TimelockControllerTest:testCompletePipelineOperationMinimumDelayUpdate() (gas: 73772) +TimelockControllerTest:testCompletePipelineOperationSetRoleAdmin() (gas: 101103) TimelockControllerTest:testExecutorCanBatchExecute() (gas: 3049703) TimelockControllerTest:testExecutorCanExecute() (gas: 30278) TimelockControllerTest:testExecutorCannotBatchSchedule() (gas: 1485827) TimelockControllerTest:testExecutorCannotCancel() (gas: 15717) TimelockControllerTest:testExecutorCannotSchedule() (gas: 19429) -TimelockControllerTest:testFuzzBatchValue(uint256) (runs: 256, μ: 4653515, ~: 4653635) +TimelockControllerTest:testFuzzBatchValue(uint256) (runs: 256, μ: 4653503, ~: 4653621) TimelockControllerTest:testFuzzHashOperation(address,uint256,bytes,bytes32,bytes32) (runs: 256, μ: 11069, ~: 10967) TimelockControllerTest:testFuzzHashOperationBatch(address[],uint256[],bytes[],bytes32,bytes32) (runs: 256, μ: 1907207, ~: 1934989) -TimelockControllerTest:testFuzzOperationValue(uint256) (runs: 256, μ: 113874, ~: 113994) -TimelockControllerTest:testHandleERC1155() (gas: 41708503) -TimelockControllerTest:testHandleERC721() (gas: 7242433) +TimelockControllerTest:testFuzzOperationValue(uint256) (runs: 256, μ: 113862, ~: 113980) +TimelockControllerTest:testHandleERC1155() (gas: 41708452) +TimelockControllerTest:testHandleERC721() (gas: 7246027) TimelockControllerTest:testHashOperation() (gas: 13089) TimelockControllerTest:testHashOperationBatch() (gas: 1526310) -TimelockControllerTest:testInitialSetup() (gas: 4451330) +TimelockControllerTest:testInitialSetup() (gas: 4451730) TimelockControllerTest:testInvalidOperation() (gas: 10719) -TimelockControllerTest:testOperationAlreadyScheduled() (gas: 52512) -TimelockControllerTest:testOperationCancelFinished() (gas: 102118) -TimelockControllerTest:testOperationEqualAndGreaterMinimumDelay() (gas: 90718) -TimelockControllerTest:testOperationHasBeenExecuted() (gas: 100141) -TimelockControllerTest:testOperationHasNotBeenExecuted() (gas: 52710) +TimelockControllerTest:testOperationAlreadyScheduled() (gas: 52525) +TimelockControllerTest:testOperationCancelFinished() (gas: 102104) +TimelockControllerTest:testOperationEqualAndGreaterMinimumDelay() (gas: 90744) +TimelockControllerTest:testOperationHasBeenExecuted() (gas: 100127) +TimelockControllerTest:testOperationHasNotBeenExecuted() (gas: 52723) TimelockControllerTest:testOperationInsufficientDelay() (gas: 19660) TimelockControllerTest:testOperationMinimumDelayUpdate() (gas: 61766) -TimelockControllerTest:testOperationOperationIsNotReady() (gas: 57867) -TimelockControllerTest:testOperationPendingIfExecuted() (gas: 98711) -TimelockControllerTest:testOperationPendingIfNotYetExecuted() (gas: 52774) -TimelockControllerTest:testOperationPredecessorInvalid() (gas: 63047) -TimelockControllerTest:testOperationPredecessorMultipleNotExecuted() (gas: 92707) -TimelockControllerTest:testOperationPredecessorNotExecuted() (gas: 99468) -TimelockControllerTest:testOperationPredecessorNotScheduled() (gas: 66926) -TimelockControllerTest:testOperationReadyAfterTheExecutionTime() (gas: 53329) -TimelockControllerTest:testOperationReadyBeforeTheExecutionTime() (gas: 53272) -TimelockControllerTest:testOperationReadyOnTheExecutionTime() (gas: 53166) -TimelockControllerTest:testOperationTargetRevert() (gas: 110349) -TimelockControllerTest:testOperationTimestampHasBeenExecuted() (gas: 98485) +TimelockControllerTest:testOperationOperationIsNotReady() (gas: 57880) +TimelockControllerTest:testOperationPendingIfExecuted() (gas: 98697) +TimelockControllerTest:testOperationPendingIfNotYetExecuted() (gas: 52787) +TimelockControllerTest:testOperationPredecessorInvalid() (gas: 63040) +TimelockControllerTest:testOperationPredecessorMultipleNotExecuted() (gas: 92693) +TimelockControllerTest:testOperationPredecessorNotExecuted() (gas: 99454) +TimelockControllerTest:testOperationPredecessorNotScheduled() (gas: 66919) +TimelockControllerTest:testOperationReadyAfterTheExecutionTime() (gas: 53322) +TimelockControllerTest:testOperationReadyBeforeTheExecutionTime() (gas: 53285) +TimelockControllerTest:testOperationReadyOnTheExecutionTime() (gas: 53159) +TimelockControllerTest:testOperationTargetRevert() (gas: 110335) +TimelockControllerTest:testOperationTimestampHasBeenExecuted() (gas: 98471) TimelockControllerTest:testOperationTimestampHasNotBeenExecuted() (gas: 52561) TimelockControllerTest:testProposerCanBatchSchedule() (gas: 3088695) TimelockControllerTest:testProposerCanCancel() (gas: 20647) @@ -740,8 +740,8 @@ TimelockControllerTest:testProposerCannotBatchExecute() (gas: 1490238) TimelockControllerTest:testProposerCannotExecute() (gas: 23955) TimelockControllerTest:testReturnsLaterMinimumDelayForCalls() (gas: 20803) TimelockControllerTest:testRevertWhenNotTimelock() (gas: 9272) -TimelockControllerTest:testScheduleAndExecuteWithEmptySalt() (gas: 107948) -TimelockControllerTest:testScheduleAndExecuteWithNonEmptySalt() (gas: 111305) +TimelockControllerTest:testScheduleAndExecuteWithEmptySalt() (gas: 107953) +TimelockControllerTest:testScheduleAndExecuteWithNonEmptySalt() (gas: 111310) TimelockControllerTest:testStrangerCannotBatchExecute() (gas: 748818) TimelockControllerTest:testStrangerCannotBatchSchedule() (gas: 746625) TimelockControllerTest:testStrangerCannotCancel() (gas: 11494) diff --git a/CHANGELOG.md b/CHANGELOG.md index e9afff72..41245f76 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ - [`TimelockController`](https://github.com/pcaversaccio/snekmate/blob/v0.1.0/src/snekmate/governance/TimelockController.vy): Make `TimelockController` module-friendly. ([#220](https://github.com/pcaversaccio/snekmate/pull/220)) - **Tokens** - [`ERC20`](https://github.com/pcaversaccio/snekmate/blob/v0.1.0/src/snekmate/tokens/ERC20.vy): Make `ERC20` module-friendly. ([#234](https://github.com/pcaversaccio/snekmate/pull/234)) + - [`ERC721`](https://github.com/pcaversaccio/snekmate/blob/v0.1.0/src/snekmate/tokens/ERC721.vy): Make `ERC721` module-friendly. ([#237](https://github.com/pcaversaccio/snekmate/pull/237)) - **Utility Functions** - [`Base64`](https://github.com/pcaversaccio/snekmate/blob/v0.1.0/src/snekmate/utils/Base64.vy): Make `Base64` module-friendly. ([#222](https://github.com/pcaversaccio/snekmate/pull/222)) - [`BatchDistributor`](https://github.com/pcaversaccio/snekmate/blob/v0.1.0/src/snekmate/utils/BatchDistributor.vy): Make `BatchDistributor` module-friendly. ([#223](https://github.com/pcaversaccio/snekmate/pull/223)) diff --git a/README.md b/README.md index 4ca1624a..715ce137 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,8 @@ src │ │ ├── IERC1155Receiver — "EIP-1155 Token Receiver Interface Definition" │ │ └── IERC4906 — "EIP-4906 Interface Definition" │ └── mocks - │ └── ERC20Mock — "ERC20 Module Reference Implementation" + │ ├── ERC20Mock — "ERC20 Module Reference Implementation" + │ └── ERC721Mock — "ERC721 Module Reference Implementation" └── utils ├── Base64 — "Base64 Encoding and Decoding Functions" ├── BatchDistributor — "Batch Sending Both Native and ERC-20 Tokens" diff --git a/src/snekmate/extensions/mocks/ERC2981Mock.vy b/src/snekmate/extensions/mocks/ERC2981Mock.vy index 50f1eb3a..372472a0 100644 --- a/src/snekmate/extensions/mocks/ERC2981Mock.vy +++ b/src/snekmate/extensions/mocks/ERC2981Mock.vy @@ -49,7 +49,7 @@ exports: ( # @external # @view # def supportsInterface(interface_id: bytes4) -> bool: - # return (interface_id in erc2981._SUPPORTED_INTERFACES) or (interface_id in [0x..., ...]) + # return ((interface_id in erc2981._SUPPORTED_INTERFACES) or (interface_id in [0x..., ...])) # ``` erc2981.supportsInterface, erc2981.owner, diff --git a/src/snekmate/governance/TimelockController.vy b/src/snekmate/governance/TimelockController.vy index 65df0c86..8ba5577c 100644 --- a/src/snekmate/governance/TimelockController.vy +++ b/src/snekmate/governance/TimelockController.vy @@ -443,7 +443,7 @@ def schedule_batch(targets: DynArray[address, _DYNARRAY_BOUND], amounts: DynArra Must be greater than or equal to the minimum delay. """ access_control._check_role(PROPOSER_ROLE, msg.sender) - assert len(targets) == len(amounts) and len(targets) == len(payloads), "TimelockController: length mismatch" + assert ((len(targets) == len(amounts)) and (len(targets) == len(payloads))), "TimelockController: length mismatch" id: bytes32 = self._hash_operation_batch(targets, amounts, payloads, predecessor, salt) self._schedule(id, delay) @@ -522,7 +522,7 @@ def execute_batch(targets: DynArray[address, _DYNARRAY_BOUND], amounts: DynArray the operation during reentrancy are caught. """ self._only_role_or_open_role(EXECUTOR_ROLE) - assert len(targets) == len(amounts) and len(targets) == len(payloads), "TimelockController: length mismatch" + assert ((len(targets) == len(amounts)) and (len(targets) == len(payloads))), "TimelockController: length mismatch" id: bytes32 = self._hash_operation_batch(targets, amounts, payloads, predecessor, salt) self._before_call(id, predecessor) @@ -655,7 +655,7 @@ def _is_operation_pending(id: bytes32) -> bool: is pending or not. """ state: OperationState = self._get_operation_state(id) - return state == OperationState.WAITING or state == OperationState.READY + return ((state == OperationState.WAITING) or (state == OperationState.READY)) @internal @@ -700,8 +700,8 @@ def _get_operation_state(id: bytes32) -> OperationState: return OperationState.DONE elif (timestamp > block.timestamp): return OperationState.WAITING - else: - return OperationState.READY + + return OperationState.READY @internal @@ -777,8 +777,8 @@ def _execute(target: address, amount: uint256, payload: Bytes[1_024]): if (len(return_data) != empty(uint256)): # Bubble up the revert reason. raw_revert(return_data) - else: - raise "TimelockController: underlying transaction reverted" + + raise "TimelockController: underlying transaction reverted" @internal @@ -792,7 +792,7 @@ def _before_call(id: bytes32, predecessor: bytes32): operation. """ assert self._is_operation_ready(id), "TimelockController: operation is not ready" - assert predecessor == empty(bytes32) or self._is_operation_done(predecessor), "TimelockController: missing dependency" + assert ((predecessor == empty(bytes32)) or (self._is_operation_done(predecessor))), "TimelockController: missing dependency" @internal diff --git a/src/snekmate/tokens/ERC1155.vy b/src/snekmate/tokens/ERC1155.vy index 7f910d91..507e217a 100644 --- a/src/snekmate/tokens/ERC1155.vy +++ b/src/snekmate/tokens/ERC1155.vy @@ -224,7 +224,7 @@ def safeTransferFrom(owner: address, to: address, id: uint256, amount: uint256, @param data The maximum 1,024-byte additional data with no specified format. """ - assert owner == msg.sender or self.isApprovedForAll[owner][msg.sender], "ERC1155: caller is not token owner or approved" + assert ((owner == msg.sender) or (self.isApprovedForAll[owner][msg.sender])), "ERC1155: caller is not token owner or approved" self._safe_transfer_from(owner, to, id, amount, data) @@ -256,7 +256,7 @@ def safeBatchTransferFrom(owner: address, to: address, ids: DynArray[uint256, _B @param data The maximum 1,024-byte additional data with no specified format. """ - assert owner == msg.sender or self.isApprovedForAll[owner][msg.sender], "ERC1155: caller is not token owner or approved" + assert ((owner == msg.sender) or (self.isApprovedForAll[owner][msg.sender])), "ERC1155: caller is not token owner or approved" self._safe_batch_transfer_from(owner, to, ids, amounts, data) @@ -376,7 +376,7 @@ def burn(owner: address, id: uint256, amount: uint256): @param id The 32-byte identifier of the token. @param amount The 32-byte token amount to be destroyed. """ - assert owner == msg.sender or self.isApprovedForAll[owner][msg.sender], "ERC1155: caller is not token owner or approved" + assert ((owner == msg.sender) or (self.isApprovedForAll[owner][msg.sender])), "ERC1155: caller is not token owner or approved" self._burn(owner, id, amount) @@ -394,7 +394,7 @@ def burn_batch(owner: address, ids: DynArray[uint256, _BATCH_SIZE], amounts: Dyn being destroyed. Note that the order and length must match the 32-byte `ids` array. """ - assert owner == msg.sender or self.isApprovedForAll[owner][msg.sender], "ERC1155: caller is not token owner or approved" + assert ((owner == msg.sender) or (self.isApprovedForAll[owner][msg.sender])), "ERC1155: caller is not token owner or approved" self._burn_batch(owner, ids, amounts) @@ -768,8 +768,8 @@ def _uri(id: uint256) -> String[512]: # concatenation and simply return `_BASE_URI` # for easier off-chain handling. return concat(_BASE_URI, uint2str(id)) - else: - return "" + + return "" @internal @@ -872,9 +872,9 @@ def _check_on_erc1155_received(owner: address, to: address, id: uint256, amount: assert return_value == method_id("onERC1155Received(address,address,uint256,uint256,bytes)", output_type=bytes4),\ "ERC1155: transfer to non-ERC1155Receiver implementer" return True + # EOA case. - else: - return True + return True @internal @@ -901,9 +901,9 @@ def _check_on_erc1155_batch_received(owner: address, to: address, ids: DynArray[ assert return_value == method_id("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)", output_type=bytes4),\ "ERC1155: transfer to non-ERC1155Receiver implementer" return True + # EOA case. - else: - return True + return True @internal diff --git a/src/snekmate/tokens/ERC721.vy b/src/snekmate/tokens/ERC721.vy index 19ca6fdc..f1f22733 100644 --- a/src/snekmate/tokens/ERC721.vy +++ b/src/snekmate/tokens/ERC721.vy @@ -96,6 +96,43 @@ implements: IERC5267 import interfaces.IERC721Receiver as IERC721Receiver +# @dev We import and use the `Ownable` module. +from ..auth import Ownable as ownable +uses: ownable + + +# @dev We import the `ECDSA` module. +# @notice Please note that the `ECDSA` module +# is stateless and therefore does not require +# the `uses` keyword for usage. +from ..utils import ECDSA as ecdsa + + +# @dev We import and use the `EIP712DomainSeparator` module. +from ..utils import EIP712DomainSeparator as eip712_domain_separator +initializes: eip712_domain_separator + + +# @dev We export (i.e. the runtime bytecode exposes these +# functions externally, allowing them to be called using +# the ABI encoding specification) the `external` getter +# function `owner` from the `Ownable` module as well as the +# function `eip712Domain` from the `EIP712DomainSeparator` +# module. +# @notice Please note that you must always also export (if +# required by the contract logic) `public` declared `constant`, +# `immutable`, and state variables, for which Vyper automatically +# generates an `external` getter function for the variable. +exports: ( + # @notice This ERC-721 implementation includes the `transfer_ownership` + # and `renounce_ownership` functions, which incorporate + # the additional built-in `is_minter` role logic and are + # therefore not exported from the `Ownable` module. + ownable.owner, + eip712_domain_separator.eip712Domain, +) + + # @dev Stores the ERC-165 interface identifier for each # imported interface. The ERC-165 interface identifier # is defined as the XOR of all function selectors in the @@ -110,14 +147,6 @@ _SUPPORTED_INTERFACES: constant(bytes4[6]) = [ ] -# @dev Constant used as part of the ECDSA recovery function. -_MALLEABILITY_THRESHOLD: constant(bytes32) = 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 - - -# @dev The 32-byte type hash for the EIP-712 domain separator. -_TYPE_HASH: constant(bytes32) = keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)") - - # @dev The 32-byte type hash of the `permit` function. _PERMIT_TYPE_HASH: constant(bytes32) = keccak256("Permit(address spender,uint256 tokenId,uint256 nonce,uint256 deadline)") @@ -143,36 +172,10 @@ symbol: public(immutable(String[5])) _BASE_URI: immutable(String[80]) -# @dev Caches the domain separator as an `immutable` -# value, but also stores the corresponding chain ID -# to invalidate the cached domain separator if the -# chain ID changes. -_CACHED_DOMAIN_SEPARATOR: immutable(bytes32) -_CACHED_CHAIN_ID: immutable(uint256) - - -# @dev Caches `self` to `immutable` storage to avoid -# potential issues if a vanilla contract is used in -# a `delegatecall` context. -_CACHED_SELF: immutable(address) - - -# @dev `immutable` variables to store the (hashed) -# name and (hashed) version during contract creation. -_NAME: immutable(String[50]) -_HASHED_NAME: immutable(bytes32) -_VERSION: immutable(String[20]) -_HASHED_VERSION: immutable(bytes32) - - # @dev Mapping from owner to operator approvals. isApprovedForAll: public(HashMap[address, HashMap[address, bool]]) -# @dev Returns the address of the current owner. -owner: public(address) - - # @dev Returns `True` if an `address` has been # granted the minter role. is_minter: public(HashMap[address, bool]) @@ -268,19 +271,6 @@ event BatchMetadataUpdate: token_id: uint256 -# @dev May be emitted to signal that the domain could -# have changed. -event EIP712DomainChanged: - pass - - -# @dev Emitted when the ownership is transferred -# from `previous_owner` to `new_owner`. -event OwnershipTransferred: - previous_owner: indexed(address) - new_owner: indexed(address) - - # @dev Emitted when the status of a `minter` # address is changed. event RoleMinterChanged: @@ -295,8 +285,10 @@ def __init__(name_: String[25], symbol_: String[5], base_uri_: String[80], name_ @dev To omit the opcodes for checking the `msg.value` in the creation-time EVM bytecode, the constructor is declared as `payable`. - @notice The `owner` role will be assigned to - the `msg.sender`. + @notice At initialisation time, the `owner` role will be + assigned to the `msg.sender` since we `uses` the + `Ownable` module, which implements the aforementioned + logic at contract creation time. @param name_ The maximum 25-character user-readable string name of the token collection. @param symbol_ The maximum 5-character user-readable string @@ -316,17 +308,11 @@ def __init__(name_: String[25], symbol_: String[5], base_uri_: String[80], name_ symbol = symbol_ _BASE_URI = base_uri_ - self._transfer_ownership(msg.sender) + ownable._transfer_ownership(msg.sender) self.is_minter[msg.sender] = True log RoleMinterChanged(msg.sender, True) - _NAME = name_eip712_ - _VERSION = version_eip712_ - _HASHED_NAME = keccak256(name_eip712_) - _HASHED_VERSION = keccak256(version_eip712_) - _CACHED_DOMAIN_SEPARATOR = self._build_domain_separator() - _CACHED_CHAIN_ID = chain.id - _CACHED_SELF = self + eip712_domain_separator.__init__(name_eip712_, version_eip712_) @external @@ -391,7 +377,7 @@ def approve(to: address, token_id: uint256): """ owner: address = self._owner_of(token_id) assert to != owner, "ERC721: approval to current owner" - assert msg.sender == owner or self.isApprovedForAll[owner][msg.sender], "ERC721: approve caller is not token owner or approved for all" + assert ((msg.sender == owner) or (self.isApprovedForAll[owner][msg.sender])), "ERC721: approve caller is not token owner or approved for all" self._approve(to, token_id) @@ -527,8 +513,8 @@ def tokenURI(token_id: uint256) -> String[512]: # concatenate the base URI and token ID. if (base_uri_length != empty(uint256)): return concat(_BASE_URI, uint2str(token_id)) - else: - return "" + + return "" @external @@ -627,7 +613,7 @@ def set_minter(minter: address, status: bool): @param minter The 20-byte minter address. @param status The Boolean variable that sets the status. """ - self._check_owner() + ownable._check_owner() assert minter != empty(address), "AccessControl: minter is the zero address" # We ensured in the previous step `self._check_owner()` # that `msg.sender` is the `owner`. @@ -663,9 +649,9 @@ def permit(spender: address, token_id: uint256, deadline: uint256, v: uint8, r: self.nonces[token_id] = unsafe_add(current_nonce, 1) struct_hash: bytes32 = keccak256(_abi_encode(_PERMIT_TYPE_HASH, spender, token_id, current_nonce, deadline)) - hash: bytes32 = self._hash_typed_data_v4(struct_hash) + hash: bytes32 = eip712_domain_separator._hash_typed_data_v4(struct_hash) - signer: address = self._recover_vrs(hash, convert(v, uint256), convert(r, uint256), convert(s, uint256)) + signer: address = ecdsa._recover_vrs(hash, convert(v, uint256), convert(r, uint256), convert(s, uint256)) assert signer == owner, "ERC721Permit: invalid signature" self._approve(spender, token_id) @@ -678,33 +664,7 @@ def DOMAIN_SEPARATOR() -> bytes32: @dev Returns the domain separator for the current chain. @return bytes32 The 32-byte domain separator. """ - return self._domain_separator_v4() - - -@external -@view -def eip712Domain() -> (bytes1, String[50], String[20], uint256, address, bytes32, DynArray[uint256, 128]): - """ - @dev Returns the fields and values that describe the domain - separator used by this contract for EIP-712 signatures. - @notice The bits in the 1-byte bit map are read from the least - significant to the most significant, and fields are indexed - in the order that is specified by EIP-712, identical to the - order in which they are listed in the function type. - @return bytes1 The 1-byte bit map where bit `i` is set to 1 - if and only if domain field `i` is present (`0 ≤ i ≤ 4`). - @return String The maximum 50-character user-readable string name - of the signing domain, i.e. the name of the dApp or protocol. - @return String The maximum 20-character current main version of - the signing domain. Signatures from different versions are - not compatible. - @return uint256 The 32-byte EIP-155 chain ID. - @return address The 20-byte address of the verifying contract. - @return bytes32 The 32-byte disambiguation salt for the protocol. - @return DynArray The 32-byte array of EIP-712 extensions. - """ - # Note that `\x0f` equals `01111`. - return (convert(b"\x0f", bytes1), _NAME, _VERSION, chain.id, self, empty(bytes32), empty(DynArray[uint256, 128])) + return eip712_domain_separator._domain_separator_v4() @external @@ -721,13 +681,13 @@ def transfer_ownership(new_owner: address): the minter role to `new_owner` accordingly. @param new_owner The 20-byte address of the new owner. """ - self._check_owner() + ownable._check_owner() assert new_owner != empty(address), "Ownable: new owner is the zero address" self.is_minter[msg.sender] = False log RoleMinterChanged(msg.sender, False) - self._transfer_ownership(new_owner) + ownable._transfer_ownership(new_owner) self.is_minter[new_owner] = True log RoleMinterChanged(new_owner, True) @@ -749,10 +709,10 @@ def renounce_ownership(): minter addresses first via `set_minter` before calling `renounce_ownership`. """ - self._check_owner() + ownable._check_owner() self.is_minter[msg.sender] = False log RoleMinterChanged(msg.sender, False) - self._transfer_ownership(empty(address)) + ownable._transfer_ownership(empty(address)) @internal @@ -860,7 +820,7 @@ def _is_approved_or_owner(spender: address, token_id: uint256) -> bool: @param token_id The 32-byte identifier of the token. """ owner: address = self._owner_of(token_id) - return (spender == owner or self.isApprovedForAll[owner][spender] or self._get_approved(token_id) == spender) + return ((spender == owner) or (self.isApprovedForAll[owner][spender]) or (self._get_approved(token_id) == spender)) @internal @@ -972,12 +932,12 @@ def _transfer(owner: address, to: address, token_id: uint256): """ assert self._owner_of(token_id) == owner, "ERC721: transfer from incorrect owner" assert to != empty(address), "ERC721: transfer to the zero address" - + self._before_token_transfer(owner, to, token_id) # Checks that the `token_id` was not transferred by the # `_before_token_transfer` hook. assert self._owner_of(token_id) == owner, "ERC721: transfer from incorrect owner" - + self._token_approvals[token_id] = empty(address) # See comment why an overflow is not possible in the # following two lines above at `_mint`. @@ -1067,9 +1027,9 @@ def _check_on_erc721_received(owner: address, to: address, token_id: uint256, da return_value: bytes4 = extcall IERC721Receiver(to).onERC721Received(msg.sender, owner, token_id, data) assert return_value == method_id("onERC721Received(address,address,uint256,bytes)", output_type=bytes4), "ERC721: transfer to non-ERC721Receiver implementer" return True + # EOA case. - else: - return True + return True @internal @@ -1173,7 +1133,7 @@ def _remove_token_from_owner_enumeration(owner: address, token_id:uint256): self._owned_tokens[owner][token_index] = last_token_id # Updates the moved token's index. self._owned_tokens_index[last_token_id] = token_index - + # This also deletes the contents at the # last position of the array. self._owned_tokens_index[token_id] = empty(uint256) @@ -1195,7 +1155,7 @@ def _remove_token_from_all_tokens_enumeration(token_id: uint256): # the last slot. last_token_index: uint256 = len(self._all_tokens) - 1 token_index: uint256 = self._all_tokens_index[token_id] - + # When the token to delete is the last token, # the swap operation is unnecessary. However, # since this occurs so rarely (when the last @@ -1213,99 +1173,3 @@ def _remove_token_from_all_tokens_enumeration(token_id: uint256): # last position of the array. self._all_tokens_index[token_id] = empty(uint256) self._all_tokens.pop() - - -@internal -def _check_owner(): - """ - @dev Sourced from {Ownable-_check_owner}. - @notice See {Ownable-_check_owner} for - the function docstring. - """ - assert msg.sender == self.owner, "Ownable: caller is not the owner" - - -@internal -def _transfer_ownership(new_owner: address): - """ - @dev Sourced from {Ownable-_transfer_ownership}. - @notice See {Ownable-_transfer_ownership} for - the function docstring. - """ - old_owner: address = self.owner - self.owner = new_owner - log OwnershipTransferred(old_owner, new_owner) - - -@internal -@view -def _domain_separator_v4() -> bytes32: - """ - @dev Sourced from {EIP712DomainSeparator-domain_separator_v4}. - @notice See {EIP712DomainSeparator-domain_separator_v4} - for the function docstring. - """ - if (self == _CACHED_SELF and chain.id == _CACHED_CHAIN_ID): - return _CACHED_DOMAIN_SEPARATOR - else: - return self._build_domain_separator() - - -@internal -@view -def _build_domain_separator() -> bytes32: - """ - @dev Sourced from {EIP712DomainSeparator-_build_domain_separator}. - @notice See {EIP712DomainSeparator-_build_domain_separator} - for the function docstring. - """ - return keccak256(_abi_encode(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION, chain.id, self)) - - -@internal -@view -def _hash_typed_data_v4(struct_hash: bytes32) -> bytes32: - """ - @dev Sourced from {EIP712DomainSeparator-hash_typed_data_v4}. - @notice See {EIP712DomainSeparator-hash_typed_data_v4} - for the function docstring. - """ - return self._to_typed_data_hash(self._domain_separator_v4(), struct_hash) - - -@internal -@pure -def _to_typed_data_hash(domain_separator: bytes32, struct_hash: bytes32) -> bytes32: - """ - @dev Sourced from {ECDSA-to_typed_data_hash}. - @notice See {ECDSA-to_typed_data_hash} for the - function docstring. - """ - return keccak256(concat(b"\x19\x01", domain_separator, struct_hash)) - - -@internal -@pure -def _recover_vrs(hash: bytes32, v: uint256, r: uint256, s: uint256) -> address: - """ - @dev Sourced from {ECDSA-_recover_vrs}. - @notice See {ECDSA-_recover_vrs} for the - function docstring. - """ - return self._try_recover_vrs(hash, v, r, s) - - -@internal -@pure -def _try_recover_vrs(hash: bytes32, v: uint256, r: uint256, s: uint256) -> address: - """ - @dev Sourced from {ECDSA-_try_recover_vrs}. - @notice See {ECDSA-_try_recover_vrs} for the - function docstring. - """ - assert s <= convert(_MALLEABILITY_THRESHOLD, uint256), "ECDSA: invalid signature `s` value" - - signer: address = ecrecover(hash, v, r, s) - assert signer != empty(address), "ECDSA: invalid signature" - - return signer diff --git a/src/snekmate/tokens/mocks/ERC721Mock.vy b/src/snekmate/tokens/mocks/ERC721Mock.vy new file mode 100644 index 00000000..eeb1c27c --- /dev/null +++ b/src/snekmate/tokens/mocks/ERC721Mock.vy @@ -0,0 +1,108 @@ +# pragma version ~=0.4.0rc2 +""" +@title ERC721 Module Reference Implementation +@custom:contract-name ERC721Mock +@license GNU Affero General Public License v3.0 only +@author pcaversaccio +""" + + +# @dev We import and implement the `IERC165` interface, +# which is a built-in interface of the Vyper compiler. +from ethereum.ercs import IERC165 +implements: IERC165 + + +# @dev We import and implement the `IERC721` interface, +# which is a built-in interface of the Vyper compiler. +from ethereum.ercs import IERC721 +implements: IERC721 + + +# @dev We import and implement the `IERC721Metadata` +# interface, which is written using standard Vyper +# syntax. +from ..interfaces import IERC721Metadata +implements: IERC721Metadata + + +# @dev We import and implement the `IERC721Enumerable` +# interface, which is written using standard Vyper +# syntax. +from ..interfaces import IERC721Enumerable +implements: IERC721Enumerable + + +# @dev We import and implement the `IERC721Permit` +# interface, which is written using standard Vyper +# syntax. +from ..interfaces import IERC721Permit +implements: IERC721Permit + + +# @dev We import and implement the `IERC4906` interface, +# which is written using standard Vyper syntax. +from ..interfaces import IERC4906 +implements: IERC4906 + + +# @dev We import and implement the `IERC5267` interface, +# which is written using standard Vyper syntax. +from ...utils.interfaces import IERC5267 +implements: IERC5267 + + +# @dev We import and initialise the `Ownable` module. +from ...auth import Ownable as ow +initializes: ow + + +# @dev We import and initialise the `ERC721` module. +from .. import ERC721 as erc721 +initializes: erc721[ownable := ow] + + +# @dev We export (i.e. the runtime bytecode exposes these +# functions externally, allowing them to be called using +# the ABI encoding specification) all `external` functions +# from the `ERC20` module. The built-in dunder method +# `__interface__` allows you to export all functions of a +# module without specifying the individual functions (see +# https://github.com/vyperlang/vyper/pull/3919). Please take +# note that if you do not know the full interface of a module +# contract, you can get the `.vyi` interface in Vyper by using +# `vyper -f interface yourFileName.vy` or the external interface +# by using `vyper -f external_interface yourFileName.vy`. +# @notice Please note that you must always also export (if +# required by the contract logic) `public` declared `constant`, +# `immutable`, and state variables, for which Vyper automatically +# generates an `external` getter function for the variable. +exports: erc721.__interface__ + + +@deploy +@payable +def __init__(name_: String[25], symbol_: String[5], base_uri_: String[80], name_eip712_: String[50], version_eip712_: String[20]): + """ + @dev To omit the opcodes for checking the `msg.value` + in the creation-time EVM bytecode, the constructor + is declared as `payable`. + @notice The `owner` role will be assigned to + the `msg.sender`. + @param name_ The maximum 25-character user-readable string + name of the token collection. + @param symbol_ The maximum 5-character user-readable string + symbol of the token collection. + @param base_uri_ The maximum 80-character user-readable + string base URI for computing `tokenURI`. + @param name_eip712_ The maximum 50-character user-readable + string name of the signing domain, i.e. the name + of the dApp or protocol. + @param version_eip712_ The maximum 20-character current + main version of the signing domain. Signatures + from different versions are not compatible. + """ + # The following line assigns the `owner` + # to the `msg.sender`. + ow.__init__() + erc721.__init__(name_, symbol_, base_uri_, name_eip712_, version_eip712_) diff --git a/src/snekmate/utils/CreateAddress.vy b/src/snekmate/utils/CreateAddress.vy index db55fa2f..bee14f15 100644 --- a/src/snekmate/utils/CreateAddress.vy +++ b/src/snekmate/utils/CreateAddress.vy @@ -93,8 +93,8 @@ def _compute_address_rlp(deployer: address, nonce: uint256) -> address: return self._convert_keccak256_2_address(keccak256(concat(0xdc, length, convert(deployer, bytes20), 0x86, convert(convert(nonce, uint48), bytes6)))) elif (nonce <= convert(max_value(uint56), uint256)): return self._convert_keccak256_2_address(keccak256(concat(0xdd, length, convert(deployer, bytes20), 0x87, convert(convert(nonce, uint56), bytes7)))) - else: - return self._convert_keccak256_2_address(keccak256(concat(0xde, length, convert(deployer, bytes20), 0x88, convert(convert(nonce, uint64), bytes8)))) + + return self._convert_keccak256_2_address(keccak256(concat(0xde, length, convert(deployer, bytes20), 0x88, convert(convert(nonce, uint64), bytes8)))) @internal diff --git a/src/snekmate/utils/ECDSA.vy b/src/snekmate/utils/ECDSA.vy index b7ef3e5f..b99aab3c 100644 --- a/src/snekmate/utils/ECDSA.vy +++ b/src/snekmate/utils/ECDSA.vy @@ -66,8 +66,8 @@ def _recover_sig(hash: bytes32, signature: Bytes[65]) -> address: r: uint256 = extract32(signature, empty(uint256), output_type=uint256) vs: uint256 = extract32(signature, 32, output_type=uint256) return self._try_recover_r_vs(hash, r, vs) - else: - return empty(address) + + return empty(address) @internal diff --git a/src/snekmate/utils/EIP712DomainSeparator.vy b/src/snekmate/utils/EIP712DomainSeparator.vy index 67fd7b97..c3cf2af3 100644 --- a/src/snekmate/utils/EIP712DomainSeparator.vy +++ b/src/snekmate/utils/EIP712DomainSeparator.vy @@ -121,7 +121,7 @@ def _domain_separator_v4() -> bytes32: @dev Returns the domain separator for the current chain. @return bytes32 The 32-byte domain separator. """ - if (self == _CACHED_SELF and chain.id == _CACHED_CHAIN_ID): + if ((self == _CACHED_SELF) and (chain.id == _CACHED_CHAIN_ID)): return _CACHED_DOMAIN_SEPARATOR return self._build_domain_separator() diff --git a/src/snekmate/utils/Math.vy b/src/snekmate/utils/Math.vy index 5d1a4a7b..61d7b443 100644 --- a/src/snekmate/utils/Math.vy +++ b/src/snekmate/utils/Math.vy @@ -143,7 +143,7 @@ def _mul_div(x: uint256, y: uint256, denominator: uint256, roundup: bool) -> uin # Handling of non-overflow cases, 256 by 256 division. if (prod1 == empty(uint256)): - if (roundup and uint256_mulmod(x, y, denominator) != empty(uint256)): + if ((roundup) and (uint256_mulmod(x, y, denominator) != empty(uint256))): # Calculate "ceil((x * y) / denominator)". The following # line cannot overflow because we have the previous check # "(x * y) % denominator != 0", which accordingly rules out @@ -213,7 +213,7 @@ def _mul_div(x: uint256, y: uint256, denominator: uint256, roundup: bool) -> uin # `prod1` is no longer necessary. result: uint256 = unsafe_mul(prod0, inverse) - if (roundup and uint256_mulmod(x, y, denominator) != empty(uint256)): + if ((roundup) and (uint256_mulmod(x, y, denominator) != empty(uint256))): # Calculate "ceil((x * y) / denominator)". The following # line uses intentionally checked arithmetic to prevent # a theoretically possible overflow. @@ -270,7 +270,7 @@ def _log_2(x: uint256, roundup: bool) -> uint256: if (value >> 1 != empty(uint256)): result = unsafe_add(result, 1) - if (roundup and ((1 << result) < x)): + if ((roundup) and ((1 << result) < x)): result = unsafe_add(result, 1) return result @@ -321,7 +321,7 @@ def _log_10(x: uint256, roundup: bool) -> uint256: if (value >= 10): result = unsafe_add(result, 1) - if (roundup and (10 ** result < x)): + if ((roundup) and (10 ** result < x)): result = unsafe_add(result, 1) return result @@ -368,7 +368,7 @@ def _log_256(x: uint256, roundup: bool) -> uint256: if (value >> 8 != empty(uint256)): result = unsafe_add(result, 1) - if (roundup and ((1 << (result << 3)) < x)): + if ((roundup) and ((1 << (result << 3)) < x)): result = unsafe_add(result, 1) return result @@ -536,7 +536,7 @@ def _cbrt(x: uint256, roundup: bool) -> uint256: y: uint256 = unsafe_div(self._wad_cbrt(x), 10 ** 12) - if (roundup and (unsafe_mul(unsafe_mul(y, y), y) != x)): + if ((roundup) and (unsafe_mul(unsafe_mul(y, y), y) != x)): y = unsafe_add(y, 1) return y @@ -605,5 +605,5 @@ def _wad_cbrt(x: uint256) -> uint256: return unsafe_mul(y, 10 ** 12) elif (x >= unsafe_div(max_value(uint256), 10 ** 36)): return unsafe_mul(y, 10 ** 6) - else: - return y + + return y diff --git a/src/snekmate/utils/MerkleProofVerification.vy b/src/snekmate/utils/MerkleProofVerification.vy index 345bb80f..fe08cb5d 100644 --- a/src/snekmate/utils/MerkleProofVerification.vy +++ b/src/snekmate/utils/MerkleProofVerification.vy @@ -193,8 +193,8 @@ def _process_multi_proof(proof: DynArray[bytes32, max_value(uint8)], proof_flags return hashes[unsafe_sub(total_hashes, 1)] elif (leaves_length != empty(uint256)): return leaves[empty(uint256)] - else: - return proof[empty(uint256)] + + return proof[empty(uint256)] @internal diff --git a/src/snekmate/utils/SignatureChecker.vy b/src/snekmate/utils/SignatureChecker.vy index 77c61d80..272bec78 100644 --- a/src/snekmate/utils/SignatureChecker.vy +++ b/src/snekmate/utils/SignatureChecker.vy @@ -107,4 +107,4 @@ def _is_valid_ERC1271_signature_now(signer: address, hash: bytes32, signature: B # address. success, return_data = \ raw_call(signer, _abi_encode(hash, signature, method_id=IERC1271_ISVALIDSIGNATURE_SELECTOR), max_outsize=32, is_static_call=True, revert_on_failure=False) - return (success and (len(return_data) == 32) and (convert(return_data, bytes32) == convert(IERC1271_ISVALIDSIGNATURE_SELECTOR, bytes32))) + return ((success) and (len(return_data) == 32) and (convert(return_data, bytes32) == convert(IERC1271_ISVALIDSIGNATURE_SELECTOR, bytes32))) diff --git a/test/governance/TimelockController.t.sol b/test/governance/TimelockController.t.sol index 1dec78dc..1094372b 100644 --- a/test/governance/TimelockController.t.sol +++ b/test/governance/TimelockController.t.sol @@ -3858,7 +3858,11 @@ contract TimelockControllerTest is Test { "1" ); erc721Mock = IERC721Extended( - vyperDeployer.deployContract("src/snekmate/tokens/", "ERC721", args) + vyperDeployer.deployContract( + "src/snekmate/tokens/mocks/", + "ERC721Mock", + args + ) ); vm.startPrank(deployer); erc721Mock.safe_mint(timelockControllerAddr, "my_awesome_nft_uri_1"); diff --git a/test/tokens/ERC721.t.sol b/test/tokens/ERC721.t.sol index 8bf51d71..8e67ea80 100644 --- a/test/tokens/ERC721.t.sol +++ b/test/tokens/ERC721.t.sol @@ -494,7 +494,11 @@ contract ERC721Test is Test { _VERSION_EIP712 ); ERC721Extended = IERC721Extended( - vyperDeployer.deployContract("src/snekmate/tokens/", "ERC721", args) + vyperDeployer.deployContract( + "src/snekmate/tokens/mocks/", + "ERC721Mock", + args + ) ); ERC721ExtendedAddr = address(ERC721Extended); _CACHED_DOMAIN_SEPARATOR = keccak256( @@ -527,7 +531,11 @@ contract ERC721Test is Test { _VERSION_EIP712 ); ERC721ExtendedInitialEvent = IERC721Extended( - vyperDeployer.deployContract("src/snekmate/tokens/", "ERC721", args) + vyperDeployer.deployContract( + "src/snekmate/tokens/mocks/", + "ERC721Mock", + args + ) ); assertEq(ERC721ExtendedInitialEvent.name(), _NAME); assertEq(ERC721ExtendedInitialEvent.symbol(), _SYMBOL); @@ -1154,7 +1162,11 @@ contract ERC721Test is Test { _VERSION_EIP712 ); ERC721ExtendedNoBaseURI = IERC721Extended( - vyperDeployer.deployContract("src/snekmate/tokens/", "ERC721", args) + vyperDeployer.deployContract( + "src/snekmate/tokens/mocks/", + "ERC721Mock", + args + ) ); address owner = makeAddr("owner"); string memory uri = "my_awesome_nft_uri"; @@ -2579,18 +2591,22 @@ contract ERC721Invariants is Test { _VERSION_EIP712 ); ERC721Extended = IERC721Extended( - vyperDeployer.deployContract("src/snekmate/tokens/", "ERC721", args) + vyperDeployer.deployContract( + "src/snekmate/tokens/mocks/", + "ERC721Mock", + args + ) ); erc721Handler = new ERC721Handler(ERC721Extended, deployer); targetContract(address(erc721Handler)); targetSender(deployer); } - function invariantTotalSupply() public view { + function statefulFuzzTotalSupply() public view { assertEq(ERC721Extended.totalSupply(), erc721Handler.totalSupply()); } - function invariantOwner() public view { + function statefulFuzzOwner() public view { assertEq(ERC721Extended.owner(), erc721Handler.owner()); } } From 7fc97d884825b5c5ed09b8558784f802db80c372 Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Tue, 16 Apr 2024 13:43:09 +0200 Subject: [PATCH 2/5] =?UTF-8?q?=F0=9F=94=81=20Update=20to=20`lockfileVersi?= =?UTF-8?q?on:=20"9.0"`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Pascal Marco Caversaccio --- pnpm-lock.yaml | 2335 +++++++++++++++++++++++++++--------------------- 1 file changed, 1295 insertions(+), 1040 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d74d48d4..ecae2aa2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,90 +1,79 @@ -lockfileVersion: "6.0" +lockfileVersion: "9.0" settings: autoInstallPeers: true excludeLinksFromLockfile: false -devDependencies: - "@eslint/js": - specifier: ^9.0.0 - version: 9.0.0 - "@openzeppelin/merkle-tree": - specifier: ^1.0.6 - version: 1.0.6 - eslint: - specifier: ^9.0.0 - version: 9.0.0 - eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.0(eslint@9.0.0) - ethers: - specifier: ^6.11.1 - version: 6.11.1 - keccak256: - specifier: ^1.0.6 - version: 1.0.6 - merkletreejs: - specifier: ^0.3.11 - version: 0.3.11 - prettier: - specifier: ^3.2.5 - version: 3.2.5 - prettier-plugin-solidity: - specifier: ^1.3.1 - version: 1.3.1(prettier@3.2.5) - solhint: - specifier: ^4.5.4 - version: 4.5.4 +importers: + .: + devDependencies: + "@eslint/js": + specifier: ^9.0.0 + version: 9.0.0 + "@openzeppelin/merkle-tree": + specifier: ^1.0.6 + version: 1.0.6 + eslint: + specifier: ^9.0.0 + version: 9.0.0 + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@9.0.0) + ethers: + specifier: ^6.11.1 + version: 6.11.1 + keccak256: + specifier: ^1.0.6 + version: 1.0.6 + merkletreejs: + specifier: ^0.3.11 + version: 0.3.11 + prettier: + specifier: ^3.2.5 + version: 3.2.5 + prettier-plugin-solidity: + specifier: ^1.3.1 + version: 1.3.1(prettier@3.2.5) + solhint: + specifier: ^4.5.4 + version: 4.5.4 packages: - /@aashutoshrathi/word-wrap@1.2.6: + "@aashutoshrathi/word-wrap@1.2.6": resolution: { integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==, } engines: { node: ">=0.10.0" } - dev: true - /@adraffy/ens-normalize@1.10.1: + "@adraffy/ens-normalize@1.10.1": resolution: { integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==, } - dev: true - /@babel/code-frame@7.24.2: + "@babel/code-frame@7.24.2": resolution: { integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==, } engines: { node: ">=6.9.0" } - dependencies: - "@babel/highlight": 7.24.2 - picocolors: 1.0.0 - dev: true - /@babel/helper-validator-identifier@7.22.20: + "@babel/helper-validator-identifier@7.22.20": resolution: { integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==, } engines: { node: ">=6.9.0" } - dev: true - /@babel/highlight@7.24.2: + "@babel/highlight@7.24.2": resolution: { integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==, } engines: { node: ">=6.9.0" } - dependencies: - "@babel/helper-validator-identifier": 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.0 - dev: true - /@eslint-community/eslint-utils@4.4.0(eslint@9.0.0): + "@eslint-community/eslint-utils@4.4.0": resolution: { integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==, @@ -92,839 +81,559 @@ packages: engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 9.0.0 - eslint-visitor-keys: 3.4.3 - dev: true - /@eslint-community/regexpp@4.10.0: + "@eslint-community/regexpp@4.10.0": resolution: { integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==, } engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } - dev: true - /@eslint/eslintrc@3.0.2: + "@eslint/eslintrc@3.0.2": resolution: { integrity: sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg==, } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 10.0.1 - globals: 14.0.0 - ignore: 5.3.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true - /@eslint/js@9.0.0: + "@eslint/js@9.0.0": resolution: { integrity: sha512-RThY/MnKrhubF6+s1JflwUjPEsnCEmYCWwqa/aRISKWNXGZ9epUwft4bUMM35SdKF9xvBrLydAM1RDHd1Z//ZQ==, } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - dev: true - /@ethereumjs/rlp@4.0.1: + "@ethereumjs/rlp@4.0.1": resolution: { integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==, } engines: { node: ">=14" } hasBin: true - dev: true - /@ethereumjs/util@8.1.0: + "@ethereumjs/util@8.1.0": resolution: { integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==, } engines: { node: ">=14" } - dependencies: - "@ethereumjs/rlp": 4.0.1 - ethereum-cryptography: 2.1.3 - micro-ftch: 0.3.1 - dev: true - /@ethersproject/abi@5.7.0: + "@ethersproject/abi@5.7.0": resolution: { integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==, } - dependencies: - "@ethersproject/address": 5.7.0 - "@ethersproject/bignumber": 5.7.0 - "@ethersproject/bytes": 5.7.0 - "@ethersproject/constants": 5.7.0 - "@ethersproject/hash": 5.7.0 - "@ethersproject/keccak256": 5.7.0 - "@ethersproject/logger": 5.7.0 - "@ethersproject/properties": 5.7.0 - "@ethersproject/strings": 5.7.0 - dev: true - /@ethersproject/abstract-provider@5.7.0: + "@ethersproject/abstract-provider@5.7.0": resolution: { integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==, } - dependencies: - "@ethersproject/bignumber": 5.7.0 - "@ethersproject/bytes": 5.7.0 - "@ethersproject/logger": 5.7.0 - "@ethersproject/networks": 5.7.1 - "@ethersproject/properties": 5.7.0 - "@ethersproject/transactions": 5.7.0 - "@ethersproject/web": 5.7.1 - dev: true - /@ethersproject/abstract-signer@5.7.0: + "@ethersproject/abstract-signer@5.7.0": resolution: { integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==, } - dependencies: - "@ethersproject/abstract-provider": 5.7.0 - "@ethersproject/bignumber": 5.7.0 - "@ethersproject/bytes": 5.7.0 - "@ethersproject/logger": 5.7.0 - "@ethersproject/properties": 5.7.0 - dev: true - /@ethersproject/address@5.7.0: + "@ethersproject/address@5.7.0": resolution: { integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==, } - dependencies: - "@ethersproject/bignumber": 5.7.0 - "@ethersproject/bytes": 5.7.0 - "@ethersproject/keccak256": 5.7.0 - "@ethersproject/logger": 5.7.0 - "@ethersproject/rlp": 5.7.0 - dev: true - /@ethersproject/base64@5.7.0: + "@ethersproject/base64@5.7.0": resolution: { integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==, } - dependencies: - "@ethersproject/bytes": 5.7.0 - dev: true - /@ethersproject/bignumber@5.7.0: + "@ethersproject/bignumber@5.7.0": resolution: { integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==, } - dependencies: - "@ethersproject/bytes": 5.7.0 - "@ethersproject/logger": 5.7.0 - bn.js: 5.2.1 - dev: true - /@ethersproject/bytes@5.7.0: + "@ethersproject/bytes@5.7.0": resolution: { integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==, } - dependencies: - "@ethersproject/logger": 5.7.0 - dev: true - /@ethersproject/constants@5.7.0: + "@ethersproject/constants@5.7.0": resolution: { integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==, } - dependencies: - "@ethersproject/bignumber": 5.7.0 - dev: true - /@ethersproject/hash@5.7.0: + "@ethersproject/hash@5.7.0": resolution: { integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==, } - dependencies: - "@ethersproject/abstract-signer": 5.7.0 - "@ethersproject/address": 5.7.0 - "@ethersproject/base64": 5.7.0 - "@ethersproject/bignumber": 5.7.0 - "@ethersproject/bytes": 5.7.0 - "@ethersproject/keccak256": 5.7.0 - "@ethersproject/logger": 5.7.0 - "@ethersproject/properties": 5.7.0 - "@ethersproject/strings": 5.7.0 - dev: true - /@ethersproject/keccak256@5.7.0: + "@ethersproject/keccak256@5.7.0": resolution: { integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==, } - dependencies: - "@ethersproject/bytes": 5.7.0 - js-sha3: 0.8.0 - dev: true - /@ethersproject/logger@5.7.0: + "@ethersproject/logger@5.7.0": resolution: { integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==, } - dev: true - /@ethersproject/networks@5.7.1: + "@ethersproject/networks@5.7.1": resolution: { integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==, } - dependencies: - "@ethersproject/logger": 5.7.0 - dev: true - /@ethersproject/properties@5.7.0: + "@ethersproject/properties@5.7.0": resolution: { integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==, } - dependencies: - "@ethersproject/logger": 5.7.0 - dev: true - /@ethersproject/rlp@5.7.0: + "@ethersproject/rlp@5.7.0": resolution: { integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==, } - dependencies: - "@ethersproject/bytes": 5.7.0 - "@ethersproject/logger": 5.7.0 - dev: true - /@ethersproject/signing-key@5.7.0: + "@ethersproject/signing-key@5.7.0": resolution: { integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==, } - dependencies: - "@ethersproject/bytes": 5.7.0 - "@ethersproject/logger": 5.7.0 - "@ethersproject/properties": 5.7.0 - bn.js: 5.2.1 - elliptic: 6.5.4 - hash.js: 1.1.7 - dev: true - /@ethersproject/strings@5.7.0: + "@ethersproject/strings@5.7.0": resolution: { integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==, } - dependencies: - "@ethersproject/bytes": 5.7.0 - "@ethersproject/constants": 5.7.0 - "@ethersproject/logger": 5.7.0 - dev: true - /@ethersproject/transactions@5.7.0: + "@ethersproject/transactions@5.7.0": resolution: { integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==, } - dependencies: - "@ethersproject/address": 5.7.0 - "@ethersproject/bignumber": 5.7.0 - "@ethersproject/bytes": 5.7.0 - "@ethersproject/constants": 5.7.0 - "@ethersproject/keccak256": 5.7.0 - "@ethersproject/logger": 5.7.0 - "@ethersproject/properties": 5.7.0 - "@ethersproject/rlp": 5.7.0 - "@ethersproject/signing-key": 5.7.0 - dev: true - /@ethersproject/web@5.7.1: + "@ethersproject/web@5.7.1": resolution: { integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==, } - dependencies: - "@ethersproject/base64": 5.7.0 - "@ethersproject/bytes": 5.7.0 - "@ethersproject/logger": 5.7.0 - "@ethersproject/properties": 5.7.0 - "@ethersproject/strings": 5.7.0 - dev: true - /@humanwhocodes/config-array@0.12.3: + "@humanwhocodes/config-array@0.12.3": resolution: { integrity: sha512-jsNnTBlMWuTpDkeE3on7+dWJi0D6fdDfeANj/w7MpS8ztROCoLvIO2nG0CcFj+E4k8j4QrSTh4Oryi3i2G669g==, } engines: { node: ">=10.10.0" } - dependencies: - "@humanwhocodes/object-schema": 2.0.3 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: true - /@humanwhocodes/module-importer@1.0.1: + "@humanwhocodes/module-importer@1.0.1": resolution: { integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, } engines: { node: ">=12.22" } - dev: true - /@humanwhocodes/object-schema@2.0.3: + "@humanwhocodes/object-schema@2.0.3": resolution: { integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==, } - dev: true - /@noble/curves@1.2.0: + "@noble/curves@1.2.0": resolution: { integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==, } - dependencies: - "@noble/hashes": 1.3.2 - dev: true - /@noble/curves@1.3.0: + "@noble/curves@1.3.0": resolution: { integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==, } - dependencies: - "@noble/hashes": 1.3.3 - dev: true - /@noble/hashes@1.2.0: + "@noble/hashes@1.2.0": resolution: { integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==, } - dev: true - /@noble/hashes@1.3.2: + "@noble/hashes@1.3.2": resolution: { integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==, } engines: { node: ">= 16" } - dev: true - /@noble/hashes@1.3.3: + "@noble/hashes@1.3.3": resolution: { integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==, } engines: { node: ">= 16" } - dev: true - /@noble/hashes@1.4.0: + "@noble/hashes@1.4.0": resolution: { integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==, } engines: { node: ">= 16" } - dev: true - /@noble/secp256k1@1.7.1: + "@noble/secp256k1@1.7.1": resolution: { integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==, } - dev: true - /@nodelib/fs.scandir@2.1.5: + "@nodelib/fs.scandir@2.1.5": resolution: { integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, } engines: { node: ">= 8" } - dependencies: - "@nodelib/fs.stat": 2.0.5 - run-parallel: 1.2.0 - dev: true - /@nodelib/fs.stat@2.0.5: + "@nodelib/fs.stat@2.0.5": resolution: { integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, } engines: { node: ">= 8" } - dev: true - /@nodelib/fs.walk@1.2.8: + "@nodelib/fs.walk@1.2.8": resolution: { integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, } engines: { node: ">= 8" } - dependencies: - "@nodelib/fs.scandir": 2.1.5 - fastq: 1.17.1 - dev: true - /@openzeppelin/merkle-tree@1.0.6: + "@openzeppelin/merkle-tree@1.0.6": resolution: { integrity: sha512-cGWOb2WBWbJhqvupzxjnKAwGLxxAEYPg51sk76yZ5nVe5D03mw7Vx5yo8llaIEqYhP5O39M8QlrNWclgLfKVrA==, } - dependencies: - "@ethersproject/abi": 5.7.0 - ethereum-cryptography: 1.2.0 - dev: true - /@pnpm/config.env-replace@1.1.0: + "@pnpm/config.env-replace@1.1.0": resolution: { integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==, } engines: { node: ">=12.22.0" } - dev: true - /@pnpm/network.ca-file@1.0.2: + "@pnpm/network.ca-file@1.0.2": resolution: { integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==, } engines: { node: ">=12.22.0" } - dependencies: - graceful-fs: 4.2.10 - dev: true - /@pnpm/npm-conf@2.2.2: + "@pnpm/npm-conf@2.2.2": resolution: { integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==, } engines: { node: ">=12" } - dependencies: - "@pnpm/config.env-replace": 1.1.0 - "@pnpm/network.ca-file": 1.0.2 - config-chain: 1.1.13 - dev: true - /@scure/base@1.1.6: + "@scure/base@1.1.6": resolution: { integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==, } - dev: true - /@scure/bip32@1.1.5: + "@scure/bip32@1.1.5": resolution: { integrity: sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==, } - dependencies: - "@noble/hashes": 1.2.0 - "@noble/secp256k1": 1.7.1 - "@scure/base": 1.1.6 - dev: true - /@scure/bip32@1.3.3: + "@scure/bip32@1.3.3": resolution: { integrity: sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==, } - dependencies: - "@noble/curves": 1.3.0 - "@noble/hashes": 1.3.3 - "@scure/base": 1.1.6 - dev: true - /@scure/bip39@1.1.1: + "@scure/bip39@1.1.1": resolution: { integrity: sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==, } - dependencies: - "@noble/hashes": 1.2.0 - "@scure/base": 1.1.6 - dev: true - /@scure/bip39@1.2.2: + "@scure/bip39@1.2.2": resolution: { integrity: sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==, } - dependencies: - "@noble/hashes": 1.3.3 - "@scure/base": 1.1.6 - dev: true - /@sindresorhus/is@5.6.0: + "@sindresorhus/is@5.6.0": resolution: { integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==, } engines: { node: ">=14.16" } - dev: true - /@solidity-parser/parser@0.17.0: + "@solidity-parser/parser@0.17.0": resolution: { integrity: sha512-Nko8R0/kUo391jsEHHxrGM07QFdnPGvlmox4rmH0kNiNAashItAilhy4Mv4pK5gQmW5f4sXAF58fwJbmlkGcVw==, } - dev: true - /@solidity-parser/parser@0.18.0: + "@solidity-parser/parser@0.18.0": resolution: { integrity: sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==, } - dev: true - /@szmarczak/http-timer@5.0.1: + "@szmarczak/http-timer@5.0.1": resolution: { integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==, } engines: { node: ">=14.16" } - dependencies: - defer-to-connect: 2.0.1 - dev: true - /@types/http-cache-semantics@4.0.4: + "@types/http-cache-semantics@4.0.4": resolution: { integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==, } - dev: true - /@types/node@18.15.13: + "@types/node@18.15.13": resolution: { integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==, } - dev: true - /acorn-jsx@5.3.2(acorn@8.11.3): + acorn-jsx@5.3.2: resolution: { integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, } peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.11.3 - dev: true - /acorn@8.11.3: + acorn@8.11.3: resolution: { integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==, } engines: { node: ">=0.4.0" } hasBin: true - dev: true - /aes-js@4.0.0-beta.5: + aes-js@4.0.0-beta.5: resolution: { integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==, } - dev: true - /ajv@6.12.6: + ajv@6.12.6: resolution: { integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, } - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - dev: true - /ajv@8.12.0: + ajv@8.12.0: resolution: { integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==, } - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - dev: true - /ansi-regex@5.0.1: + ansi-regex@5.0.1: resolution: { integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, } engines: { node: ">=8" } - dev: true - /ansi-styles@3.2.1: + ansi-styles@3.2.1: resolution: { integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, } engines: { node: ">=4" } - dependencies: - color-convert: 1.9.3 - dev: true - /ansi-styles@4.3.0: + ansi-styles@4.3.0: resolution: { integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, } engines: { node: ">=8" } - dependencies: - color-convert: 2.0.1 - dev: true - /antlr4@4.13.1-patch-1: + antlr4@4.13.1-patch-1: resolution: { integrity: sha512-OjFLWWLzDMV9rdFhpvroCWR4ooktNg9/nvVYSA5z28wuVpU36QUNuioR1XLnQtcjVlf8npjyz593PxnU/f/Cow==, } engines: { node: ">=16" } - dev: true - /argparse@2.0.1: + argparse@2.0.1: resolution: { integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, } - dev: true - /ast-parents@0.0.1: + ast-parents@0.0.1: resolution: { integrity: sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA==, } - dev: true - /astral-regex@2.0.0: + astral-regex@2.0.0: resolution: { integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==, } engines: { node: ">=8" } - dev: true - /balanced-match@1.0.2: + balanced-match@1.0.2: resolution: { integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, } - dev: true - /base64-js@1.5.1: + base64-js@1.5.1: resolution: { integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, } - dev: true - /bignumber.js@9.1.2: + bignumber.js@9.1.2: resolution: { integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==, } - dev: true - /bn.js@4.11.6: + bn.js@4.11.6: resolution: { integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==, } - dev: true - /bn.js@4.12.0: + bn.js@4.12.0: resolution: { integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==, } - dev: true - /bn.js@5.2.1: + bn.js@5.2.1: resolution: { integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==, } - dev: true - /brace-expansion@1.1.11: + brace-expansion@1.1.11: resolution: { integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, } - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: true - /brace-expansion@2.0.1: + brace-expansion@2.0.1: resolution: { integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, } - dependencies: - balanced-match: 1.0.2 - dev: true - /brorand@1.1.0: + brorand@1.1.0: resolution: { integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==, } - dev: true - /buffer-reverse@1.0.1: + buffer-reverse@1.0.1: resolution: { integrity: sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==, } - dev: true - /buffer@6.0.3: + buffer@6.0.3: resolution: { integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==, } - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - dev: true - /cacheable-lookup@7.0.0: + cacheable-lookup@7.0.0: resolution: { integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==, } engines: { node: ">=14.16" } - dev: true - /cacheable-request@10.2.14: + cacheable-request@10.2.14: resolution: { integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==, } engines: { node: ">=14.16" } - dependencies: - "@types/http-cache-semantics": 4.0.4 - get-stream: 6.0.1 - http-cache-semantics: 4.1.1 - keyv: 4.5.4 - mimic-response: 4.0.0 - normalize-url: 8.0.1 - responselike: 3.0.0 - dev: true - /callsites@3.1.0: + callsites@3.1.0: resolution: { integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, } engines: { node: ">=6" } - dev: true - /chalk@2.4.2: + chalk@2.4.2: resolution: { integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, } engines: { node: ">=4" } - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - dev: true - /chalk@4.1.2: + chalk@4.1.2: resolution: { integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, } engines: { node: ">=10" } - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - /color-convert@1.9.3: + color-convert@1.9.3: resolution: { integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, } - dependencies: - color-name: 1.1.3 - dev: true - /color-convert@2.0.1: + color-convert@2.0.1: resolution: { integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, } engines: { node: ">=7.0.0" } - dependencies: - color-name: 1.1.4 - dev: true - /color-name@1.1.3: + color-name@1.1.3: resolution: { integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, } - dev: true - /color-name@1.1.4: + color-name@1.1.4: resolution: { integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, } - dev: true - /commander@10.0.1: + commander@10.0.1: resolution: { integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==, } engines: { node: ">=14" } - dev: true - /concat-map@0.0.1: + concat-map@0.0.1: resolution: { integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, } - dev: true - /config-chain@1.1.13: + config-chain@1.1.13: resolution: { integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==, } - dependencies: - ini: 1.3.8 - proto-list: 1.2.4 - dev: true - /cosmiconfig@8.3.6: + cosmiconfig@8.3.6: resolution: { integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==, @@ -935,33 +644,21 @@ packages: peerDependenciesMeta: typescript: optional: true - dependencies: - import-fresh: 3.3.0 - js-yaml: 4.1.0 - parse-json: 5.2.0 - path-type: 4.0.0 - dev: true - /cross-spawn@7.0.3: + cross-spawn@7.0.3: resolution: { integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==, } engines: { node: ">= 8" } - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - dev: true - /crypto-js@4.2.0: + crypto-js@4.2.0: resolution: { integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==, } - dev: true - /debug@4.3.4: + debug@4.3.4: resolution: { integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, @@ -972,91 +669,67 @@ packages: peerDependenciesMeta: supports-color: optional: true - dependencies: - ms: 2.1.2 - dev: true - /decompress-response@6.0.0: + decompress-response@6.0.0: resolution: { integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==, } engines: { node: ">=10" } - dependencies: - mimic-response: 3.1.0 - dev: true - /deep-extend@0.6.0: + deep-extend@0.6.0: resolution: { integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==, } engines: { node: ">=4.0.0" } - dev: true - /deep-is@0.1.4: + deep-is@0.1.4: resolution: { integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, } - dev: true - /defer-to-connect@2.0.1: + defer-to-connect@2.0.1: resolution: { integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==, } engines: { node: ">=10" } - dev: true - /elliptic@6.5.4: + elliptic@6.5.4: resolution: { integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==, } - dependencies: - bn.js: 4.12.0 - brorand: 1.1.0 - hash.js: 1.1.7 - hmac-drbg: 1.0.1 - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - dev: true - /emoji-regex@8.0.0: + emoji-regex@8.0.0: resolution: { integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, } - dev: true - /error-ex@1.3.2: + error-ex@1.3.2: resolution: { integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, } - dependencies: - is-arrayish: 0.2.1 - dev: true - /escape-string-regexp@1.0.5: + escape-string-regexp@1.0.5: resolution: { integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, } engines: { node: ">=0.8.0" } - dev: true - /escape-string-regexp@4.0.0: + escape-string-regexp@4.0.0: resolution: { integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, } engines: { node: ">=10" } - dev: true - /eslint-config-prettier@9.1.0(eslint@9.0.0): + eslint-config-prettier@9.1.0: resolution: { integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==, @@ -1064,958 +737,672 @@ packages: hasBin: true peerDependencies: eslint: ">=7.0.0" - dependencies: - eslint: 9.0.0 - dev: true - /eslint-scope@8.0.1: + eslint-scope@8.0.1: resolution: { integrity: sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==, } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - dev: true - /eslint-visitor-keys@3.4.3: + eslint-visitor-keys@3.4.3: resolution: { integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } - dev: true - /eslint-visitor-keys@4.0.0: + eslint-visitor-keys@4.0.0: resolution: { integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==, } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - dev: true - /eslint@9.0.0: + eslint@9.0.0: resolution: { integrity: sha512-IMryZ5SudxzQvuod6rUdIUz29qFItWx281VhtFVc2Psy/ZhlCeD/5DT6lBIJ4H3G+iamGJoTln1v+QSuPw0p7Q==, } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } hasBin: true - dependencies: - "@eslint-community/eslint-utils": 4.4.0(eslint@9.0.0) - "@eslint-community/regexpp": 4.10.0 - "@eslint/eslintrc": 3.0.2 - "@eslint/js": 9.0.0 - "@humanwhocodes/config-array": 0.12.3 - "@humanwhocodes/module-importer": 1.0.1 - "@nodelib/fs.walk": 1.2.8 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - escape-string-regexp: 4.0.0 - eslint-scope: 8.0.1 - eslint-visitor-keys: 4.0.0 - espree: 10.0.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - graphemer: 1.4.0 - ignore: 5.3.1 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - dev: true - /espree@10.0.1: + espree@10.0.1: resolution: { integrity: sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==, } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) - eslint-visitor-keys: 4.0.0 - dev: true - /esquery@1.5.0: + esquery@1.5.0: resolution: { integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==, } engines: { node: ">=0.10" } - dependencies: - estraverse: 5.3.0 - dev: true - /esrecurse@4.3.0: + esrecurse@4.3.0: resolution: { integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, } engines: { node: ">=4.0" } - dependencies: - estraverse: 5.3.0 - dev: true - /estraverse@5.3.0: + estraverse@5.3.0: resolution: { integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, } engines: { node: ">=4.0" } - dev: true - /esutils@2.0.3: + esutils@2.0.3: resolution: { integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, } engines: { node: ">=0.10.0" } - dev: true - /ethereum-bloom-filters@1.1.0: + ethereum-bloom-filters@1.1.0: resolution: { integrity: sha512-J1gDRkLpuGNvWYzWslBQR9cDV4nd4kfvVTE/Wy4Kkm4yb3EYRSlyi0eB/inTsSTTVyA0+HyzHgbr95Fn/Z1fSw==, } - dependencies: - "@noble/hashes": 1.4.0 - dev: true - /ethereum-cryptography@1.2.0: + ethereum-cryptography@1.2.0: resolution: { integrity: sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==, } - dependencies: - "@noble/hashes": 1.2.0 - "@noble/secp256k1": 1.7.1 - "@scure/bip32": 1.1.5 - "@scure/bip39": 1.1.1 - dev: true - /ethereum-cryptography@2.1.3: + ethereum-cryptography@2.1.3: resolution: { integrity: sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==, } - dependencies: - "@noble/curves": 1.3.0 - "@noble/hashes": 1.3.3 - "@scure/bip32": 1.3.3 - "@scure/bip39": 1.2.2 - dev: true - /ethers@6.11.1: + ethers@6.11.1: resolution: { integrity: sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg==, } engines: { node: ">=14.0.0" } - dependencies: - "@adraffy/ens-normalize": 1.10.1 - "@noble/curves": 1.2.0 - "@noble/hashes": 1.3.2 - "@types/node": 18.15.13 - aes-js: 4.0.0-beta.5 - tslib: 2.4.0 - ws: 8.5.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: true - /ethjs-unit@0.1.6: + ethjs-unit@0.1.6: resolution: { integrity: sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==, } engines: { node: ">=6.5.0", npm: ">=3" } - dependencies: - bn.js: 4.11.6 - number-to-bn: 1.7.0 - dev: true - /fast-deep-equal@3.1.3: + fast-deep-equal@3.1.3: resolution: { integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, } - dev: true - /fast-diff@1.3.0: + fast-diff@1.3.0: resolution: { integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==, } - dev: true - /fast-json-stable-stringify@2.1.0: + fast-json-stable-stringify@2.1.0: resolution: { integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, } - dev: true - /fast-levenshtein@2.0.6: + fast-levenshtein@2.0.6: resolution: { integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, } - dev: true - /fastq@1.17.1: + fastq@1.17.1: resolution: { integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==, } - dependencies: - reusify: 1.0.4 - dev: true - /file-entry-cache@8.0.0: + file-entry-cache@8.0.0: resolution: { integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==, } engines: { node: ">=16.0.0" } - dependencies: - flat-cache: 4.0.1 - dev: true - /find-up@5.0.0: + find-up@5.0.0: resolution: { integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, } engines: { node: ">=10" } - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - dev: true - /flat-cache@4.0.1: + flat-cache@4.0.1: resolution: { integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==, } engines: { node: ">=16" } - dependencies: - flatted: 3.3.1 - keyv: 4.5.4 - dev: true - /flatted@3.3.1: + flatted@3.3.1: resolution: { integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==, } - dev: true - /form-data-encoder@2.1.4: + form-data-encoder@2.1.4: resolution: { integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==, } engines: { node: ">= 14.17" } - dev: true - /fs.realpath@1.0.0: + fs.realpath@1.0.0: resolution: { integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, } - dev: true - /get-stream@6.0.1: + get-stream@6.0.1: resolution: { integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, } engines: { node: ">=10" } - dev: true - /glob-parent@6.0.2: + glob-parent@6.0.2: resolution: { integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, } engines: { node: ">=10.13.0" } - dependencies: - is-glob: 4.0.3 - dev: true - /glob@8.1.0: + glob@8.1.0: resolution: { integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==, } engines: { node: ">=12" } - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.1.6 - once: 1.4.0 - dev: true - /globals@14.0.0: + globals@14.0.0: resolution: { integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==, } engines: { node: ">=18" } - dev: true - /got@12.6.1: + got@12.6.1: resolution: { integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==, } engines: { node: ">=14.16" } - dependencies: - "@sindresorhus/is": 5.6.0 - "@szmarczak/http-timer": 5.0.1 - cacheable-lookup: 7.0.0 - cacheable-request: 10.2.14 - decompress-response: 6.0.0 - form-data-encoder: 2.1.4 - get-stream: 6.0.1 - http2-wrapper: 2.2.1 - lowercase-keys: 3.0.0 - p-cancelable: 3.0.0 - responselike: 3.0.0 - dev: true - /graceful-fs@4.2.10: + graceful-fs@4.2.10: resolution: { integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, } - dev: true - /graphemer@1.4.0: + graphemer@1.4.0: resolution: { integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==, } - dev: true - /has-flag@3.0.0: + has-flag@3.0.0: resolution: { integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, } engines: { node: ">=4" } - dev: true - /has-flag@4.0.0: + has-flag@4.0.0: resolution: { integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, } engines: { node: ">=8" } - dev: true - /hash.js@1.1.7: + hash.js@1.1.7: resolution: { integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==, } - dependencies: - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - dev: true - /hmac-drbg@1.0.1: + hmac-drbg@1.0.1: resolution: { integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==, } - dependencies: - hash.js: 1.1.7 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - dev: true - /http-cache-semantics@4.1.1: + http-cache-semantics@4.1.1: resolution: { integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==, } - dev: true - /http2-wrapper@2.2.1: + http2-wrapper@2.2.1: resolution: { integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==, } engines: { node: ">=10.19.0" } - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 - dev: true - /ieee754@1.2.1: + ieee754@1.2.1: resolution: { integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, } - dev: true - /ignore@5.3.1: + ignore@5.3.1: resolution: { integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==, } engines: { node: ">= 4" } - dev: true - /import-fresh@3.3.0: + import-fresh@3.3.0: resolution: { integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, } engines: { node: ">=6" } - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - dev: true - /imurmurhash@0.1.4: + imurmurhash@0.1.4: resolution: { integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, } engines: { node: ">=0.8.19" } - dev: true - /inflight@1.0.6: + inflight@1.0.6: resolution: { integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, } - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true - /inherits@2.0.4: + inherits@2.0.4: resolution: { integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, } - dev: true - /ini@1.3.8: + ini@1.3.8: resolution: { integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==, } - dev: true - /is-arrayish@0.2.1: + is-arrayish@0.2.1: resolution: { integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, } - dev: true - /is-extglob@2.1.1: + is-extglob@2.1.1: resolution: { integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, } engines: { node: ">=0.10.0" } - dev: true - /is-fullwidth-code-point@3.0.0: + is-fullwidth-code-point@3.0.0: resolution: { integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, } engines: { node: ">=8" } - dev: true - /is-glob@4.0.3: + is-glob@4.0.3: resolution: { integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, } engines: { node: ">=0.10.0" } - dependencies: - is-extglob: 2.1.1 - dev: true - /is-hex-prefixed@1.0.0: + is-hex-prefixed@1.0.0: resolution: { integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==, } engines: { node: ">=6.5.0", npm: ">=3" } - dev: true - /is-path-inside@3.0.3: + is-path-inside@3.0.3: resolution: { integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==, } engines: { node: ">=8" } - dev: true - /isexe@2.0.0: + isexe@2.0.0: resolution: { integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, } - dev: true - /js-sha3@0.8.0: + js-sha3@0.8.0: resolution: { integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==, } - dev: true - /js-tokens@4.0.0: + js-tokens@4.0.0: resolution: { integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, } - dev: true - /js-yaml@4.1.0: + js-yaml@4.1.0: resolution: { integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==, } hasBin: true - dependencies: - argparse: 2.0.1 - dev: true - /json-buffer@3.0.1: + json-buffer@3.0.1: resolution: { integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==, } - dev: true - /json-parse-even-better-errors@2.3.1: + json-parse-even-better-errors@2.3.1: resolution: { integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, } - dev: true - /json-schema-traverse@0.4.1: + json-schema-traverse@0.4.1: resolution: { integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, } - dev: true - /json-schema-traverse@1.0.0: + json-schema-traverse@1.0.0: resolution: { integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==, } - dev: true - /json-stable-stringify-without-jsonify@1.0.1: + json-stable-stringify-without-jsonify@1.0.1: resolution: { integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, } - dev: true - /keccak256@1.0.6: + keccak256@1.0.6: resolution: { integrity: sha512-8GLiM01PkdJVGUhR1e6M/AvWnSqYS0HaERI+K/QtStGDGlSTx2B1zTqZk4Zlqu5TxHJNTxWAdP9Y+WI50OApUw==, } - dependencies: - bn.js: 5.2.1 - buffer: 6.0.3 - keccak: 3.0.4 - dev: true - /keccak@3.0.4: + keccak@3.0.4: resolution: { integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==, } engines: { node: ">=10.0.0" } - requiresBuild: true - dependencies: - node-addon-api: 2.0.2 - node-gyp-build: 4.8.0 - readable-stream: 3.6.2 - dev: true - /keyv@4.5.4: + keyv@4.5.4: resolution: { integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, } - dependencies: - json-buffer: 3.0.1 - dev: true - /latest-version@7.0.0: + latest-version@7.0.0: resolution: { integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==, } engines: { node: ">=14.16" } - dependencies: - package-json: 8.1.1 - dev: true - /levn@0.4.1: + levn@0.4.1: resolution: { integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, } engines: { node: ">= 0.8.0" } - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true - /lines-and-columns@1.2.4: + lines-and-columns@1.2.4: resolution: { integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, } - dev: true - /locate-path@6.0.0: + locate-path@6.0.0: resolution: { integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, } engines: { node: ">=10" } - dependencies: - p-locate: 5.0.0 - dev: true - /lodash.merge@4.6.2: + lodash.merge@4.6.2: resolution: { integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, } - dev: true - /lodash.truncate@4.4.2: + lodash.truncate@4.4.2: resolution: { integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==, } - dev: true - /lodash@4.17.21: + lodash@4.17.21: resolution: { integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, } - dev: true - /lowercase-keys@3.0.0: + lowercase-keys@3.0.0: resolution: { integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==, } engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } - dev: true - /lru-cache@6.0.0: + lru-cache@6.0.0: resolution: { integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, } engines: { node: ">=10" } - dependencies: - yallist: 4.0.0 - dev: true - /merkletreejs@0.3.11: + merkletreejs@0.3.11: resolution: { integrity: sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ==, } engines: { node: ">= 7.6.0" } - dependencies: - bignumber.js: 9.1.2 - buffer-reverse: 1.0.1 - crypto-js: 4.2.0 - treeify: 1.1.0 - web3-utils: 1.10.4 - dev: true - /micro-ftch@0.3.1: + micro-ftch@0.3.1: resolution: { integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==, } - dev: true - /mimic-response@3.1.0: + mimic-response@3.1.0: resolution: { integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==, } engines: { node: ">=10" } - dev: true - /mimic-response@4.0.0: + mimic-response@4.0.0: resolution: { integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==, } engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } - dev: true - /minimalistic-assert@1.0.1: + minimalistic-assert@1.0.1: resolution: { integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==, } - dev: true - /minimalistic-crypto-utils@1.0.1: + minimalistic-crypto-utils@1.0.1: resolution: { integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==, } - dev: true - /minimatch@3.1.2: + minimatch@3.1.2: resolution: { integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, } - dependencies: - brace-expansion: 1.1.11 - dev: true - /minimatch@5.1.6: + minimatch@5.1.6: resolution: { integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==, } engines: { node: ">=10" } - dependencies: - brace-expansion: 2.0.1 - dev: true - /minimist@1.2.8: + minimist@1.2.8: resolution: { integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, } - dev: true - /ms@2.1.2: + ms@2.1.2: resolution: { integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, } - dev: true - /natural-compare@1.4.0: + natural-compare@1.4.0: resolution: { integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, } - dev: true - /node-addon-api@2.0.2: + node-addon-api@2.0.2: resolution: { integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==, } - dev: true - /node-gyp-build@4.8.0: + node-gyp-build@4.8.0: resolution: { integrity: sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==, } hasBin: true - dev: true - /normalize-url@8.0.1: + normalize-url@8.0.1: resolution: { integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==, } engines: { node: ">=14.16" } - dev: true - /number-to-bn@1.7.0: + number-to-bn@1.7.0: resolution: { integrity: sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==, } engines: { node: ">=6.5.0", npm: ">=3" } - dependencies: - bn.js: 4.11.6 - strip-hex-prefix: 1.0.0 - dev: true - /once@1.4.0: + once@1.4.0: resolution: { integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, } - dependencies: - wrappy: 1.0.2 - dev: true - /optionator@0.9.3: + optionator@0.9.3: resolution: { integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==, } engines: { node: ">= 0.8.0" } - dependencies: - "@aashutoshrathi/word-wrap": 1.2.6 - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true - /p-cancelable@3.0.0: + p-cancelable@3.0.0: resolution: { integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==, } engines: { node: ">=12.20" } - dev: true - /p-limit@3.1.0: + p-limit@3.1.0: resolution: { integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, } engines: { node: ">=10" } - dependencies: - yocto-queue: 0.1.0 - dev: true - /p-locate@5.0.0: + p-locate@5.0.0: resolution: { integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, } engines: { node: ">=10" } - dependencies: - p-limit: 3.1.0 - dev: true - /package-json@8.1.1: + package-json@8.1.1: resolution: { integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==, } engines: { node: ">=14.16" } - dependencies: - got: 12.6.1 - registry-auth-token: 5.0.2 - registry-url: 6.0.1 - semver: 7.6.0 - dev: true - /parent-module@1.0.1: + parent-module@1.0.1: resolution: { integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, } engines: { node: ">=6" } - dependencies: - callsites: 3.1.0 - dev: true - /parse-json@5.2.0: + parse-json@5.2.0: resolution: { integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, } engines: { node: ">=8" } - dependencies: - "@babel/code-frame": 7.24.2 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - dev: true - /path-exists@4.0.0: + path-exists@4.0.0: resolution: { integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, } engines: { node: ">=8" } - dev: true - /path-key@3.1.1: + path-key@3.1.1: resolution: { integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, } engines: { node: ">=8" } - dev: true - /path-type@4.0.0: + path-type@4.0.0: resolution: { integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, } engines: { node: ">=8" } - dev: true - /picocolors@1.0.0: + picocolors@1.0.0: resolution: { integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, } - dev: true - /pluralize@8.0.0: + pluralize@8.0.0: resolution: { integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==, } engines: { node: ">=4" } - dev: true - /prelude-ls@1.2.1: + prelude-ls@1.2.1: resolution: { integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, } engines: { node: ">= 0.8.0" } - dev: true - /prettier-plugin-solidity@1.3.1(prettier@3.2.5): + prettier-plugin-solidity@1.3.1: resolution: { integrity: sha512-MN4OP5I2gHAzHZG1wcuJl0FsLS3c4Cc5494bbg+6oQWBPuEamjwDvmGfFMZ6NFzsh3Efd9UUxeT7ImgjNH4ozA==, @@ -2023,435 +1410,299 @@ packages: engines: { node: ">=16" } peerDependencies: prettier: ">=2.3.0" - dependencies: - "@solidity-parser/parser": 0.17.0 - prettier: 3.2.5 - semver: 7.6.0 - solidity-comments-extractor: 0.0.8 - dev: true - /prettier@2.8.8: + prettier@2.8.8: resolution: { integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==, } engines: { node: ">=10.13.0" } hasBin: true - requiresBuild: true - dev: true - optional: true - /prettier@3.2.5: + prettier@3.2.5: resolution: { integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==, } engines: { node: ">=14" } hasBin: true - dev: true - /proto-list@1.2.4: + proto-list@1.2.4: resolution: { integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==, } - dev: true - /punycode@2.3.1: + punycode@2.3.1: resolution: { integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, } engines: { node: ">=6" } - dev: true - /queue-microtask@1.2.3: + queue-microtask@1.2.3: resolution: { integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, } - dev: true - /quick-lru@5.1.1: + quick-lru@5.1.1: resolution: { integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==, } engines: { node: ">=10" } - dev: true - /randombytes@2.1.0: + randombytes@2.1.0: resolution: { integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==, } - dependencies: - safe-buffer: 5.2.1 - dev: true - /rc@1.2.8: + rc@1.2.8: resolution: { integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==, } hasBin: true - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.8 - strip-json-comments: 2.0.1 - dev: true - /readable-stream@3.6.2: + readable-stream@3.6.2: resolution: { integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==, } engines: { node: ">= 6" } - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - dev: true - /registry-auth-token@5.0.2: + registry-auth-token@5.0.2: resolution: { integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==, } engines: { node: ">=14" } - dependencies: - "@pnpm/npm-conf": 2.2.2 - dev: true - /registry-url@6.0.1: + registry-url@6.0.1: resolution: { integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==, } engines: { node: ">=12" } - dependencies: - rc: 1.2.8 - dev: true - /require-from-string@2.0.2: + require-from-string@2.0.2: resolution: { integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==, } engines: { node: ">=0.10.0" } - dev: true - /resolve-alpn@1.2.1: + resolve-alpn@1.2.1: resolution: { integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==, } - dev: true - /resolve-from@4.0.0: + resolve-from@4.0.0: resolution: { integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, } engines: { node: ">=4" } - dev: true - /responselike@3.0.0: + responselike@3.0.0: resolution: { integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==, } engines: { node: ">=14.16" } - dependencies: - lowercase-keys: 3.0.0 - dev: true - /reusify@1.0.4: + reusify@1.0.4: resolution: { integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, } engines: { iojs: ">=1.0.0", node: ">=0.10.0" } - dev: true - /run-parallel@1.2.0: + run-parallel@1.2.0: resolution: { integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, } - dependencies: - queue-microtask: 1.2.3 - dev: true - /safe-buffer@5.2.1: + safe-buffer@5.2.1: resolution: { integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, } - dev: true - /semver@7.6.0: + semver@7.6.0: resolution: { integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==, } engines: { node: ">=10" } hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: true - /shebang-command@2.0.0: + shebang-command@2.0.0: resolution: { integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, } engines: { node: ">=8" } - dependencies: - shebang-regex: 3.0.0 - dev: true - /shebang-regex@3.0.0: + shebang-regex@3.0.0: resolution: { integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, } engines: { node: ">=8" } - dev: true - /slice-ansi@4.0.0: + slice-ansi@4.0.0: resolution: { integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==, } engines: { node: ">=10" } - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - dev: true - /solhint@4.5.4: + solhint@4.5.4: resolution: { integrity: sha512-Cu1XiJXub2q1eCr9kkJ9VPv1sGcmj3V7Zb76B0CoezDOB9bu3DxKIFFH7ggCl9fWpEPD6xBmRLfZrYijkVmujQ==, } hasBin: true - dependencies: - "@solidity-parser/parser": 0.18.0 - ajv: 6.12.6 - antlr4: 4.13.1-patch-1 - ast-parents: 0.0.1 - chalk: 4.1.2 - commander: 10.0.1 - cosmiconfig: 8.3.6 - fast-diff: 1.3.0 - glob: 8.1.0 - ignore: 5.3.1 - js-yaml: 4.1.0 - latest-version: 7.0.0 - lodash: 4.17.21 - pluralize: 8.0.0 - semver: 7.6.0 - strip-ansi: 6.0.1 - table: 6.8.2 - text-table: 0.2.0 - optionalDependencies: - prettier: 2.8.8 - transitivePeerDependencies: - - typescript - dev: true - /solidity-comments-extractor@0.0.8: + solidity-comments-extractor@0.0.8: resolution: { integrity: sha512-htM7Vn6LhHreR+EglVMd2s+sZhcXAirB1Zlyrv5zBuTxieCvjfnRpd7iZk75m/u6NOlEyQ94C6TWbBn2cY7w8g==, } - dev: true - /string-width@4.2.3: + string-width@4.2.3: resolution: { integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, } engines: { node: ">=8" } - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - dev: true - /string_decoder@1.3.0: + string_decoder@1.3.0: resolution: { integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==, } - dependencies: - safe-buffer: 5.2.1 - dev: true - /strip-ansi@6.0.1: + strip-ansi@6.0.1: resolution: { integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, } engines: { node: ">=8" } - dependencies: - ansi-regex: 5.0.1 - dev: true - /strip-hex-prefix@1.0.0: + strip-hex-prefix@1.0.0: resolution: { integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==, } engines: { node: ">=6.5.0", npm: ">=3" } - dependencies: - is-hex-prefixed: 1.0.0 - dev: true - /strip-json-comments@2.0.1: + strip-json-comments@2.0.1: resolution: { integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==, } engines: { node: ">=0.10.0" } - dev: true - /strip-json-comments@3.1.1: + strip-json-comments@3.1.1: resolution: { integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, } engines: { node: ">=8" } - dev: true - /supports-color@5.5.0: + supports-color@5.5.0: resolution: { integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, } engines: { node: ">=4" } - dependencies: - has-flag: 3.0.0 - dev: true - /supports-color@7.2.0: + supports-color@7.2.0: resolution: { integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, } engines: { node: ">=8" } - dependencies: - has-flag: 4.0.0 - dev: true - /table@6.8.2: + table@6.8.2: resolution: { integrity: sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==, } engines: { node: ">=10.0.0" } - dependencies: - ajv: 8.12.0 - lodash.truncate: 4.4.2 - slice-ansi: 4.0.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: true - /text-table@0.2.0: + text-table@0.2.0: resolution: { integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==, } - dev: true - /treeify@1.1.0: + treeify@1.1.0: resolution: { integrity: sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==, } engines: { node: ">=0.6" } - dev: true - /tslib@2.4.0: + tslib@2.4.0: resolution: { integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==, } - dev: true - /type-check@0.4.0: + type-check@0.4.0: resolution: { integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, } engines: { node: ">= 0.8.0" } - dependencies: - prelude-ls: 1.2.1 - dev: true - /uri-js@4.4.1: + uri-js@4.4.1: resolution: { integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, } - dependencies: - punycode: 2.3.1 - dev: true - /utf8@3.0.0: + utf8@3.0.0: resolution: { integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==, } - dev: true - /util-deprecate@1.0.2: + util-deprecate@1.0.2: resolution: { integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, } - dev: true - /web3-utils@1.10.4: + web3-utils@1.10.4: resolution: { integrity: sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==, } engines: { node: ">=8.0.0" } - dependencies: - "@ethereumjs/util": 8.1.0 - bn.js: 5.2.1 - ethereum-bloom-filters: 1.1.0 - ethereum-cryptography: 2.1.3 - ethjs-unit: 0.1.6 - number-to-bn: 1.7.0 - randombytes: 2.1.0 - utf8: 3.0.0 - dev: true - /which@2.0.2: + which@2.0.2: resolution: { integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, } engines: { node: ">= 8" } hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - /wrappy@1.0.2: + wrappy@1.0.2: resolution: { integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, } - dev: true - /ws@8.5.0: + ws@8.5.0: resolution: { integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==, @@ -2465,19 +1716,1023 @@ packages: optional: true utf-8-validate: optional: true - dev: true - /yallist@4.0.0: + yallist@4.0.0: resolution: { integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, } - dev: true - /yocto-queue@0.1.0: + yocto-queue@0.1.0: resolution: { integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, } engines: { node: ">=10" } - dev: true + +snapshots: + "@aashutoshrathi/word-wrap@1.2.6": {} + + "@adraffy/ens-normalize@1.10.1": {} + + "@babel/code-frame@7.24.2": + dependencies: + "@babel/highlight": 7.24.2 + picocolors: 1.0.0 + + "@babel/helper-validator-identifier@7.22.20": {} + + "@babel/highlight@7.24.2": + dependencies: + "@babel/helper-validator-identifier": 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.0 + + "@eslint-community/eslint-utils@4.4.0(eslint@9.0.0)": + dependencies: + eslint: 9.0.0 + eslint-visitor-keys: 3.4.3 + + "@eslint-community/regexpp@4.10.0": {} + + "@eslint/eslintrc@3.0.2": + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 10.0.1 + globals: 14.0.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + "@eslint/js@9.0.0": {} + + "@ethereumjs/rlp@4.0.1": {} + + "@ethereumjs/util@8.1.0": + dependencies: + "@ethereumjs/rlp": 4.0.1 + ethereum-cryptography: 2.1.3 + micro-ftch: 0.3.1 + + "@ethersproject/abi@5.7.0": + dependencies: + "@ethersproject/address": 5.7.0 + "@ethersproject/bignumber": 5.7.0 + "@ethersproject/bytes": 5.7.0 + "@ethersproject/constants": 5.7.0 + "@ethersproject/hash": 5.7.0 + "@ethersproject/keccak256": 5.7.0 + "@ethersproject/logger": 5.7.0 + "@ethersproject/properties": 5.7.0 + "@ethersproject/strings": 5.7.0 + + "@ethersproject/abstract-provider@5.7.0": + dependencies: + "@ethersproject/bignumber": 5.7.0 + "@ethersproject/bytes": 5.7.0 + "@ethersproject/logger": 5.7.0 + "@ethersproject/networks": 5.7.1 + "@ethersproject/properties": 5.7.0 + "@ethersproject/transactions": 5.7.0 + "@ethersproject/web": 5.7.1 + + "@ethersproject/abstract-signer@5.7.0": + dependencies: + "@ethersproject/abstract-provider": 5.7.0 + "@ethersproject/bignumber": 5.7.0 + "@ethersproject/bytes": 5.7.0 + "@ethersproject/logger": 5.7.0 + "@ethersproject/properties": 5.7.0 + + "@ethersproject/address@5.7.0": + dependencies: + "@ethersproject/bignumber": 5.7.0 + "@ethersproject/bytes": 5.7.0 + "@ethersproject/keccak256": 5.7.0 + "@ethersproject/logger": 5.7.0 + "@ethersproject/rlp": 5.7.0 + + "@ethersproject/base64@5.7.0": + dependencies: + "@ethersproject/bytes": 5.7.0 + + "@ethersproject/bignumber@5.7.0": + dependencies: + "@ethersproject/bytes": 5.7.0 + "@ethersproject/logger": 5.7.0 + bn.js: 5.2.1 + + "@ethersproject/bytes@5.7.0": + dependencies: + "@ethersproject/logger": 5.7.0 + + "@ethersproject/constants@5.7.0": + dependencies: + "@ethersproject/bignumber": 5.7.0 + + "@ethersproject/hash@5.7.0": + dependencies: + "@ethersproject/abstract-signer": 5.7.0 + "@ethersproject/address": 5.7.0 + "@ethersproject/base64": 5.7.0 + "@ethersproject/bignumber": 5.7.0 + "@ethersproject/bytes": 5.7.0 + "@ethersproject/keccak256": 5.7.0 + "@ethersproject/logger": 5.7.0 + "@ethersproject/properties": 5.7.0 + "@ethersproject/strings": 5.7.0 + + "@ethersproject/keccak256@5.7.0": + dependencies: + "@ethersproject/bytes": 5.7.0 + js-sha3: 0.8.0 + + "@ethersproject/logger@5.7.0": {} + + "@ethersproject/networks@5.7.1": + dependencies: + "@ethersproject/logger": 5.7.0 + + "@ethersproject/properties@5.7.0": + dependencies: + "@ethersproject/logger": 5.7.0 + + "@ethersproject/rlp@5.7.0": + dependencies: + "@ethersproject/bytes": 5.7.0 + "@ethersproject/logger": 5.7.0 + + "@ethersproject/signing-key@5.7.0": + dependencies: + "@ethersproject/bytes": 5.7.0 + "@ethersproject/logger": 5.7.0 + "@ethersproject/properties": 5.7.0 + bn.js: 5.2.1 + elliptic: 6.5.4 + hash.js: 1.1.7 + + "@ethersproject/strings@5.7.0": + dependencies: + "@ethersproject/bytes": 5.7.0 + "@ethersproject/constants": 5.7.0 + "@ethersproject/logger": 5.7.0 + + "@ethersproject/transactions@5.7.0": + dependencies: + "@ethersproject/address": 5.7.0 + "@ethersproject/bignumber": 5.7.0 + "@ethersproject/bytes": 5.7.0 + "@ethersproject/constants": 5.7.0 + "@ethersproject/keccak256": 5.7.0 + "@ethersproject/logger": 5.7.0 + "@ethersproject/properties": 5.7.0 + "@ethersproject/rlp": 5.7.0 + "@ethersproject/signing-key": 5.7.0 + + "@ethersproject/web@5.7.1": + dependencies: + "@ethersproject/base64": 5.7.0 + "@ethersproject/bytes": 5.7.0 + "@ethersproject/logger": 5.7.0 + "@ethersproject/properties": 5.7.0 + "@ethersproject/strings": 5.7.0 + + "@humanwhocodes/config-array@0.12.3": + dependencies: + "@humanwhocodes/object-schema": 2.0.3 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + "@humanwhocodes/module-importer@1.0.1": {} + + "@humanwhocodes/object-schema@2.0.3": {} + + "@noble/curves@1.2.0": + dependencies: + "@noble/hashes": 1.3.2 + + "@noble/curves@1.3.0": + dependencies: + "@noble/hashes": 1.3.3 + + "@noble/hashes@1.2.0": {} + + "@noble/hashes@1.3.2": {} + + "@noble/hashes@1.3.3": {} + + "@noble/hashes@1.4.0": {} + + "@noble/secp256k1@1.7.1": {} + + "@nodelib/fs.scandir@2.1.5": + dependencies: + "@nodelib/fs.stat": 2.0.5 + run-parallel: 1.2.0 + + "@nodelib/fs.stat@2.0.5": {} + + "@nodelib/fs.walk@1.2.8": + dependencies: + "@nodelib/fs.scandir": 2.1.5 + fastq: 1.17.1 + + "@openzeppelin/merkle-tree@1.0.6": + dependencies: + "@ethersproject/abi": 5.7.0 + ethereum-cryptography: 1.2.0 + + "@pnpm/config.env-replace@1.1.0": {} + + "@pnpm/network.ca-file@1.0.2": + dependencies: + graceful-fs: 4.2.10 + + "@pnpm/npm-conf@2.2.2": + dependencies: + "@pnpm/config.env-replace": 1.1.0 + "@pnpm/network.ca-file": 1.0.2 + config-chain: 1.1.13 + + "@scure/base@1.1.6": {} + + "@scure/bip32@1.1.5": + dependencies: + "@noble/hashes": 1.2.0 + "@noble/secp256k1": 1.7.1 + "@scure/base": 1.1.6 + + "@scure/bip32@1.3.3": + dependencies: + "@noble/curves": 1.3.0 + "@noble/hashes": 1.3.3 + "@scure/base": 1.1.6 + + "@scure/bip39@1.1.1": + dependencies: + "@noble/hashes": 1.2.0 + "@scure/base": 1.1.6 + + "@scure/bip39@1.2.2": + dependencies: + "@noble/hashes": 1.3.3 + "@scure/base": 1.1.6 + + "@sindresorhus/is@5.6.0": {} + + "@solidity-parser/parser@0.17.0": {} + + "@solidity-parser/parser@0.18.0": {} + + "@szmarczak/http-timer@5.0.1": + dependencies: + defer-to-connect: 2.0.1 + + "@types/http-cache-semantics@4.0.4": {} + + "@types/node@18.15.13": {} + + acorn-jsx@5.3.2(acorn@8.11.3): + dependencies: + acorn: 8.11.3 + + acorn@8.11.3: {} + + aes-js@4.0.0-beta.5: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.12.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + ansi-regex@5.0.1: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + antlr4@4.13.1-patch-1: {} + + argparse@2.0.1: {} + + ast-parents@0.0.1: {} + + astral-regex@2.0.0: {} + + balanced-match@1.0.2: {} + + base64-js@1.5.1: {} + + bignumber.js@9.1.2: {} + + bn.js@4.11.6: {} + + bn.js@4.12.0: {} + + bn.js@5.2.1: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + brorand@1.1.0: {} + + buffer-reverse@1.0.1: {} + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + cacheable-lookup@7.0.0: {} + + cacheable-request@10.2.14: + dependencies: + "@types/http-cache-semantics": 4.0.4 + get-stream: 6.0.1 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + mimic-response: 4.0.0 + normalize-url: 8.0.1 + responselike: 3.0.0 + + callsites@3.1.0: {} + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + commander@10.0.1: {} + + concat-map@0.0.1: {} + + config-chain@1.1.13: + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + + cosmiconfig@8.3.6: + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crypto-js@4.2.0: {} + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + + deep-extend@0.6.0: {} + + deep-is@0.1.4: {} + + defer-to-connect@2.0.1: {} + + elliptic@6.5.4: + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + emoji-regex@8.0.0: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + eslint-config-prettier@9.1.0(eslint@9.0.0): + dependencies: + eslint: 9.0.0 + + eslint-scope@8.0.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.0.0: {} + + eslint@9.0.0: + dependencies: + "@eslint-community/eslint-utils": 4.4.0(eslint@9.0.0) + "@eslint-community/regexpp": 4.10.0 + "@eslint/eslintrc": 3.0.2 + "@eslint/js": 9.0.0 + "@humanwhocodes/config-array": 0.12.3 + "@humanwhocodes/module-importer": 1.0.1 + "@nodelib/fs.walk": 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + escape-string-regexp: 4.0.0 + eslint-scope: 8.0.1 + eslint-visitor-keys: 4.0.0 + espree: 10.0.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + graphemer: 1.4.0 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@10.0.1: + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 4.0.0 + + esquery@1.5.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + ethereum-bloom-filters@1.1.0: + dependencies: + "@noble/hashes": 1.4.0 + + ethereum-cryptography@1.2.0: + dependencies: + "@noble/hashes": 1.2.0 + "@noble/secp256k1": 1.7.1 + "@scure/bip32": 1.1.5 + "@scure/bip39": 1.1.1 + + ethereum-cryptography@2.1.3: + dependencies: + "@noble/curves": 1.3.0 + "@noble/hashes": 1.3.3 + "@scure/bip32": 1.3.3 + "@scure/bip39": 1.2.2 + + ethers@6.11.1: + dependencies: + "@adraffy/ens-normalize": 1.10.1 + "@noble/curves": 1.2.0 + "@noble/hashes": 1.3.2 + "@types/node": 18.15.13 + aes-js: 4.0.0-beta.5 + tslib: 2.4.0 + ws: 8.5.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + ethjs-unit@0.1.6: + dependencies: + bn.js: 4.11.6 + number-to-bn: 1.7.0 + + fast-deep-equal@3.1.3: {} + + fast-diff@1.3.0: {} + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + + flatted@3.3.1: {} + + form-data-encoder@2.1.4: {} + + fs.realpath@1.0.0: {} + + get-stream@6.0.1: {} + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@8.1.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + + globals@14.0.0: {} + + got@12.6.1: + dependencies: + "@sindresorhus/is": 5.6.0 + "@szmarczak/http-timer": 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.14 + decompress-response: 6.0.0 + form-data-encoder: 2.1.4 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 3.0.0 + + graceful-fs@4.2.10: {} + + graphemer@1.4.0: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + hash.js@1.1.7: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + + hmac-drbg@1.0.1: + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + http-cache-semantics@4.1.1: {} + + http2-wrapper@2.2.1: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + + ieee754@1.2.1: {} + + ignore@5.3.1: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + ini@1.3.8: {} + + is-arrayish@0.2.1: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-hex-prefixed@1.0.0: {} + + is-path-inside@3.0.3: {} + + isexe@2.0.0: {} + + js-sha3@0.8.0: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + keccak256@1.0.6: + dependencies: + bn.js: 5.2.1 + buffer: 6.0.3 + keccak: 3.0.4 + + keccak@3.0.4: + dependencies: + node-addon-api: 2.0.2 + node-gyp-build: 4.8.0 + readable-stream: 3.6.2 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + latest-version@7.0.0: + dependencies: + package-json: 8.1.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lines-and-columns@1.2.4: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + lodash.truncate@4.4.2: {} + + lodash@4.17.21: {} + + lowercase-keys@3.0.0: {} + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + merkletreejs@0.3.11: + dependencies: + bignumber.js: 9.1.2 + buffer-reverse: 1.0.1 + crypto-js: 4.2.0 + treeify: 1.1.0 + web3-utils: 1.10.4 + + micro-ftch@0.3.1: {} + + mimic-response@3.1.0: {} + + mimic-response@4.0.0: {} + + minimalistic-assert@1.0.1: {} + + minimalistic-crypto-utils@1.0.1: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + ms@2.1.2: {} + + natural-compare@1.4.0: {} + + node-addon-api@2.0.2: {} + + node-gyp-build@4.8.0: {} + + normalize-url@8.0.1: {} + + number-to-bn@1.7.0: + dependencies: + bn.js: 4.11.6 + strip-hex-prefix: 1.0.0 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + optionator@0.9.3: + dependencies: + "@aashutoshrathi/word-wrap": 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + + p-cancelable@3.0.0: {} + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + package-json@8.1.1: + dependencies: + got: 12.6.1 + registry-auth-token: 5.0.2 + registry-url: 6.0.1 + semver: 7.6.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + "@babel/code-frame": 7.24.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-type@4.0.0: {} + + picocolors@1.0.0: {} + + pluralize@8.0.0: {} + + prelude-ls@1.2.1: {} + + prettier-plugin-solidity@1.3.1(prettier@3.2.5): + dependencies: + "@solidity-parser/parser": 0.17.0 + prettier: 3.2.5 + semver: 7.6.0 + solidity-comments-extractor: 0.0.8 + + prettier@2.8.8: + optional: true + + prettier@3.2.5: {} + + proto-list@1.2.4: {} + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + quick-lru@5.1.1: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + registry-auth-token@5.0.2: + dependencies: + "@pnpm/npm-conf": 2.2.2 + + registry-url@6.0.1: + dependencies: + rc: 1.2.8 + + require-from-string@2.0.2: {} + + resolve-alpn@1.2.1: {} + + resolve-from@4.0.0: {} + + responselike@3.0.0: + dependencies: + lowercase-keys: 3.0.0 + + reusify@1.0.4: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-buffer@5.2.1: {} + + semver@7.6.0: + dependencies: + lru-cache: 6.0.0 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + slice-ansi@4.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + + solhint@4.5.4: + dependencies: + "@solidity-parser/parser": 0.18.0 + ajv: 6.12.6 + antlr4: 4.13.1-patch-1 + ast-parents: 0.0.1 + chalk: 4.1.2 + commander: 10.0.1 + cosmiconfig: 8.3.6 + fast-diff: 1.3.0 + glob: 8.1.0 + ignore: 5.3.1 + js-yaml: 4.1.0 + latest-version: 7.0.0 + lodash: 4.17.21 + pluralize: 8.0.0 + semver: 7.6.0 + strip-ansi: 6.0.1 + table: 6.8.2 + text-table: 0.2.0 + optionalDependencies: + prettier: 2.8.8 + transitivePeerDependencies: + - typescript + + solidity-comments-extractor@0.0.8: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-hex-prefix@1.0.0: + dependencies: + is-hex-prefixed: 1.0.0 + + strip-json-comments@2.0.1: {} + + strip-json-comments@3.1.1: {} + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + table@6.8.2: + dependencies: + ajv: 8.12.0 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + text-table@0.2.0: {} + + treeify@1.1.0: {} + + tslib@2.4.0: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + utf8@3.0.0: {} + + util-deprecate@1.0.2: {} + + web3-utils@1.10.4: + dependencies: + "@ethereumjs/util": 8.1.0 + bn.js: 5.2.1 + ethereum-bloom-filters: 1.1.0 + ethereum-cryptography: 2.1.3 + ethjs-unit: 0.1.6 + number-to-bn: 1.7.0 + randombytes: 2.1.0 + utf8: 3.0.0 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wrappy@1.0.2: {} + + ws@8.5.0: {} + + yallist@4.0.0: {} + + yocto-queue@0.1.0: {} From 72231f20e00f940725369cfdbc57bad9cf75e176 Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Tue, 16 Apr 2024 21:37:32 +0200 Subject: [PATCH 3/5] =?UTF-8?q?=F0=9F=91=B7=20Bump=20Python=20to=20Version?= =?UTF-8?q?=20`3.12`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Pascal Marco Caversaccio --- .github/workflows/publish-pypi.yml | 2 +- .github/workflows/publish-test-pypi.yml | 2 +- .github/workflows/test-contracts.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/publish-pypi.yml b/.github/workflows/publish-pypi.yml index c1e3ff89..6e72627f 100644 --- a/.github/workflows/publish-pypi.yml +++ b/.github/workflows/publish-pypi.yml @@ -20,7 +20,7 @@ jobs: architecture: - x64 python_version: - - 3.11 + - 3.12 steps: - name: Checkout diff --git a/.github/workflows/publish-test-pypi.yml b/.github/workflows/publish-test-pypi.yml index 5718e4ca..dc78923e 100644 --- a/.github/workflows/publish-test-pypi.yml +++ b/.github/workflows/publish-test-pypi.yml @@ -17,7 +17,7 @@ jobs: architecture: - x64 python_version: - - 3.11 + - 3.12 steps: - name: Checkout diff --git a/.github/workflows/test-contracts.yml b/.github/workflows/test-contracts.yml index a1793d0c..f71f0087 100644 --- a/.github/workflows/test-contracts.yml +++ b/.github/workflows/test-contracts.yml @@ -16,7 +16,7 @@ jobs: architecture: - x64 python_version: - - 3.11 + - 3.12 node_version: - 20 From a37da2e7d2610b6827a8946b1837c5b511af6066 Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Wed, 17 Apr 2024 17:52:21 +0200 Subject: [PATCH 4/5] =?UTF-8?q?=F0=9F=94=81=20Fix=20Dependency=20Shit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Pascal Marco Caversaccio --- pnpm-lock.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ad1b79d1..4b8a41be 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,8 +20,6 @@ importers: specifier: ^9.1.0 version: 9.1.0(eslint@9.0.0) ethers: - specifier: ^6.11.1 - version: 6.11.1 specifier: ^6.12.0 version: 6.12.0 keccak256: From 84ae9ca708cba9dda42d234178f46fd5b417449d Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Thu, 18 Apr 2024 10:58:27 +0200 Subject: [PATCH 5/5] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20=20Amend=20comments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Pascal Marco Caversaccio --- .gas-snapshot | 228 ++++++++++++------------ src/snekmate/tokens/ERC721.vy | 16 +- src/snekmate/tokens/mocks/ERC721Mock.vy | 21 ++- 3 files changed, 142 insertions(+), 123 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index 8f0e9185..f6a7458d 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -61,8 +61,8 @@ BatchDistributorTest:testDistributeTokenMultipleAddressesSuccess() (gas: 644741) BatchDistributorTest:testDistributeTokenOneAddressSuccess() (gas: 606328) BatchDistributorTest:testDistributeTokenRevertWithInsufficientAllowance() (gas: 601641) BatchDistributorTest:testDistributeTokenRevertWithInsufficientBalance() (gas: 602294) -BatchDistributorTest:testFuzzDistributeEtherMultipleAddressesSuccess(((address,uint256)[]),uint256) (runs: 256, μ: 1791156, ~: 1662856) -BatchDistributorTest:testFuzzDistributeTokenMultipleAddressesSuccess(((address,uint256)[]),address,uint256) (runs: 256, μ: 1348115, ~: 1322416) +BatchDistributorTest:testFuzzDistributeEtherMultipleAddressesSuccess(((address,uint256)[]),uint256) (runs: 256, μ: 1778268, ~: 1662496) +BatchDistributorTest:testFuzzDistributeTokenMultipleAddressesSuccess(((address,uint256)[]),address,uint256) (runs: 256, μ: 1348198, ~: 1322416) Create2AddressTest:testComputeAddress() (gas: 550587) Create2AddressTest:testComputeAddressSelf() (gas: 559319) Create2AddressTest:testFuzzComputeAddress(bytes32,address) (runs: 256, μ: 551182, ~: 551182) @@ -88,26 +88,26 @@ CreateAddressTest:testComputeAddressSelfNonceUint56() (gas: 539981) CreateAddressTest:testComputeAddressSelfNonceUint64() (gas: 540089) CreateAddressTest:testComputeAddressSelfNonceUint8() (gas: 539708) CreateAddressTest:testComputeAddressSelfRevertTooHighNonce() (gas: 9190) -CreateAddressTest:testFuzzComputeAddressNonce0x7f(uint64,address) (runs: 256, μ: 538261, ~: 538413) -CreateAddressTest:testFuzzComputeAddressNonceUint16(uint64,address) (runs: 256, μ: 537738, ~: 537867) -CreateAddressTest:testFuzzComputeAddressNonceUint24(uint64,address) (runs: 256, μ: 537889, ~: 537993) -CreateAddressTest:testFuzzComputeAddressNonceUint32(uint64,address) (runs: 256, μ: 537869, ~: 538000) -CreateAddressTest:testFuzzComputeAddressNonceUint40(uint64,address) (runs: 256, μ: 537996, ~: 538092) +CreateAddressTest:testFuzzComputeAddressNonce0x7f(uint64,address) (runs: 256, μ: 538273, ~: 538413) +CreateAddressTest:testFuzzComputeAddressNonceUint16(uint64,address) (runs: 256, μ: 537754, ~: 538016) +CreateAddressTest:testFuzzComputeAddressNonceUint24(uint64,address) (runs: 256, μ: 537883, ~: 537993) +CreateAddressTest:testFuzzComputeAddressNonceUint32(uint64,address) (runs: 256, μ: 537852, ~: 538000) +CreateAddressTest:testFuzzComputeAddressNonceUint40(uint64,address) (runs: 256, μ: 537993, ~: 538092) CreateAddressTest:testFuzzComputeAddressNonceUint48(uint64,address) (runs: 256, μ: 537974, ~: 538076) -CreateAddressTest:testFuzzComputeAddressNonceUint56(uint64,address) (runs: 256, μ: 537994, ~: 538101) +CreateAddressTest:testFuzzComputeAddressNonceUint56(uint64,address) (runs: 256, μ: 537995, ~: 538101) CreateAddressTest:testFuzzComputeAddressNonceUint64(uint64,address) (runs: 256, μ: 537994, ~: 538196) -CreateAddressTest:testFuzzComputeAddressNonceUint8(uint64,address) (runs: 256, μ: 537771, ~: 537867) +CreateAddressTest:testFuzzComputeAddressNonceUint8(uint64,address) (runs: 256, μ: 537767, ~: 537867) CreateAddressTest:testFuzzComputeAddressRevertTooHighNonce(uint256,address) (runs: 256, μ: 13167, ~: 13139) -CreateAddressTest:testFuzzComputeAddressSelfNonce0x7f(uint64) (runs: 256, μ: 544563, ~: 544661) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint16(uint64) (runs: 256, μ: 543794, ~: 543939) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint24(uint64) (runs: 256, μ: 544048, ~: 544140) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint32(uint64) (runs: 256, μ: 544117, ~: 544236) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint40(uint64) (runs: 256, μ: 544133, ~: 544220) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint48(uint64) (runs: 256, μ: 544176, ~: 544294) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint56(uint64) (runs: 256, μ: 544271, ~: 544360) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint64(uint64) (runs: 256, μ: 544315, ~: 544481) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint8(uint64) (runs: 256, μ: 543861, ~: 543931) -CreateAddressTest:testFuzzComputeAddressSelfRevertTooHighNonce(uint256) (runs: 256, μ: 13056, ~: 13014) +CreateAddressTest:testFuzzComputeAddressSelfNonce0x7f(uint64) (runs: 256, μ: 544553, ~: 544661) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint16(uint64) (runs: 256, μ: 543779, ~: 543686) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint24(uint64) (runs: 256, μ: 544046, ~: 544140) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint32(uint64) (runs: 256, μ: 544123, ~: 544236) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint40(uint64) (runs: 256, μ: 544136, ~: 544220) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint48(uint64) (runs: 256, μ: 544182, ~: 544294) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint56(uint64) (runs: 256, μ: 544272, ~: 544360) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint64(uint64) (runs: 256, μ: 544310, ~: 544481) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint8(uint64) (runs: 256, μ: 543858, ~: 543931) +CreateAddressTest:testFuzzComputeAddressSelfRevertTooHighNonce(uint256) (runs: 256, μ: 13048, ~: 13014) ECDSATest:testFuzzRecoverWithInvalidSignature(bytes,string) (runs: 256, μ: 15647, ~: 15652) ECDSATest:testFuzzRecoverWithTooLongSignature(bytes,string) (runs: 256, μ: 13917, ~: 13920) ECDSATest:testFuzzRecoverWithValidSignature(string,string) (runs: 256, μ: 22639, ~: 22700) @@ -156,37 +156,37 @@ ERC1155Test:testExistsAfterBatchMint() (gas: 143983) ERC1155Test:testExistsAfterSingleBurn() (gas: 138552) ERC1155Test:testExistsAfterSingleMint() (gas: 119763) ERC1155Test:testExistsBeforeMint() (gas: 10481) -ERC1155Test:testFuzzBurnBatchSuccess(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 133612, ~: 133613) +ERC1155Test:testFuzzBurnBatchSuccess(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 133602, ~: 133605) ERC1155Test:testFuzzBurnSuccess(address,address,uint256) (runs: 256, μ: 141351, ~: 141361) ERC1155Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 14072, ~: 14072) ERC1155Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48765, ~: 48749) ERC1155Test:testFuzzSafeBatchTransferFromByApprovedOperator(address,address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 227531, ~: 227503) ERC1155Test:testFuzzSafeBatchTransferFromEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 191856, ~: 191831) ERC1155Test:testFuzzSafeBatchTransferFromNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 565691, ~: 565691) -ERC1155Test:testFuzzSafeBatchTransferFromWithData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 566248, ~: 565848) -ERC1155Test:testFuzzSafeMintBatchEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 153753, ~: 153765) +ERC1155Test:testFuzzSafeBatchTransferFromWithData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 566273, ~: 565848) +ERC1155Test:testFuzzSafeMintBatchEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 153772, ~: 153765) ERC1155Test:testFuzzSafeMintBatchNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 521494, ~: 521494) ERC1155Test:testFuzzSafeMintBatchNonMinter(address) (runs: 256, μ: 41062, ~: 41062) -ERC1155Test:testFuzzSafeMintBatchWithData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 521826, ~: 521609) +ERC1155Test:testFuzzSafeMintBatchWithData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 521819, ~: 521609) ERC1155Test:testFuzzSafeMintEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 152854, ~: 152845) ERC1155Test:testFuzzSafeMintNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 521696, ~: 521706) ERC1155Test:testFuzzSafeMintNonMinter(address) (runs: 256, μ: 33388, ~: 33388) ERC1155Test:testFuzzSafeMintWithData(address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 523025, ~: 522574) -ERC1155Test:testFuzzSafeTransferFromByApprovedOperator(address,address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 206616, ~: 206578) -ERC1155Test:testFuzzSafeTransferFromEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 171026, ~: 170993) -ERC1155Test:testFuzzSafeTransferFromNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 610344, ~: 610344) +ERC1155Test:testFuzzSafeTransferFromByApprovedOperator(address,address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 206605, ~: 206578) +ERC1155Test:testFuzzSafeTransferFromEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 171036, ~: 170993) +ERC1155Test:testFuzzSafeTransferFromNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 610334, ~: 610344) ERC1155Test:testFuzzSafeTransferFromWithData(address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 612409, ~: 611606) ERC1155Test:testFuzzSetApprovalForAllRevoke(address,address) (runs: 256, μ: 31998, ~: 31969) ERC1155Test:testFuzzSetApprovalForAllSuccess(address,address) (runs: 256, μ: 45362, ~: 45362) ERC1155Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 15868, ~: 15867) ERC1155Test:testFuzzSetMinterSuccess(string) (runs: 256, μ: 33774, ~: 33774) ERC1155Test:testFuzzSetUriNonMinter(address) (runs: 256, μ: 14551, ~: 14551) -ERC1155Test:testFuzzTotalSupplyAfterBatchBurn(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 127038, ~: 127038) -ERC1155Test:testFuzzTotalSupplyAfterBatchMint(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 141754, ~: 141763) -ERC1155Test:testFuzzTotalSupplyAfterSingleBurn(address,uint256,bytes) (runs: 256, μ: 138493, ~: 138464) -ERC1155Test:testFuzzTotalSupplyAfterSingleMint(uint256,uint256,bytes) (runs: 256, μ: 90208, ~: 60719) +ERC1155Test:testFuzzTotalSupplyAfterBatchBurn(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 127027, ~: 127031) +ERC1155Test:testFuzzTotalSupplyAfterBatchMint(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 141758, ~: 141697) +ERC1155Test:testFuzzTotalSupplyAfterSingleBurn(address,uint256,bytes) (runs: 256, μ: 138484, ~: 138464) +ERC1155Test:testFuzzTotalSupplyAfterSingleMint(uint256,uint256,bytes) (runs: 256, μ: 92307, ~: 120257) ERC1155Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14181, ~: 14181) -ERC1155Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 75753, ~: 75725) +ERC1155Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 75684, ~: 75725) ERC1155Test:testHasOwner() (gas: 12615) ERC1155Test:testInitialSetup() (gas: 3013335) ERC1155Test:testRenounceOwnershipNonOwner() (gas: 11013) @@ -259,8 +259,8 @@ ERC1155Test:testUriBaseAndTokenUriNotSet() (gas: 2969060) ERC1155Test:testUriBaseAndTokenUriSet() (gas: 65810) ERC1155Test:testUriNoBaseURI() (gas: 3019122) ERC1155Test:testUriNoTokenUri() (gas: 20507) -ERC20Invariants:statefulFuzzOwner() (runs: 256, calls: 3840, reverts: 3387) -ERC20Invariants:statefulFuzzTotalSupply() (runs: 256, calls: 3840, reverts: 3387) +ERC20Invariants:statefulFuzzOwner() (runs: 256, calls: 3840, reverts: 3388) +ERC20Invariants:statefulFuzzTotalSupply() (runs: 256, calls: 3840, reverts: 3388) ERC20Test:testApproveExceedingBalanceCase1() (gas: 40983) ERC20Test:testApproveExceedingBalanceCase2() (gas: 48004) ERC20Test:testApproveFromZeroAddress() (gas: 13438) @@ -283,26 +283,26 @@ ERC20Test:testCachedDomainSeparator() (gas: 10601) ERC20Test:testDomainSeparator() (gas: 11831) ERC20Test:testEIP712Domain() (gas: 18779) ERC20Test:testFuzzApproveSuccess(address,uint256) (runs: 256, μ: 40347, ~: 41203) -ERC20Test:testFuzzBurnFromInsufficientAllowance(address,uint256,uint8) (runs: 256, μ: 207190, ~: 207444) -ERC20Test:testFuzzBurnFromSuccess(address,uint256) (runs: 256, μ: 340783, ~: 341664) +ERC20Test:testFuzzBurnFromInsufficientAllowance(address,uint256,uint8) (runs: 256, μ: 207257, ~: 207444) +ERC20Test:testFuzzBurnFromSuccess(address,uint256) (runs: 256, μ: 340785, ~: 341664) ERC20Test:testFuzzBurnInvalidAmount(address,uint256) (runs: 256, μ: 16673, ~: 16673) -ERC20Test:testFuzzBurnSuccessCase(uint256) (runs: 256, μ: 316015, ~: 315819) +ERC20Test:testFuzzBurnSuccessCase(uint256) (runs: 256, μ: 316011, ~: 315819) ERC20Test:testFuzzDomainSeparator(uint8) (runs: 256, μ: 12049, ~: 12067) ERC20Test:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 22241, ~: 22244) ERC20Test:testFuzzMintNonMinter(string,uint256) (runs: 256, μ: 13258, ~: 13186) -ERC20Test:testFuzzMintSuccess(string,uint256) (runs: 256, μ: 54987, ~: 55954) +ERC20Test:testFuzzMintSuccess(string,uint256) (runs: 256, μ: 54804, ~: 55954) ERC20Test:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 45420, ~: 45418) ERC20Test:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 71138, ~: 71134) ERC20Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 14051, ~: 14051) ERC20Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48675, ~: 48660) ERC20Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 15873, ~: 15872) ERC20Test:testFuzzSetMinterSuccess(string) (runs: 256, μ: 33792, ~: 33792) -ERC20Test:testFuzzTransferFromInsufficientAllowance(address,address,uint256,uint8) (runs: 256, μ: 205539, ~: 205954) -ERC20Test:testFuzzTransferFromSuccess(address,address,uint256) (runs: 256, μ: 234651, ~: 235772) +ERC20Test:testFuzzTransferFromInsufficientAllowance(address,address,uint256,uint8) (runs: 256, μ: 205605, ~: 205954) +ERC20Test:testFuzzTransferFromSuccess(address,address,uint256) (runs: 256, μ: 234642, ~: 235478) ERC20Test:testFuzzTransferInvalidAmount(address,address,uint256) (runs: 256, μ: 17068, ~: 17068) ERC20Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14163, ~: 14163) -ERC20Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 75697, ~: 75672) -ERC20Test:testFuzzTransferSuccess(address,uint256) (runs: 256, μ: 206185, ~: 206871) +ERC20Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 75698, ~: 75672) +ERC20Test:testFuzzTransferSuccess(address,uint256) (runs: 256, μ: 206187, ~: 206871) ERC20Test:testHasOwner() (gas: 12659) ERC20Test:testInitialSetup() (gas: 1596955) ERC20Test:testMintNonMinter() (gas: 12745) @@ -342,18 +342,18 @@ ERC2981Test:testDeleteDefaultRoyaltyNonOwner() (gas: 10656) ERC2981Test:testFuzzDeleteDefaultRoyaltyNonOwner(address) (runs: 256, μ: 13390, ~: 13390) ERC2981Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 14045, ~: 14045) ERC2981Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 25274, ~: 25274) -ERC2981Test:testFuzzResetTokenRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 95519, ~: 97992) +ERC2981Test:testFuzzResetTokenRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 95521, ~: 97989) ERC2981Test:testFuzzResetTokenRoyaltyNonOwner(address) (runs: 256, μ: 13342, ~: 13342) -ERC2981Test:testFuzzRoyaltyInfoDefaultRoyalty(address,uint256,uint256,uint96,uint256) (runs: 256, μ: 80008, ~: 81442) -ERC2981Test:testFuzzRoyaltyInfoDeleteDefaultRoyalty(address,uint256,uint256,uint96,uint256) (runs: 256, μ: 65167, ~: 66161) -ERC2981Test:testFuzzRoyaltyInfoSetTokenRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 119682, ~: 122933) -ERC2981Test:testFuzzRoyaltyInfoSetTokenRoyaltyUpdate(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 165333, ~: 169643) -ERC2981Test:testFuzzRoyaltyInfoUpdateDefaultRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 87660, ~: 89169) +ERC2981Test:testFuzzRoyaltyInfoDefaultRoyalty(address,uint256,uint256,uint96,uint256) (runs: 256, μ: 80080, ~: 81442) +ERC2981Test:testFuzzRoyaltyInfoDeleteDefaultRoyalty(address,uint256,uint256,uint96,uint256) (runs: 256, μ: 65095, ~: 66150) +ERC2981Test:testFuzzRoyaltyInfoSetTokenRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 119692, ~: 122933) +ERC2981Test:testFuzzRoyaltyInfoSetTokenRoyaltyUpdate(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 165327, ~: 169643) +ERC2981Test:testFuzzRoyaltyInfoUpdateDefaultRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 87496, ~: 89169) ERC2981Test:testFuzzSetDefaultRoyaltyNonOwner(address) (runs: 256, μ: 15647, ~: 15647) -ERC2981Test:testFuzzSetDefaultRoyaltyTooHighFeeNumerator(uint96) (runs: 256, μ: 21565, ~: 21379) +ERC2981Test:testFuzzSetDefaultRoyaltyTooHighFeeNumerator(uint96) (runs: 256, μ: 21564, ~: 21379) ERC2981Test:testFuzzSetTokenRoyaltyInvalidReceiver(address) (runs: 256, μ: 18724, ~: 18724) ERC2981Test:testFuzzSetTokenRoyaltyNonOwner(address) (runs: 256, μ: 15664, ~: 15664) -ERC2981Test:testFuzzSetTokenRoyaltyTooHighFeeNumerator(uint96) (runs: 256, μ: 21583, ~: 21397) +ERC2981Test:testFuzzSetTokenRoyaltyTooHighFeeNumerator(uint96) (runs: 256, μ: 21582, ~: 21397) ERC2981Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14112, ~: 14112) ERC2981Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 30265, ~: 30265) ERC2981Test:testHasOwner() (gas: 12549) @@ -393,10 +393,10 @@ ERC4626VaultTest:testEmptyVaultDeposit() (gas: 567916) ERC4626VaultTest:testEmptyVaultMint() (gas: 568733) ERC4626VaultTest:testEmptyVaultRedeem() (gas: 203315) ERC4626VaultTest:testEmptyVaultwithdraw() (gas: 216172) -ERC4626VaultTest:testFail_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 556097, ~: 558607) -ERC4626VaultTest:testFail_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 557960, ~: 560311) +ERC4626VaultTest:testFail_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 555900, ~: 558607) +ERC4626VaultTest:testFail_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 557745, ~: 560311) ERC4626VaultTest:testFuzzDomainSeparator(uint8) (runs: 256, μ: 11946, ~: 11966) -ERC4626VaultTest:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 22209, ~: 22213) +ERC4626VaultTest:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 22210, ~: 22213) ERC4626VaultTest:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 45306, ~: 45304) ERC4626VaultTest:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 70966, ~: 70962) ERC4626VaultTest:testInitialSetup() (gas: 6097320) @@ -417,30 +417,30 @@ ERC4626VaultTest:testVaultInteractionsForSomeoneElse() (gas: 224733) ERC4626VaultTest:testWithdrawInsufficientAllowance() (gas: 122657) ERC4626VaultTest:testWithdrawInsufficientAssets() (gas: 118047) ERC4626VaultTest:testWithdrawWithNoAssets() (gas: 21600) -ERC4626VaultTest:test_RT_deposit_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472029, ~: 475943) -ERC4626VaultTest:test_RT_deposit_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474067, ~: 477732) -ERC4626VaultTest:test_RT_mint_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472891, ~: 476433) -ERC4626VaultTest:test_RT_mint_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474566, ~: 478464) -ERC4626VaultTest:test_RT_redeem_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473133, ~: 476769) -ERC4626VaultTest:test_RT_redeem_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473107, ~: 476903) -ERC4626VaultTest:test_RT_withdraw_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474784, ~: 478307) -ERC4626VaultTest:test_RT_withdraw_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 475159, ~: 478656) -ERC4626VaultTest:test_asset((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 422840, ~: 427865) -ERC4626VaultTest:test_convertToAssets((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 430395, ~: 433128) -ERC4626VaultTest:test_convertToShares((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 429450, ~: 432935) -ERC4626VaultTest:test_deposit((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 471532, ~: 473847) -ERC4626VaultTest:test_maxDeposit((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 422835, ~: 427860) -ERC4626VaultTest:test_maxMint((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 422860, ~: 427884) -ERC4626VaultTest:test_maxRedeem((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 422975, ~: 428000) -ERC4626VaultTest:test_maxWithdraw((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424521, ~: 429623) -ERC4626VaultTest:test_mint((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 471585, ~: 474194) -ERC4626VaultTest:test_previewDeposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 464973, ~: 468449) -ERC4626VaultTest:test_previewMint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 465730, ~: 469109) -ERC4626VaultTest:test_previewRedeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 467941, ~: 470620) -ERC4626VaultTest:test_previewWithdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 470697, ~: 472281) -ERC4626VaultTest:test_redeem((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 474885, ~: 477054) -ERC4626VaultTest:test_totalAssets((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423426, ~: 428448) -ERC4626VaultTest:test_withdraw((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 476856, ~: 478504) +ERC4626VaultTest:test_RT_deposit_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472478, ~: 475862) +ERC4626VaultTest:test_RT_deposit_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474652, ~: 477599) +ERC4626VaultTest:test_RT_mint_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472876, ~: 476434) +ERC4626VaultTest:test_RT_mint_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474647, ~: 478206) +ERC4626VaultTest:test_RT_redeem_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473148, ~: 476848) +ERC4626VaultTest:test_RT_redeem_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473292, ~: 476927) +ERC4626VaultTest:test_RT_withdraw_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474687, ~: 478325) +ERC4626VaultTest:test_RT_withdraw_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474672, ~: 478468) +ERC4626VaultTest:test_asset((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423865, ~: 427792) +ERC4626VaultTest:test_convertToAssets((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 430106, ~: 432865) +ERC4626VaultTest:test_convertToShares((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 429300, ~: 432811) +ERC4626VaultTest:test_deposit((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 471569, ~: 473905) +ERC4626VaultTest:test_maxDeposit((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423860, ~: 427787) +ERC4626VaultTest:test_maxMint((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423885, ~: 427812) +ERC4626VaultTest:test_maxRedeem((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424000, ~: 427927) +ERC4626VaultTest:test_maxWithdraw((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 425521, ~: 429301) +ERC4626VaultTest:test_mint((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 472068, ~: 474014) +ERC4626VaultTest:test_previewDeposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 464836, ~: 468404) +ERC4626VaultTest:test_previewMint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 465693, ~: 469096) +ERC4626VaultTest:test_previewRedeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 467799, ~: 470691) +ERC4626VaultTest:test_previewWithdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 470776, ~: 472313) +ERC4626VaultTest:test_redeem((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 475326, ~: 476948) +ERC4626VaultTest:test_totalAssets((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424450, ~: 428376) +ERC4626VaultTest:test_withdraw((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 476862, ~: 478336) ERC721Invariants:statefulFuzzOwner() (runs: 256, calls: 3840, reverts: 3439) ERC721Invariants:statefulFuzzTotalSupply() (runs: 256, calls: 3840, reverts: 3439) ERC721Test:testApproveClearingApprovalWithNoPriorApproval() (gas: 177703) @@ -462,44 +462,44 @@ ERC721Test:testBurnSuccessViaApproveAndSetApprovalForAll() (gas: 372708) ERC721Test:testCachedDomainSeparator() (gas: 10601) ERC721Test:testDomainSeparator() (gas: 11832) ERC721Test:testEIP712Domain() (gas: 18900) -ERC721Test:testFuzzApproveClearingApprovalWithNoPriorApproval(address,address) (runs: 256, μ: 197182, ~: 197202) -ERC721Test:testFuzzApproveClearingApprovalWithPriorApproval(address,address) (runs: 256, μ: 184841, ~: 184861) +ERC721Test:testFuzzApproveClearingApprovalWithNoPriorApproval(address,address) (runs: 256, μ: 197202, ~: 197202) +ERC721Test:testFuzzApproveClearingApprovalWithPriorApproval(address,address) (runs: 256, μ: 184861, ~: 184861) ERC721Test:testFuzzApproveFromNonOwner(address) (runs: 256, μ: 173144, ~: 173144) ERC721Test:testFuzzApproveFromOperatorAddress(address,address,address) (runs: 256, μ: 223352, ~: 223352) -ERC721Test:testFuzzApproveWithNoPriorApproval(address,address) (runs: 256, μ: 197137, ~: 197157) -ERC721Test:testFuzzApproveWithPriorApproval(address,address) (runs: 256, μ: 204653, ~: 204673) +ERC721Test:testFuzzApproveWithNoPriorApproval(address,address) (runs: 256, μ: 197157, ~: 197157) +ERC721Test:testFuzzApproveWithPriorApproval(address,address) (runs: 256, μ: 204673, ~: 204673) ERC721Test:testFuzzBurnSuccess(address) (runs: 256, μ: 306118, ~: 306104) -ERC721Test:testFuzzDomainSeparator(uint8) (runs: 256, μ: 12026, ~: 12045) +ERC721Test:testFuzzDomainSeparator(uint8) (runs: 256, μ: 12023, ~: 12045) ERC721Test:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 22358, ~: 22360) -ERC721Test:testFuzzGetApprovedApprovedTokenId(address,address) (runs: 256, μ: 194768, ~: 194788) -ERC721Test:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 201782, ~: 201780) -ERC721Test:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 227906, ~: 227902) +ERC721Test:testFuzzGetApprovedApprovedTokenId(address,address) (runs: 256, μ: 194788, ~: 194788) +ERC721Test:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 201770, ~: 201768) +ERC721Test:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 227891, ~: 227887) ERC721Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 14033, ~: 14033) ERC721Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48688, ~: 48672) ERC721Test:testFuzzSafeMintNonMinter(address) (runs: 256, μ: 16008, ~: 16008) -ERC721Test:testFuzzSafeMintSuccess(address[]) (runs: 256, μ: 21518425, ~: 22059525) -ERC721Test:testFuzzSafeTransferFromWithData(address,address,address,bytes) (runs: 256, μ: 1461589, ~: 1462590) +ERC721Test:testFuzzSafeMintSuccess(address[]) (runs: 256, μ: 21643856, ~: 21885140) +ERC721Test:testFuzzSafeTransferFromWithData(address,address,address,bytes) (runs: 256, μ: 1461591, ~: 1462589) ERC721Test:testFuzzSetApprovalForAllSuccess(address,address) (runs: 256, μ: 189686, ~: 189686) ERC721Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 15918, ~: 15917) ERC721Test:testFuzzSetMinterSuccess(string) (runs: 256, μ: 33847, ~: 33847) -ERC721Test:testFuzzTokenByIndex(address,string[]) (runs: 256, μ: 22543974, ~: 23258671) -ERC721Test:testFuzzTotalSupply(address,string[]) (runs: 256, μ: 22360480, ~: 23068070) -ERC721Test:testFuzzTransferFrom(address,address,address) (runs: 256, μ: 569557, ~: 569538) +ERC721Test:testFuzzTokenByIndex(address,string[]) (runs: 256, μ: 22774423, ~: 23824544) +ERC721Test:testFuzzTotalSupply(address,string[]) (runs: 256, μ: 22589067, ~: 23630385) +ERC721Test:testFuzzTransferFrom(address,address,address) (runs: 256, μ: 569558, ~: 569538) ERC721Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14185, ~: 14185) ERC721Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 75742, ~: 75715) ERC721Test:testGetApprovedApprovedTokenId() (gas: 194690) ERC721Test:testGetApprovedInvalidTokenId() (gas: 11191) ERC721Test:testGetApprovedNotApprovedTokenId() (gas: 170916) ERC721Test:testHasOwner() (gas: 12585) -ERC721Test:testInitialSetup() (gas: 2596898) +ERC721Test:testInitialSetup() (gas: 2595298) ERC721Test:testOwnerOf() (gas: 166557) ERC721Test:testOwnerOfInvalidTokenId() (gas: 11146) -ERC721Test:testPermitBadChainId() (gas: 200262) -ERC721Test:testPermitBadNonce() (gas: 197445) +ERC721Test:testPermitBadChainId() (gas: 200250) +ERC721Test:testPermitBadNonce() (gas: 197433) ERC721Test:testPermitExpiredDeadline() (gas: 170800) -ERC721Test:testPermitOtherSignature() (gas: 198322) -ERC721Test:testPermitReplaySignature() (gas: 230684) -ERC721Test:testPermitSuccess() (gas: 226938) +ERC721Test:testPermitOtherSignature() (gas: 198310) +ERC721Test:testPermitReplaySignature() (gas: 230657) +ERC721Test:testPermitSuccess() (gas: 226923) ERC721Test:testRenounceOwnershipNonOwner() (gas: 11039) ERC721Test:testRenounceOwnershipSuccess() (gas: 22899) ERC721Test:testSafeMintNonMinter() (gas: 13339) @@ -539,7 +539,7 @@ ERC721Test:testTokenOfOwnerByIndexReverts() (gas: 548588) ERC721Test:testTokenURIAfterBurning() (gas: 139079) ERC721Test:testTokenURIDefault() (gas: 169580) ERC721Test:testTokenURIInvalidTokenId() (gas: 13266) -ERC721Test:testTokenURINoBaseURI() (gas: 2715928) +ERC721Test:testTokenURINoBaseURI() (gas: 2714328) ERC721Test:testTokenURINoTokenUri() (gas: 126774) ERC721Test:testTotalSupply() (gas: 329177) ERC721Test:testTransferFrom() (gas: 579090) @@ -549,19 +549,19 @@ ERC721Test:testTransferOwnershipToZeroAddress() (gas: 15838) MathTest:testCbrtRoundDown() (gas: 51656) MathTest:testCbrtRoundUp() (gas: 52303) MathTest:testCeilDiv() (gas: 14821) -MathTest:testFuzzCbrt(uint256,bool) (runs: 256, μ: 22376, ~: 22165) +MathTest:testFuzzCbrt(uint256,bool) (runs: 256, μ: 22373, ~: 22159) MathTest:testFuzzCeilDiv(uint256,uint256) (runs: 256, μ: 9743, ~: 9770) MathTest:testFuzzInt256Average(int256,int256) (runs: 256, μ: 8625, ~: 8625) MathTest:testFuzzLog10(uint256,bool) (runs: 256, μ: 10206, ~: 10226) -MathTest:testFuzzLog2(uint256,bool) (runs: 256, μ: 9982, ~: 9994) -MathTest:testFuzzLog256(uint256,bool) (runs: 256, μ: 10091, ~: 10092) -MathTest:testFuzzMulDiv(uint256,uint256,uint256) (runs: 256, μ: 14325, ~: 14078) +MathTest:testFuzzLog2(uint256,bool) (runs: 256, μ: 9980, ~: 9994) +MathTest:testFuzzLog256(uint256,bool) (runs: 256, μ: 10087, ~: 10083) +MathTest:testFuzzMulDiv(uint256,uint256,uint256) (runs: 256, μ: 14334, ~: 14078) MathTest:testFuzzMulDivDomain(uint256,uint256,uint256) (runs: 256, μ: 10811, ~: 10890) MathTest:testFuzzSignum(int256) (runs: 256, μ: 8508, ~: 8500) MathTest:testFuzzUint256Average(uint256,uint256) (runs: 256, μ: 8688, ~: 8688) -MathTest:testFuzzWadCbrt(uint256) (runs: 256, μ: 22229, ~: 21896) -MathTest:testFuzzWadExp(int256) (runs: 256, μ: 15309, ~: 15410) -MathTest:testFuzzWadLn(int256) (runs: 256, μ: 16823, ~: 16609) +MathTest:testFuzzWadCbrt(uint256) (runs: 256, μ: 22228, ~: 21900) +MathTest:testFuzzWadExp(int256) (runs: 256, μ: 15306, ~: 15410) +MathTest:testFuzzWadLn(int256) (runs: 256, μ: 16827, ~: 16614) MathTest:testInt256Average() (gas: 18843) MathTest:testLog10RoundDown() (gas: 25912) MathTest:testLog10RoundUp() (gas: 27093) @@ -582,8 +582,8 @@ MathTest:testWadExp() (gas: 34590) MathTest:testWadExpOverflow() (gas: 11387) MathTest:testWadLn() (gas: 31609) MathTest:testWadLnNegativeValues() (gas: 11360) -MerkleProofVerificationTest:testFuzzMultiProofVerifySingleLeaf(bytes32[],uint256) (runs: 256, μ: 262136, ~: 258922) -MerkleProofVerificationTest:testFuzzVerify(bytes32[],uint256) (runs: 256, μ: 174897, ~: 171653) +MerkleProofVerificationTest:testFuzzMultiProofVerifySingleLeaf(bytes32[],uint256) (runs: 256, μ: 262131, ~: 259013) +MerkleProofVerificationTest:testFuzzVerify(bytes32[],uint256) (runs: 256, μ: 174892, ~: 171744) MerkleProofVerificationTest:testFuzzVerifyMultiProofMultipleLeaves(bool,bool,bool) (runs: 256, μ: 46263, ~: 46254) MerkleProofVerificationTest:testInvalidMerkleMultiProof() (gas: 49759) MerkleProofVerificationTest:testInvalidMerkleProof() (gas: 20183) @@ -616,7 +616,7 @@ Ownable2StepInvariants:statefulFuzzPendingOwner() (runs: 256, calls: 3840, rever Ownable2StepTest:testAcceptOwnershipNonPendingOwner() (gas: 47887) Ownable2StepTest:testAcceptOwnershipSuccess() (gas: 40849) Ownable2StepTest:testFuzzAcceptOwnershipNonPendingOwner(address) (runs: 256, μ: 47097, ~: 47097) -Ownable2StepTest:testFuzzAcceptOwnershipSuccess(address,address) (runs: 256, μ: 67724, ~: 67697) +Ownable2StepTest:testFuzzAcceptOwnershipSuccess(address,address) (runs: 256, μ: 67725, ~: 67697) Ownable2StepTest:testFuzzPendingOwnerResetAfterRenounceOwnership(address) (runs: 256, μ: 40372, ~: 40356) Ownable2StepTest:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13982, ~: 13982) Ownable2StepTest:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 45441, ~: 45425) @@ -659,13 +659,13 @@ SignatureCheckerTest:testFuzzEOAWithInvalidSignature(bytes,string) (runs: 256, SignatureCheckerTest:testFuzzEOAWithInvalidSigner(string,string) (runs: 256, μ: 21689, ~: 21750) SignatureCheckerTest:testFuzzEOAWithValidSignature(string,string) (runs: 256, μ: 21599, ~: 21660) SignatureCheckerTest:testInitialSetup() (gas: 8292) -TimelockControllerInvariants:statefulFuzzExecutedLessThanOrEqualToScheduled() (runs: 256, calls: 3840, reverts: 1237) -TimelockControllerInvariants:statefulFuzzExecutedProposalCancellation() (runs: 256, calls: 3840, reverts: 1220) -TimelockControllerInvariants:statefulFuzzExecutingCancelledProposal() (runs: 256, calls: 3840, reverts: 1225) -TimelockControllerInvariants:statefulFuzzExecutingNotReadyProposal() (runs: 256, calls: 3840, reverts: 1261) -TimelockControllerInvariants:statefulFuzzOnceProposalExecution() (runs: 256, calls: 3840, reverts: 1202) -TimelockControllerInvariants:statefulFuzzProposalsExecutedMatchCount() (runs: 256, calls: 3840, reverts: 1237) -TimelockControllerInvariants:statefulFuzzSumOfProposals() (runs: 256, calls: 3840, reverts: 1237) +TimelockControllerInvariants:statefulFuzzExecutedLessThanOrEqualToScheduled() (runs: 256, calls: 3840, reverts: 1185) +TimelockControllerInvariants:statefulFuzzExecutedProposalCancellation() (runs: 256, calls: 3840, reverts: 1231) +TimelockControllerInvariants:statefulFuzzExecutingCancelledProposal() (runs: 256, calls: 3840, reverts: 1192) +TimelockControllerInvariants:statefulFuzzExecutingNotReadyProposal() (runs: 256, calls: 3840, reverts: 1222) +TimelockControllerInvariants:statefulFuzzOnceProposalExecution() (runs: 256, calls: 3840, reverts: 1239) +TimelockControllerInvariants:statefulFuzzProposalsExecutedMatchCount() (runs: 256, calls: 3840, reverts: 1185) +TimelockControllerInvariants:statefulFuzzSumOfProposals() (runs: 256, calls: 3840, reverts: 1185) TimelockControllerTest:testAdminCannotBatchExecute() (gas: 750799) TimelockControllerTest:testAdminCannotBatchSchedule() (gas: 748585) TimelockControllerTest:testAdminCannotCancel() (gas: 13498) @@ -708,7 +708,7 @@ TimelockControllerTest:testFuzzHashOperation(address,uint256,bytes,bytes32,bytes TimelockControllerTest:testFuzzHashOperationBatch(address[],uint256[],bytes[],bytes32,bytes32) (runs: 256, μ: 1907207, ~: 1934989) TimelockControllerTest:testFuzzOperationValue(uint256) (runs: 256, μ: 113862, ~: 113980) TimelockControllerTest:testHandleERC1155() (gas: 41708452) -TimelockControllerTest:testHandleERC721() (gas: 7246027) +TimelockControllerTest:testHandleERC721() (gas: 7244427) TimelockControllerTest:testHashOperation() (gas: 13089) TimelockControllerTest:testHashOperationBatch() (gas: 1526310) TimelockControllerTest:testInitialSetup() (gas: 4451730) diff --git a/src/snekmate/tokens/ERC721.vy b/src/snekmate/tokens/ERC721.vy index f1f22733..2318b454 100644 --- a/src/snekmate/tokens/ERC721.vy +++ b/src/snekmate/tokens/ERC721.vy @@ -137,6 +137,9 @@ exports: ( # imported interface. The ERC-165 interface identifier # is defined as the XOR of all function selectors in the # interface. +# @notice If you are not using the full feature set of +# this contract, please ensure you exclude the unused +# ERC-165 interface identifiers in the main contract. _SUPPORTED_INTERFACES: constant(bytes4[6]) = [ 0x01FFC9A7, # The ERC-165 identifier for ERC-165. 0x80AC58CD, # The ERC-165 identifier for ERC-721. @@ -503,15 +506,13 @@ def tokenURI(token_id: uint256) -> String[512]: # If there is no base URI, return the token URI. if (base_uri_length == empty(uint256)): return token_uri - # If both are set, concatenate the base URI # and token URI. - if (len(token_uri) != empty(uint256)): + elif (len(token_uri) != empty(uint256)): return concat(_BASE_URI, token_uri) - # If there is no token URI but a base URI, # concatenate the base URI and token ID. - if (base_uri_length != empty(uint256)): + elif (base_uri_length != empty(uint256)): return concat(_BASE_URI, uint2str(token_id)) return "" @@ -536,7 +537,7 @@ def tokenByIndex(index: uint256) -> uint256: @notice Use along with `totalSupply` to enumerate all tokens. @param index The 32-byte counter (must be less - than `totalSupply()`). + than `totalSupply`). @return uint256 The 32-byte token ID at index `index`. """ @@ -615,7 +616,7 @@ def set_minter(minter: address, status: bool): """ ownable._check_owner() assert minter != empty(address), "AccessControl: minter is the zero address" - # We ensured in the previous step `self._check_owner()` + # We ensured in the previous step `ownable._check_owner` # that `msg.sender` is the `owner`. assert minter != msg.sender, "AccessControl: minter is owner address" self.is_minter[minter] = status @@ -644,7 +645,6 @@ def permit(spender: address, token_id: uint256, deadline: uint256, v: uint8, r: """ assert block.timestamp <= deadline, "ERC721Permit: expired deadline" - owner: address = self._owner_of(token_id) current_nonce: uint256 = self.nonces[token_id] self.nonces[token_id] = unsafe_add(current_nonce, 1) @@ -652,7 +652,7 @@ def permit(spender: address, token_id: uint256, deadline: uint256, v: uint8, r: hash: bytes32 = eip712_domain_separator._hash_typed_data_v4(struct_hash) signer: address = ecdsa._recover_vrs(hash, convert(v, uint256), convert(r, uint256), convert(s, uint256)) - assert signer == owner, "ERC721Permit: invalid signature" + assert signer == self._owner_of(token_id), "ERC721Permit: invalid signature" self._approve(spender, token_id) diff --git a/src/snekmate/tokens/mocks/ERC721Mock.vy b/src/snekmate/tokens/mocks/ERC721Mock.vy index eeb1c27c..fa923a0f 100644 --- a/src/snekmate/tokens/mocks/ERC721Mock.vy +++ b/src/snekmate/tokens/mocks/ERC721Mock.vy @@ -65,7 +65,7 @@ initializes: erc721[ownable := ow] # @dev We export (i.e. the runtime bytecode exposes these # functions externally, allowing them to be called using # the ABI encoding specification) all `external` functions -# from the `ERC20` module. The built-in dunder method +# from the `ERC721` module. The built-in dunder method # `__interface__` allows you to export all functions of a # module without specifying the individual functions (see # https://github.com/vyperlang/vyper/pull/3919). Please take @@ -77,6 +77,25 @@ initializes: erc721[ownable := ow] # required by the contract logic) `public` declared `constant`, # `immutable`, and state variables, for which Vyper automatically # generates an `external` getter function for the variable. +# Furthermore, if you are not using the full feature set of +# the {ERC721} contract, please ensure you exclude the unused +# ERC-165 interface identifiers in the main contract. One way +# to achieve this would be to not export the `supportsInterface` +# function from {ERC721} in the main contract and implement the +# following function in the main contract instead: +# ```vy +# _SUPPORTED_INTERFACES: constant(bytes4[...]) = [ +# erc721._SUPPORTED_INTERFACES[0], # The ERC-165 identifier for ERC-165. +# erc721._SUPPORTED_INTERFACES[1], # The ERC-165 identifier for ERC-721. +# ... # Any further ERC-165 identifiers you require. +# ] +# +# +# @external +# @view +# def supportsInterface(interface_id: bytes4) -> bool: +# return interface_id in _SUPPORTED_INTERFACES +# ``` exports: erc721.__interface__