From b19315f637e15a38cc85649f97b88de48b13b395 Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Tue, 21 Jan 2025 14:37:09 +0100 Subject: [PATCH 01/10] =?UTF-8?q?=F0=9F=92=A5=20Add=20a=20`pausable`=20Con?= =?UTF-8?q?tract=20Module?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Pascal Marco Caversaccio --- CHANGELOG.md | 5 + README.md | 1 + src/snekmate/auth/access_control.vy | 2 +- .../auth/interfaces/IAccessControl.vyi | 2 +- .../auth/mocks/access_control_mock.vy | 2 +- src/snekmate/auth/mocks/ownable_2step_mock.vy | 2 +- src/snekmate/auth/mocks/ownable_mock.vy | 2 +- src/snekmate/auth/ownable.vy | 2 +- src/snekmate/auth/ownable_2step.vy | 2 +- src/snekmate/extensions/erc2981.vy | 2 +- src/snekmate/extensions/erc4626.vy | 2 +- .../extensions/interfaces/IERC2981.vyi | 2 +- src/snekmate/extensions/mocks/erc2981_mock.vy | 2 +- src/snekmate/extensions/mocks/erc4626_mock.vy | 2 +- .../mocks/timelock_controller_mock.vy | 2 +- .../governance/timelock_controller.vy | 2 +- src/snekmate/tokens/erc1155.vy | 2 +- src/snekmate/tokens/erc20.vy | 2 +- src/snekmate/tokens/erc721.vy | 2 +- src/snekmate/tokens/interfaces/IERC1155.vyi | 2 +- .../tokens/interfaces/IERC1155MetadataURI.vyi | 2 +- .../tokens/interfaces/IERC1155Receiver.vyi | 2 +- .../tokens/interfaces/IERC20Permit.vyi | 2 +- src/snekmate/tokens/interfaces/IERC4906.vyi | 2 +- .../tokens/interfaces/IERC721Enumerable.vyi | 2 +- .../tokens/interfaces/IERC721Metadata.vyi | 2 +- .../tokens/interfaces/IERC721Permit.vyi | 2 +- .../tokens/interfaces/IERC721Receiver.vyi | 2 +- src/snekmate/tokens/mocks/erc1155_mock.vy | 2 +- src/snekmate/tokens/mocks/erc20_mock.vy | 2 +- src/snekmate/tokens/mocks/erc721_mock.vy | 2 +- src/snekmate/utils/base64.vy | 2 +- src/snekmate/utils/batch_distributor.vy | 2 +- src/snekmate/utils/create2_address.vy | 2 +- src/snekmate/utils/create_address.vy | 2 +- src/snekmate/utils/ecdsa.vy | 2 +- src/snekmate/utils/eip712_domain_separator.vy | 2 +- src/snekmate/utils/interfaces/IERC1271.vyi | 2 +- src/snekmate/utils/interfaces/IERC5267.vyi | 2 +- src/snekmate/utils/math.vy | 2 +- .../utils/merkle_proof_verification.vy | 2 +- src/snekmate/utils/message_hash_utils.vy | 2 +- src/snekmate/utils/mocks/base64_mock.vy | 2 +- .../utils/mocks/batch_distributor_mock.vy | 2 +- .../utils/mocks/create2_address_mock.vy | 2 +- .../utils/mocks/create_address_mock.vy | 2 +- src/snekmate/utils/mocks/ecdsa_mock.vy | 2 +- .../mocks/eip712_domain_separator_mock.vy | 2 +- src/snekmate/utils/mocks/math_mock.vy | 2 +- .../mocks/merkle_proof_verification_mock.vy | 2 +- .../utils/mocks/message_hash_utils_mock.vy | 2 +- src/snekmate/utils/mocks/multicall_mock.vy | 2 +- src/snekmate/utils/mocks/p256_mock.vy | 2 +- src/snekmate/utils/mocks/pausable_mock.vy | 63 +++++++ .../utils/mocks/signature_checker_mock.vy | 2 +- src/snekmate/utils/multicall.vy | 2 +- src/snekmate/utils/p256.vy | 2 +- src/snekmate/utils/pausable.vy | 109 +++++++++++ src/snekmate/utils/signature_checker.vy | 2 +- test/utils/Pausable.t.sol | 174 ++++++++++++++++++ test/utils/interfaces/IPausable.sol | 10 + 61 files changed, 417 insertions(+), 55 deletions(-) create mode 100644 src/snekmate/utils/mocks/pausable_mock.vy create mode 100644 src/snekmate/utils/pausable.vy create mode 100644 test/utils/Pausable.t.sol create mode 100644 test/utils/interfaces/IPausable.sol diff --git a/CHANGELOG.md b/CHANGELOG.md index 474f3939..da1b9a5a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ ## [`0.1.1`](https://github.com/pcaversaccio/snekmate/releases/tag/v0.1.1) (Unreleased) +### 💥 New Features + +- **Utility Functions** + - [`pausable`](https://github.com/pcaversaccio/snekmate/blob/v0.1.1/src/snekmate/utils/pausable.vy): Add a `pausable` contract module. ([#297](https://github.com/pcaversaccio/snekmate/pull/297)) + ### ♻️ Refactoring - **Authentication** diff --git a/README.md b/README.md index 0c1cc728..4e984d64 100644 --- a/README.md +++ b/README.md @@ -191,6 +191,7 @@ This repository contains [Foundry](https://github.com/foundry-rs/foundry)-based | `math` | ✅ | ✅ | ❌ | | `merkle_proof_verification` | ✅ | ✅ | ❌ | | `multicall` | ✅ | ❌ | ❌ | +| `pausable` | ✅ | ✅ | ✅ | ✅ Test Type Implemented   ❌ Test Type Not Implemented diff --git a/src/snekmate/auth/access_control.vy b/src/snekmate/auth/access_control.vy index f979806a..a44631ab 100644 --- a/src/snekmate/auth/access_control.vy +++ b/src/snekmate/auth/access_control.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title Multi-Role-Based Access Control Functions @custom:contract-name access_control diff --git a/src/snekmate/auth/interfaces/IAccessControl.vyi b/src/snekmate/auth/interfaces/IAccessControl.vyi index 4943ed96..747f2de2 100644 --- a/src/snekmate/auth/interfaces/IAccessControl.vyi +++ b/src/snekmate/auth/interfaces/IAccessControl.vyi @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title `access_control` Interface Definition @custom:contract-name IAccessControl diff --git a/src/snekmate/auth/mocks/access_control_mock.vy b/src/snekmate/auth/mocks/access_control_mock.vy index fbf5fed4..d203bbaa 100644 --- a/src/snekmate/auth/mocks/access_control_mock.vy +++ b/src/snekmate/auth/mocks/access_control_mock.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title `access_control` Module Reference Implementation @custom:contract-name access_control_mock diff --git a/src/snekmate/auth/mocks/ownable_2step_mock.vy b/src/snekmate/auth/mocks/ownable_2step_mock.vy index fa0bd170..5aac2aa8 100644 --- a/src/snekmate/auth/mocks/ownable_2step_mock.vy +++ b/src/snekmate/auth/mocks/ownable_2step_mock.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title `ownable_2step` Module Reference Implementation @custom:contract-name ownable_2step_mock diff --git a/src/snekmate/auth/mocks/ownable_mock.vy b/src/snekmate/auth/mocks/ownable_mock.vy index f65b407b..dfd6ae47 100644 --- a/src/snekmate/auth/mocks/ownable_mock.vy +++ b/src/snekmate/auth/mocks/ownable_mock.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title `ownable` Module Reference Implementation @custom:contract-name ownable_mock diff --git a/src/snekmate/auth/ownable.vy b/src/snekmate/auth/ownable.vy index 91ac3225..00721d3c 100644 --- a/src/snekmate/auth/ownable.vy +++ b/src/snekmate/auth/ownable.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title Owner-Based Access Control Functions @custom:contract-name ownable diff --git a/src/snekmate/auth/ownable_2step.vy b/src/snekmate/auth/ownable_2step.vy index 6aaf7b20..78585417 100644 --- a/src/snekmate/auth/ownable_2step.vy +++ b/src/snekmate/auth/ownable_2step.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title 2-Step Ownership Transfer Functions @custom:contract-name ownable_2step diff --git a/src/snekmate/extensions/erc2981.vy b/src/snekmate/extensions/erc2981.vy index 7223e772..bb2edb23 100644 --- a/src/snekmate/extensions/erc2981.vy +++ b/src/snekmate/extensions/erc2981.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title ERC-721 and ERC-1155 Compatible ERC-2981 Reference Implementation @custom:contract-name erc2981 diff --git a/src/snekmate/extensions/erc4626.vy b/src/snekmate/extensions/erc4626.vy index 107a84b9..e43d5721 100644 --- a/src/snekmate/extensions/erc4626.vy +++ b/src/snekmate/extensions/erc4626.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title Modern and Gas-Efficient ERC-4626 Tokenised Vault Implementation @custom:contract-name erc4626 diff --git a/src/snekmate/extensions/interfaces/IERC2981.vyi b/src/snekmate/extensions/interfaces/IERC2981.vyi index 662e576a..4f0cddb9 100644 --- a/src/snekmate/extensions/interfaces/IERC2981.vyi +++ b/src/snekmate/extensions/interfaces/IERC2981.vyi @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title EIP-2981 Interface Definition @custom:contract-name IERC2981 diff --git a/src/snekmate/extensions/mocks/erc2981_mock.vy b/src/snekmate/extensions/mocks/erc2981_mock.vy index 782b6b19..aa36367a 100644 --- a/src/snekmate/extensions/mocks/erc2981_mock.vy +++ b/src/snekmate/extensions/mocks/erc2981_mock.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title `erc2981` Module Reference Implementation @custom:contract-name erc2981_mock diff --git a/src/snekmate/extensions/mocks/erc4626_mock.vy b/src/snekmate/extensions/mocks/erc4626_mock.vy index e19cc677..01e86b2d 100644 --- a/src/snekmate/extensions/mocks/erc4626_mock.vy +++ b/src/snekmate/extensions/mocks/erc4626_mock.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title `erc4626` Module Reference Implementation @custom:contract-name erc4626_mock diff --git a/src/snekmate/governance/mocks/timelock_controller_mock.vy b/src/snekmate/governance/mocks/timelock_controller_mock.vy index 75ecab75..703d3fda 100644 --- a/src/snekmate/governance/mocks/timelock_controller_mock.vy +++ b/src/snekmate/governance/mocks/timelock_controller_mock.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title `timelock_controller` Module Reference Implementation @custom:contract-name timelock_controller_mock diff --git a/src/snekmate/governance/timelock_controller.vy b/src/snekmate/governance/timelock_controller.vy index 7a15fc43..ed78701e 100644 --- a/src/snekmate/governance/timelock_controller.vy +++ b/src/snekmate/governance/timelock_controller.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title Multi-Role-Based Timelock Controller Reference Implementation @custom:contract-name timelock_controller diff --git a/src/snekmate/tokens/erc1155.vy b/src/snekmate/tokens/erc1155.vy index f4a16da9..a1010a6b 100644 --- a/src/snekmate/tokens/erc1155.vy +++ b/src/snekmate/tokens/erc1155.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title Modern and Gas-Efficient ERC-1155 Implementation @custom:contract-name erc1155 diff --git a/src/snekmate/tokens/erc20.vy b/src/snekmate/tokens/erc20.vy index 5c814197..65ac4acd 100644 --- a/src/snekmate/tokens/erc20.vy +++ b/src/snekmate/tokens/erc20.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title Modern and Gas-Efficient ERC-20 + EIP-2612 Implementation @custom:contract-name erc20 diff --git a/src/snekmate/tokens/erc721.vy b/src/snekmate/tokens/erc721.vy index f6589b9b..715ae23c 100644 --- a/src/snekmate/tokens/erc721.vy +++ b/src/snekmate/tokens/erc721.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title Modern and Gas-Efficient ERC-721 + EIP-4494 Implementation @custom:contract-name erc721 diff --git a/src/snekmate/tokens/interfaces/IERC1155.vyi b/src/snekmate/tokens/interfaces/IERC1155.vyi index 0b6cde03..b3f432af 100644 --- a/src/snekmate/tokens/interfaces/IERC1155.vyi +++ b/src/snekmate/tokens/interfaces/IERC1155.vyi @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title EIP-1155 Interface Definition @custom:contract-name IERC1155 diff --git a/src/snekmate/tokens/interfaces/IERC1155MetadataURI.vyi b/src/snekmate/tokens/interfaces/IERC1155MetadataURI.vyi index f570b683..e8084c9a 100644 --- a/src/snekmate/tokens/interfaces/IERC1155MetadataURI.vyi +++ b/src/snekmate/tokens/interfaces/IERC1155MetadataURI.vyi @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title EIP-1155 Optional Metadata Interface Definition @custom:contract-name IERC1155MetadataURI diff --git a/src/snekmate/tokens/interfaces/IERC1155Receiver.vyi b/src/snekmate/tokens/interfaces/IERC1155Receiver.vyi index 4012f3da..7cac0305 100644 --- a/src/snekmate/tokens/interfaces/IERC1155Receiver.vyi +++ b/src/snekmate/tokens/interfaces/IERC1155Receiver.vyi @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title EIP-1155 Token Receiver Interface Definition @custom:contract-name IERC1155Receiver diff --git a/src/snekmate/tokens/interfaces/IERC20Permit.vyi b/src/snekmate/tokens/interfaces/IERC20Permit.vyi index 34f9d757..e03cd38b 100644 --- a/src/snekmate/tokens/interfaces/IERC20Permit.vyi +++ b/src/snekmate/tokens/interfaces/IERC20Permit.vyi @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title EIP-2612 Interface Definition @custom:contract-name IERC20Permit diff --git a/src/snekmate/tokens/interfaces/IERC4906.vyi b/src/snekmate/tokens/interfaces/IERC4906.vyi index ebccc817..52415efc 100644 --- a/src/snekmate/tokens/interfaces/IERC4906.vyi +++ b/src/snekmate/tokens/interfaces/IERC4906.vyi @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title EIP-4906 Interface Definition @custom:contract-name IERC4906 diff --git a/src/snekmate/tokens/interfaces/IERC721Enumerable.vyi b/src/snekmate/tokens/interfaces/IERC721Enumerable.vyi index dc3c9374..5de75413 100644 --- a/src/snekmate/tokens/interfaces/IERC721Enumerable.vyi +++ b/src/snekmate/tokens/interfaces/IERC721Enumerable.vyi @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title EIP-721 Optional Enumeration Interface Definition @custom:contract-name IERC721Enumerable diff --git a/src/snekmate/tokens/interfaces/IERC721Metadata.vyi b/src/snekmate/tokens/interfaces/IERC721Metadata.vyi index e892c424..ed70e9cb 100644 --- a/src/snekmate/tokens/interfaces/IERC721Metadata.vyi +++ b/src/snekmate/tokens/interfaces/IERC721Metadata.vyi @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title EIP-721 Optional Metadata Interface Definition @custom:contract-name IERC721Metadata diff --git a/src/snekmate/tokens/interfaces/IERC721Permit.vyi b/src/snekmate/tokens/interfaces/IERC721Permit.vyi index fe83d3c5..3dd1be36 100644 --- a/src/snekmate/tokens/interfaces/IERC721Permit.vyi +++ b/src/snekmate/tokens/interfaces/IERC721Permit.vyi @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title EIP-4494 Interface Definition @custom:contract-name IERC721Permit diff --git a/src/snekmate/tokens/interfaces/IERC721Receiver.vyi b/src/snekmate/tokens/interfaces/IERC721Receiver.vyi index 25c3c5d1..21255c02 100644 --- a/src/snekmate/tokens/interfaces/IERC721Receiver.vyi +++ b/src/snekmate/tokens/interfaces/IERC721Receiver.vyi @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title EIP-721 Token Receiver Interface Definition @custom:contract-name IERC721Receiver diff --git a/src/snekmate/tokens/mocks/erc1155_mock.vy b/src/snekmate/tokens/mocks/erc1155_mock.vy index bdb5611f..6a05bf35 100644 --- a/src/snekmate/tokens/mocks/erc1155_mock.vy +++ b/src/snekmate/tokens/mocks/erc1155_mock.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title `erc1155` Module Reference Implementation @custom:contract-name erc1155_mock diff --git a/src/snekmate/tokens/mocks/erc20_mock.vy b/src/snekmate/tokens/mocks/erc20_mock.vy index a56357f0..d7996ae9 100644 --- a/src/snekmate/tokens/mocks/erc20_mock.vy +++ b/src/snekmate/tokens/mocks/erc20_mock.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title `erc20` Module Reference Implementation @custom:contract-name erc20_mock diff --git a/src/snekmate/tokens/mocks/erc721_mock.vy b/src/snekmate/tokens/mocks/erc721_mock.vy index facd54df..0966f31a 100644 --- a/src/snekmate/tokens/mocks/erc721_mock.vy +++ b/src/snekmate/tokens/mocks/erc721_mock.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title `erc721` Module Reference Implementation @custom:contract-name erc721_mock diff --git a/src/snekmate/utils/base64.vy b/src/snekmate/utils/base64.vy index 035aa951..7dbe9ffb 100644 --- a/src/snekmate/utils/base64.vy +++ b/src/snekmate/utils/base64.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title Base64 Encoding and Decoding Functions @custom:contract-name base64 diff --git a/src/snekmate/utils/batch_distributor.vy b/src/snekmate/utils/batch_distributor.vy index 8b7bcab0..d9282043 100644 --- a/src/snekmate/utils/batch_distributor.vy +++ b/src/snekmate/utils/batch_distributor.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title Batch Sending Both Native and ERC-20 Tokens @custom:contract-name batch_distributor diff --git a/src/snekmate/utils/create2_address.vy b/src/snekmate/utils/create2_address.vy index a0e07b63..5f53aa7f 100644 --- a/src/snekmate/utils/create2_address.vy +++ b/src/snekmate/utils/create2_address.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title `CREATE2` EVM Opcode Utility Functions for Address Calculations @custom:contract-name create2_address diff --git a/src/snekmate/utils/create_address.vy b/src/snekmate/utils/create_address.vy index aef7b6c6..0d2b4944 100644 --- a/src/snekmate/utils/create_address.vy +++ b/src/snekmate/utils/create_address.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title `CREATE` EVM Opcode Utility Functions for Address Calculations @custom:contract-name create_address diff --git a/src/snekmate/utils/ecdsa.vy b/src/snekmate/utils/ecdsa.vy index b5806600..5cf16cd1 100644 --- a/src/snekmate/utils/ecdsa.vy +++ b/src/snekmate/utils/ecdsa.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title Elliptic Curve Digital Signature Algorithm (ECDSA) Secp256k1-Based Functions @custom:contract-name ecdsa diff --git a/src/snekmate/utils/eip712_domain_separator.vy b/src/snekmate/utils/eip712_domain_separator.vy index d210a8a9..2f2c445c 100644 --- a/src/snekmate/utils/eip712_domain_separator.vy +++ b/src/snekmate/utils/eip712_domain_separator.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title EIP-712 Domain Separator @custom:contract-name eip712_domain_separator diff --git a/src/snekmate/utils/interfaces/IERC1271.vyi b/src/snekmate/utils/interfaces/IERC1271.vyi index 8cc2deff..6ad5d394 100644 --- a/src/snekmate/utils/interfaces/IERC1271.vyi +++ b/src/snekmate/utils/interfaces/IERC1271.vyi @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title EIP-1271 Interface Definition @custom:contract-name IERC1271 diff --git a/src/snekmate/utils/interfaces/IERC5267.vyi b/src/snekmate/utils/interfaces/IERC5267.vyi index c4424c7f..444c73cd 100644 --- a/src/snekmate/utils/interfaces/IERC5267.vyi +++ b/src/snekmate/utils/interfaces/IERC5267.vyi @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title EIP-5267 Interface Definition @custom:contract-name IERC5267 diff --git a/src/snekmate/utils/math.vy b/src/snekmate/utils/math.vy index 73ae2a8d..cea189ac 100644 --- a/src/snekmate/utils/math.vy +++ b/src/snekmate/utils/math.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title Standard Mathematical Utility Functions @custom:contract-name math diff --git a/src/snekmate/utils/merkle_proof_verification.vy b/src/snekmate/utils/merkle_proof_verification.vy index 5084b3c8..5d6b1909 100644 --- a/src/snekmate/utils/merkle_proof_verification.vy +++ b/src/snekmate/utils/merkle_proof_verification.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title Merkle Tree Proof Verification Functions @custom:contract-name merkle_proof_verification diff --git a/src/snekmate/utils/message_hash_utils.vy b/src/snekmate/utils/message_hash_utils.vy index 27a75e70..19882319 100644 --- a/src/snekmate/utils/message_hash_utils.vy +++ b/src/snekmate/utils/message_hash_utils.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title Signature Message Hash Utility Functions @custom:contract-name message_hash_utils diff --git a/src/snekmate/utils/mocks/base64_mock.vy b/src/snekmate/utils/mocks/base64_mock.vy index 157752de..a5cf2e96 100644 --- a/src/snekmate/utils/mocks/base64_mock.vy +++ b/src/snekmate/utils/mocks/base64_mock.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title `base64` Module Reference Implementation @custom:contract-name base64_mock diff --git a/src/snekmate/utils/mocks/batch_distributor_mock.vy b/src/snekmate/utils/mocks/batch_distributor_mock.vy index 59591dcf..3fcfaa9c 100644 --- a/src/snekmate/utils/mocks/batch_distributor_mock.vy +++ b/src/snekmate/utils/mocks/batch_distributor_mock.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title `batch_distributor` Module Reference Implementation @custom:contract-name batch_distributor_mock diff --git a/src/snekmate/utils/mocks/create2_address_mock.vy b/src/snekmate/utils/mocks/create2_address_mock.vy index 950ff645..bb74ebcb 100644 --- a/src/snekmate/utils/mocks/create2_address_mock.vy +++ b/src/snekmate/utils/mocks/create2_address_mock.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title `create2_address` Module Reference Implementation @custom:contract-name create2_address_mock diff --git a/src/snekmate/utils/mocks/create_address_mock.vy b/src/snekmate/utils/mocks/create_address_mock.vy index 8551aba4..7f0d5711 100644 --- a/src/snekmate/utils/mocks/create_address_mock.vy +++ b/src/snekmate/utils/mocks/create_address_mock.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title `create_address` Module Reference Implementation @custom:contract-name create_address_mock diff --git a/src/snekmate/utils/mocks/ecdsa_mock.vy b/src/snekmate/utils/mocks/ecdsa_mock.vy index f15af811..d81797e8 100644 --- a/src/snekmate/utils/mocks/ecdsa_mock.vy +++ b/src/snekmate/utils/mocks/ecdsa_mock.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title `ecdsa` Module Reference Implementation @custom:contract-name ecdsa_mock diff --git a/src/snekmate/utils/mocks/eip712_domain_separator_mock.vy b/src/snekmate/utils/mocks/eip712_domain_separator_mock.vy index 450e3daa..4f71a004 100644 --- a/src/snekmate/utils/mocks/eip712_domain_separator_mock.vy +++ b/src/snekmate/utils/mocks/eip712_domain_separator_mock.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title `eip712_domain_separator` Module Reference Implementation @custom:contract-name eip712_domain_separator_mock diff --git a/src/snekmate/utils/mocks/math_mock.vy b/src/snekmate/utils/mocks/math_mock.vy index a36bb37f..097e848c 100644 --- a/src/snekmate/utils/mocks/math_mock.vy +++ b/src/snekmate/utils/mocks/math_mock.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title `math` Module Reference Implementation @custom:contract-name math_mock diff --git a/src/snekmate/utils/mocks/merkle_proof_verification_mock.vy b/src/snekmate/utils/mocks/merkle_proof_verification_mock.vy index f1e152a3..3528d4c5 100644 --- a/src/snekmate/utils/mocks/merkle_proof_verification_mock.vy +++ b/src/snekmate/utils/mocks/merkle_proof_verification_mock.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title `merkle_proof_verification` Module Reference Implementation @custom:contract-name merkle_proof_verification_mock diff --git a/src/snekmate/utils/mocks/message_hash_utils_mock.vy b/src/snekmate/utils/mocks/message_hash_utils_mock.vy index 2921a0cf..ece0b16c 100644 --- a/src/snekmate/utils/mocks/message_hash_utils_mock.vy +++ b/src/snekmate/utils/mocks/message_hash_utils_mock.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title `message_hash_utils` Module Reference Implementation @custom:contract-name message_hash_utils_mock diff --git a/src/snekmate/utils/mocks/multicall_mock.vy b/src/snekmate/utils/mocks/multicall_mock.vy index 08082f4f..841da3a1 100644 --- a/src/snekmate/utils/mocks/multicall_mock.vy +++ b/src/snekmate/utils/mocks/multicall_mock.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title `multicall` Module Reference Implementation @custom:contract-name multicall_mock diff --git a/src/snekmate/utils/mocks/p256_mock.vy b/src/snekmate/utils/mocks/p256_mock.vy index 70f8f633..f039be32 100644 --- a/src/snekmate/utils/mocks/p256_mock.vy +++ b/src/snekmate/utils/mocks/p256_mock.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title `p256` Module Reference Implementation @custom:contract-name p256_mock diff --git a/src/snekmate/utils/mocks/pausable_mock.vy b/src/snekmate/utils/mocks/pausable_mock.vy new file mode 100644 index 00000000..53305865 --- /dev/null +++ b/src/snekmate/utils/mocks/pausable_mock.vy @@ -0,0 +1,63 @@ +# pragma version ~=0.4.1rc2 +""" +@title `pausable` Module Reference Implementation +@custom:contract-name pausable_mock +@license GNU Affero General Public License v3.0 only +@author pcaversaccio +""" + + +# @dev We import and initialise the `pausable` module. +from .. import pausable as ps +initializes: ps + + +# @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 `pausable` 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 your_filename.vy` or the external interface +# by using `vyper -f external_interface your_filename.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: ps.__interface__ + + +@deploy +@payable +def __init__(): + """ + @dev To omit the opcodes for checking the `msg.value` + in the creation-time EVM bytecode, the constructor + is declared as `payable`. + """ + ps.__init__() + + +@external +def pause(): + """ + @dev Triggers the pause state. Note that the contract + must not be paused. + @notice This is an `external` function without access + restriction. + """ + ps._pause() + + +@external +def unpause(): + """ + @dev Lifts the pause state. Note that the contract + must be paused. + @notice This is an `external` function without access + restriction. + """ + ps._unpause() diff --git a/src/snekmate/utils/mocks/signature_checker_mock.vy b/src/snekmate/utils/mocks/signature_checker_mock.vy index 9f9fe147..d3bc6203 100644 --- a/src/snekmate/utils/mocks/signature_checker_mock.vy +++ b/src/snekmate/utils/mocks/signature_checker_mock.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title `signature_checker` Module Reference Implementation @custom:contract-name signature_checker_mock diff --git a/src/snekmate/utils/multicall.vy b/src/snekmate/utils/multicall.vy index 95191e94..030423c4 100644 --- a/src/snekmate/utils/multicall.vy +++ b/src/snekmate/utils/multicall.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title Multicall Functions @custom:contract-name multicall diff --git a/src/snekmate/utils/p256.vy b/src/snekmate/utils/p256.vy index 3f32ee58..2569afbe 100644 --- a/src/snekmate/utils/p256.vy +++ b/src/snekmate/utils/p256.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title Elliptic Curve Digital Signature Algorithm (ECDSA) Secp256r1-Based Functions @custom:contract-name p256 diff --git a/src/snekmate/utils/pausable.vy b/src/snekmate/utils/pausable.vy new file mode 100644 index 00000000..ca636a12 --- /dev/null +++ b/src/snekmate/utils/pausable.vy @@ -0,0 +1,109 @@ +# pragma version ~=0.4.1rc2 +""" +@title Pausable Functions +@custom:contract-name pausable +@license GNU Affero General Public License v3.0 only +@author pcaversaccio +@notice These functions can be used to implement an emergency stop + mechanism that can be triggered by an authorised account. + Please note that this contract does not include an access + control mechanism (e.g., `ownable`) for triggering the emergency + stop. Such functionality must be implemented by the importing + contract, for instance (to avoid any NatSpec parsing error, + no `@` character is added to the visibility decorator `@external` + in the following example; please add them accordingly): + ```vy + from snekmate.auth import ownable + initializes: ownable + + from snekmate.utils import pausable + initializes: pausable + + exports: ... + + ... + + external + def pause(): + ownable._check_owner() + pausable._pause() + + external + def unpause(): + ownable._check_owner() + pausable._unpause() + ``` + + The implementation is inspired by OpenZeppelin's implementation here: + https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Pausable.sol. +""" + + +# @dev Returns whether a contract is paused or not. +# @notice If you declare a variable as `public`, +# Vyper automatically generates an `external` +# getter function for the variable. +paused: public(bool) + + +# @dev Emitted when `account` initiated the pause. +event Paused: + account: address + + +# @dev Emitted when `account` lifted the pause. +event Unpaused: + account: address + + +@deploy +@payable +def __init__(): + """ + @dev To omit the opcodes for checking the `msg.value` + in the creation-time EVM bytecode, the constructor + is declared as `payable`. + """ + pass + + +@internal +def _pause(): + """ + @dev Triggers the pause state. Note that the contract + must not be paused. + @notice This is an `internal` function without access + restriction. + """ + self._assert_unpaused() + self.paused = True + log Paused(account=msg.sender) + + +@internal +def _unpause(): + """ + @dev Lifts the pause state. Note that the contract + must be paused. + @notice This is an `internal` function without access + restriction. + """ + self._assert_paused() + self.paused = False + log Unpaused(account=msg.sender) + + +@internal +def _assert_unpaused(): + """ + @dev Throws if the contract is paused. + """ + assert not self.paused, "pausable: contract is paused" + + +@internal +def _assert_paused(): + """ + @dev Throws if the contract is not paused. + """ + assert self.paused, "pausable: contract is not paused" diff --git a/src/snekmate/utils/signature_checker.vy b/src/snekmate/utils/signature_checker.vy index 77907e85..ec656c93 100644 --- a/src/snekmate/utils/signature_checker.vy +++ b/src/snekmate/utils/signature_checker.vy @@ -1,4 +1,4 @@ -# pragma version ~=0.4.1b5 +# pragma version ~=0.4.1rc2 """ @title ECDSA and EIP-1271 Signature Verification Functions @custom:contract-name signature_checker diff --git a/test/utils/Pausable.t.sol b/test/utils/Pausable.t.sol new file mode 100644 index 00000000..7c295125 --- /dev/null +++ b/test/utils/Pausable.t.sol @@ -0,0 +1,174 @@ +// SPDX-License-Identifier: WTFPL +pragma solidity ^0.8.28; + +import {Test} from "forge-std/Test.sol"; +import {VyperDeployer} from "utils/VyperDeployer.sol"; + +import {IPausable} from "./interfaces/IPausable.sol"; + +contract PausableTest is Test { + VyperDeployer private vyperDeployer = new VyperDeployer(); + + IPausable private pausable; + + address private deployer = address(vyperDeployer); + + function setUp() public { + pausable = IPausable( + vyperDeployer.deployContract( + "src/snekmate/utils/mocks/", + "pausable_mock" + ) + ); + } + + function testInitialSetup() public view { + assertTrue(!pausable.paused()); + } + + function testPauseSuccess() public { + vm.startPrank(deployer); + vm.expectEmit(false, false, false, true); + emit IPausable.Paused(deployer); + pausable.pause(); + assertTrue(pausable.paused()); + vm.stopPrank(); + } + + function testPauseWhilePaused() public { + vm.startPrank(deployer); + vm.expectEmit(false, false, false, true); + emit IPausable.Paused(deployer); + pausable.pause(); + assertTrue(pausable.paused()); + + vm.expectRevert(bytes("pausable: contract is paused")); + pausable.pause(); + assertTrue(pausable.paused()); + vm.stopPrank(); + } + + function testUnpauseSuccess() public { + vm.startPrank(deployer); + vm.expectEmit(false, false, false, true); + emit IPausable.Paused(deployer); + pausable.pause(); + assertTrue(pausable.paused()); + vm.expectEmit(false, false, false, true); + emit IPausable.Unpaused(deployer); + pausable.unpause(); + assertTrue(!pausable.paused()); + vm.stopPrank(); + } + + function testUnpauseWhileUnpaused() public { + vm.startPrank(deployer); + vm.expectEmit(false, false, false, true); + emit IPausable.Paused(deployer); + pausable.pause(); + assertTrue(pausable.paused()); + vm.expectEmit(false, false, false, true); + emit IPausable.Unpaused(deployer); + pausable.unpause(); + assertTrue(!pausable.paused()); + + vm.expectRevert(bytes("pausable: contract is not paused")); + pausable.unpause(); + assertTrue(!pausable.paused()); + vm.stopPrank(); + } + + function testFuzzPauseSuccess(address account) public { + vm.startPrank(account); + vm.expectEmit(false, false, false, true); + emit IPausable.Paused(account); + pausable.pause(); + assertTrue(pausable.paused()); + vm.stopPrank(); + } + + function testFuzzPauseWhilePaused(address account) public { + vm.startPrank(account); + vm.expectEmit(false, false, false, true); + emit IPausable.Paused(account); + pausable.pause(); + assertTrue(pausable.paused()); + + vm.expectRevert(bytes("pausable: contract is paused")); + pausable.pause(); + assertTrue(pausable.paused()); + vm.stopPrank(); + } + + function testFuzzUnpauseSuccess(address account) public { + vm.startPrank(account); + vm.expectEmit(false, false, false, true); + emit IPausable.Paused(account); + pausable.pause(); + assertTrue(pausable.paused()); + vm.expectEmit(false, false, false, true); + emit IPausable.Unpaused(account); + pausable.unpause(); + assertTrue(!pausable.paused()); + vm.stopPrank(); + } + + function testFuzzUnpauseWhileUnpaused(address account) public { + vm.startPrank(account); + vm.expectEmit(false, false, false, true); + emit IPausable.Paused(account); + pausable.pause(); + assertTrue(pausable.paused()); + vm.expectEmit(false, false, false, true); + emit IPausable.Unpaused(account); + pausable.unpause(); + assertTrue(!pausable.paused()); + + vm.expectRevert(bytes("pausable: contract is not paused")); + pausable.unpause(); + assertTrue(!pausable.paused()); + vm.stopPrank(); + } +} + +contract PausableInvariants is Test { + VyperDeployer private vyperDeployer = new VyperDeployer(); + + IPausable private pausable; + PausableHandler private pausableHandler; + + function setUp() public { + pausable = IPausable( + vyperDeployer.deployContract( + "src/snekmate/utils/mocks/", + "pausable_mock" + ) + ); + pausableHandler = new PausableHandler(pausable); + targetContract(address(pausableHandler)); + } + + function statefulFuzzPaused() public view { + assertEq(pausable.paused(), pausableHandler.paused()); + } +} + +contract PausableHandler { + bool public paused; + + IPausable private pausable; + + constructor(IPausable pausable_) { + pausable = pausable_; + } + + function pause() public { + pausable.pause(); + paused = true; + } + + function unpause() public { + pausable.unpause(); + paused = false; + } +} diff --git a/test/utils/interfaces/IPausable.sol b/test/utils/interfaces/IPausable.sol new file mode 100644 index 00000000..d21c4642 --- /dev/null +++ b/test/utils/interfaces/IPausable.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: WTFPL +pragma solidity ^0.8.28; + +interface IPausable { + event Paused(address account); + event Unpaused(address account); + function paused() external view returns (bool); + function pause() external; + function unpause() external; +} From 8db992a758f4c9b81f0d48846e6d5c2a11d800bc Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Tue, 21 Jan 2025 14:50:25 +0100 Subject: [PATCH 02/10] =?UTF-8?q?=F0=9F=94=81=20Update=20Dependencies?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Pascal Marco Caversaccio --- lib/create-util | 2 +- lib/openzeppelin-contracts | 2 +- lib/solady | 2 +- pnpm-lock.yaml | 8 ++++---- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/create-util b/lib/create-util index 3c8428a5..d92a6c27 160000 --- a/lib/create-util +++ b/lib/create-util @@ -1 +1 @@ -Subproject commit 3c8428a55a6826ee51f45d16a88a7db50a383814 +Subproject commit d92a6c276616ac4b29c5c77f0d15b73c7af438c5 diff --git a/lib/openzeppelin-contracts b/lib/openzeppelin-contracts index ea736bd4..332bcb5f 160000 --- a/lib/openzeppelin-contracts +++ b/lib/openzeppelin-contracts @@ -1 +1 @@ -Subproject commit ea736bd45bd844d7968a64c5707d97710fe1c077 +Subproject commit 332bcb5f4d9cf0ae0f98fe91c77d9c1fb9951506 diff --git a/lib/solady b/lib/solady index 8583a6e3..d355d147 160000 --- a/lib/solady +++ b/lib/solady @@ -1 +1 @@ -Subproject commit 8583a6e386b897f3db142a541f86d5953eccd835 +Subproject commit d355d147f150844ddf55ffbb63fcd0130ac73fb4 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9ebbbc89..a6da9113 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -426,8 +426,8 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-uri@3.0.5: - resolution: {integrity: sha512-5JnBCWpFlMo0a3ciDy/JckMzzv1U9coZrIhedq+HXxxUfDTAiS0LA8OKVao4G9BxmCVck/jtA5r3KAtRWEyD8Q==} + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} @@ -1124,7 +1124,7 @@ snapshots: ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.0.5 + fast-uri: 3.0.6 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -1340,7 +1340,7 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-uri@3.0.5: {} + fast-uri@3.0.6: {} file-entry-cache@8.0.0: dependencies: From 84bc7ef73a8332888152ab89b0800e04c3559607 Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Tue, 21 Jan 2025 15:56:07 +0100 Subject: [PATCH 03/10] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Align=20with=20OZ=20?= =?UTF-8?q?Implementation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Pascal Marco Caversaccio --- src/snekmate/utils/pausable.vy | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/snekmate/utils/pausable.vy b/src/snekmate/utils/pausable.vy index ca636a12..10300e00 100644 --- a/src/snekmate/utils/pausable.vy +++ b/src/snekmate/utils/pausable.vy @@ -75,7 +75,7 @@ def _pause(): @notice This is an `internal` function without access restriction. """ - self._assert_unpaused() + self._require_not_paused() self.paused = True log Paused(account=msg.sender) @@ -88,13 +88,13 @@ def _unpause(): @notice This is an `internal` function without access restriction. """ - self._assert_paused() + self._require_paused() self.paused = False log Unpaused(account=msg.sender) @internal -def _assert_unpaused(): +def _require_not_paused(): """ @dev Throws if the contract is paused. """ @@ -102,7 +102,7 @@ def _assert_unpaused(): @internal -def _assert_paused(): +def _require_paused(): """ @dev Throws if the contract is not paused. """ From 77270dca1e2457d17d0ffe588c4c93a51e4925b3 Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Tue, 21 Jan 2025 16:24:35 +0100 Subject: [PATCH 04/10] =?UTF-8?q?=F0=9F=93=96=20Add=20to=20`README`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Pascal Marco Caversaccio --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4e984d64..0c03c597 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,7 @@ src ├── math — "Standard Mathematical Utility Functions" ├── merkle_proof_verification — "Merkle Tree Proof Verification Functions" ├── multicall — "Multicall Functions" + ├── pausable — "Pausable Functions" ├── interfaces │ ├── IERC1271 — "EIP-1271 Interface Definition" │ └── IERC5267 — "EIP-5267 Interface Definition" @@ -98,7 +99,8 @@ src ├── eip712_domain_separator_mock — "`eip712_domain_separator` Module Reference Implementation" ├── math_mock — "`math` Module Reference Implementation" ├── merkle_proof_verification_mock — "`merkle_proof_verification` Module Reference Implementation" - └── multicall_mock — "`multicall` Module Reference Implementation" + ├── multicall_mock — "`multicall` Module Reference Implementation" + └── pausable_mock — "`pausable` Module Reference Implementation" ``` ## 🎛 Installation From 7ca037ab12b1f4d38a006c2ada827222424279c1 Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Tue, 21 Jan 2025 16:45:37 +0100 Subject: [PATCH 05/10] =?UTF-8?q?=F0=9F=93=96=20Code=20Comment?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Pascal Marco Caversaccio --- src/snekmate/utils/pausable.vy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/snekmate/utils/pausable.vy b/src/snekmate/utils/pausable.vy index 10300e00..f8f62fa3 100644 --- a/src/snekmate/utils/pausable.vy +++ b/src/snekmate/utils/pausable.vy @@ -39,7 +39,7 @@ """ -# @dev Returns whether a contract is paused or not. +# @dev Returns whether the contract is paused or not. # @notice If you declare a variable as `public`, # Vyper automatically generates an `external` # getter function for the variable. From 41555c7b8a0cda8d15a149e7c2f05fdc546b0313 Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Tue, 21 Jan 2025 16:52:58 +0100 Subject: [PATCH 06/10] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor=20Mock?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Pascal Marco Caversaccio --- src/snekmate/utils/mocks/pausable_mock.vy | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/snekmate/utils/mocks/pausable_mock.vy b/src/snekmate/utils/mocks/pausable_mock.vy index 53305865..53986f1d 100644 --- a/src/snekmate/utils/mocks/pausable_mock.vy +++ b/src/snekmate/utils/mocks/pausable_mock.vy @@ -14,20 +14,13 @@ initializes: ps # @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 `pausable` 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 your_filename.vy` or the external interface -# by using `vyper -f external_interface your_filename.vy`. +# the ABI encoding specification) the `external` getter +# function `paused` from the `pausable` 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: ps.__interface__ +exports: ps.paused @deploy From 8d5ba23676fc1c6141f35f592aa341c6dbe9ac76 Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Tue, 21 Jan 2025 16:58:08 +0100 Subject: [PATCH 07/10] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Interface=20Function?= =?UTF-8?q?s=20Prettify?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Pascal Marco Caversaccio --- test/utils/interfaces/IPausable.sol | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/utils/interfaces/IPausable.sol b/test/utils/interfaces/IPausable.sol index d21c4642..541f9b18 100644 --- a/test/utils/interfaces/IPausable.sol +++ b/test/utils/interfaces/IPausable.sol @@ -3,8 +3,12 @@ pragma solidity ^0.8.28; interface IPausable { event Paused(address account); + event Unpaused(address account); + function paused() external view returns (bool); + function pause() external; + function unpause() external; } From aa9e3e0b7edd20fee434798be63fe9da96554f25 Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Tue, 21 Jan 2025 18:22:59 +0100 Subject: [PATCH 08/10] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20=20Add=20Gas=20Snaps?= =?UTF-8?q?hot=20Files?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Pascal Marco Caversaccio --- .gas-snapshot | 192 +++---- .gas-snapshot-venom | 832 ++++++++++++++++--------------- scripts/generate_gas_snapshot.sh | 25 +- 3 files changed, 546 insertions(+), 503 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index 04ced236..6d72d5b3 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -1,5 +1,5 @@ -Vyper version: 0.4.1b5+commit.9db15462 -Forge version: forge 0.3.0 (6f81e76 2025-01-11T00:21:24.528660762Z) +Vyper version: 0.4.1rc2+commit.762eec68 +Forge version: forge 0.3.1-nightly (64c2370 2025-01-21T15:57:15.994668323Z) Vyper config: { "optimize": "gas" @@ -124,18 +124,18 @@ CreateAddressTest:testFuzzComputeAddressSelfNonceUint8(uint64) (runs: 256, μ: 5 CreateAddressTest:testFuzzComputeAddressSelfRevertTooHighNonce(uint256) (runs: 256, μ: 12680, ~: 12998) ECDSATest:testFuzzRecoverWithInvalidSignature(bytes,string) (runs: 256, μ: 15336, ~: 15339) ECDSATest:testFuzzRecoverWithTooLongSignature(bytes,string) (runs: 256, μ: 13772, ~: 13775) -ECDSATest:testFuzzRecoverWithValidSignature(string,string) (runs: 256, μ: 21662, ~: 21660) -ECDSATest:testFuzzRecoverWithWrongMessage(string,string,bytes32) (runs: 256, μ: 21742, ~: 21745) -ECDSATest:testRecoverWith0x00Value() (gas: 14944) -ECDSATest:testRecoverWithArbitraryMessage() (gas: 20654) -ECDSATest:testRecoverWithCorrectVersion() (gas: 21105) -ECDSATest:testRecoverWithInvalidSignature() (gas: 14677) +ECDSATest:testFuzzRecoverWithValidSignature(string,string) (runs: 256, μ: 21690, ~: 21688) +ECDSATest:testFuzzRecoverWithWrongMessage(string,string,bytes32) (runs: 256, μ: 21770, ~: 21773) +ECDSATest:testRecoverWith0x00Value() (gas: 14958) +ECDSATest:testRecoverWithArbitraryMessage() (gas: 20682) +ECDSATest:testRecoverWithCorrectVersion() (gas: 21133) +ECDSATest:testRecoverWithInvalidSignature() (gas: 14691) ECDSATest:testRecoverWithTooHighSValue() (gas: 15765) ECDSATest:testRecoverWithTooLongSignature() (gas: 12559) ECDSATest:testRecoverWithTooShortSignature() (gas: 14132) -ECDSATest:testRecoverWithValidSignature() (gas: 20711) -ECDSATest:testRecoverWithWrongMessage() (gas: 20723) -ECDSATest:testRecoverWithWrongVersion() (gas: 14950) +ECDSATest:testRecoverWithValidSignature() (gas: 20739) +ECDSATest:testRecoverWithWrongMessage() (gas: 20751) +ECDSATest:testRecoverWithWrongVersion() (gas: 14964) EIP712DomainSeparatorTest:testCachedDomainSeparatorV4() (gas: 10561) EIP712DomainSeparatorTest:testDomainSeparatorV4() (gas: 11703) EIP712DomainSeparatorTest:testEIP712Domain() (gas: 17949) @@ -295,16 +295,16 @@ ERC20Test:testCachedDomainSeparator() (gas: 10598) ERC20Test:testDomainSeparator() (gas: 11819) ERC20Test:testEIP712Domain() (gas: 18124) ERC20Test:testFuzzApproveSuccess(address,uint256) (runs: 256, μ: 41115, ~: 41193) -ERC20Test:testFuzzBurnFromInsufficientAllowance(address,uint256,uint8) (runs: 256, μ: 205900, ~: 205979) -ERC20Test:testFuzzBurnFromSuccess(address,uint256) (runs: 256, μ: 339729, ~: 339648) +ERC20Test:testFuzzBurnFromInsufficientAllowance(address,uint256,uint8) (runs: 256, μ: 205962, ~: 205979) +ERC20Test:testFuzzBurnFromSuccess(address,uint256) (runs: 256, μ: 339789, ~: 339648) ERC20Test:testFuzzBurnInvalidAmount(address,uint256) (runs: 256, μ: 16394, ~: 16394) -ERC20Test:testFuzzBurnSuccessCase(uint256) (runs: 256, μ: 314362, ~: 314152) +ERC20Test:testFuzzBurnSuccessCase(uint256) (runs: 256, μ: 314361, ~: 314152) ERC20Test:testFuzzDomainSeparator(uint8) (runs: 256, μ: 12027, ~: 12055) ERC20Test:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 21620, ~: 21671) ERC20Test:testFuzzMintNonMinter(string,uint256) (runs: 256, μ: 12921, ~: 12914) -ERC20Test:testFuzzMintSuccess(string,uint256) (runs: 256, μ: 55318, ~: 56074) -ERC20Test:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 44560, ~: 44554) -ERC20Test:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 70553, ~: 70554) +ERC20Test:testFuzzMintSuccess(string,uint256) (runs: 256, μ: 55403, ~: 56064) +ERC20Test:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 44574, ~: 44568) +ERC20Test:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 70567, ~: 70568) ERC20Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13929, ~: 13929) ERC20Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48634, ~: 48620) ERC20Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 15520, ~: 15521) @@ -316,17 +316,17 @@ ERC20Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 140 ERC20Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 75609, ~: 75577) ERC20Test:testFuzzTransferSuccess(address,uint256) (runs: 256, μ: 205509, ~: 205569) ERC20Test:testHasOwner() (gas: 12655) -ERC20Test:testInitialSetup() (gas: 1559942) +ERC20Test:testInitialSetup() (gas: 1560742) ERC20Test:testMintNonMinter() (gas: 12460) ERC20Test:testMintOverflow() (gas: 16783) ERC20Test:testMintSuccess() (gas: 51789) ERC20Test:testMintToZeroAddress() (gas: 15596) -ERC20Test:testPermitBadChainId() (gas: 43384) -ERC20Test:testPermitBadNonce() (gas: 40488) +ERC20Test:testPermitBadChainId() (gas: 43398) +ERC20Test:testPermitBadNonce() (gas: 40502) ERC20Test:testPermitExpiredDeadline() (gas: 17036) -ERC20Test:testPermitOtherSignature() (gas: 41453) -ERC20Test:testPermitReplaySignature() (gas: 73296) -ERC20Test:testPermitSuccess() (gas: 69630) +ERC20Test:testPermitOtherSignature() (gas: 41467) +ERC20Test:testPermitReplaySignature() (gas: 73324) +ERC20Test:testPermitSuccess() (gas: 69644) ERC20Test:testRenounceOwnershipNonOwner() (gas: 10812) ERC20Test:testRenounceOwnershipSuccess() (gas: 22902) ERC20Test:testSetMinterNonOwner() (gas: 12543) @@ -393,8 +393,8 @@ ERC2981Test:testSupportsInterfaceSuccessGasCost() (gas: 9227) ERC2981Test:testTransferOwnershipNonOwner() (gas: 12354) ERC2981Test:testTransferOwnershipSuccess() (gas: 22163) ERC2981Test:testTransferOwnershipToZeroAddress() (gas: 15490) -ERC4626VaultInvariants:statefulFuzzTotalAssets() (runs: 256, calls: 3840, reverts: 3289) -ERC4626VaultInvariants:statefulFuzzTotalSupply() (runs: 256, calls: 3840, reverts: 3289) +ERC4626VaultInvariants:statefulFuzzTotalAssets() (runs: 256, calls: 3840, reverts: 3291) +ERC4626VaultInvariants:statefulFuzzTotalSupply() (runs: 256, calls: 3840, reverts: 3291) ERC4626VaultTest:testCachedDomainSeparator() (gas: 10575) ERC4626VaultTest:testDepositInsufficientAllowance() (gas: 82481) ERC4626VaultTest:testDepositWithNoApproval() (gas: 24312) @@ -405,22 +405,22 @@ ERC4626VaultTest:testEmptyVaultDeposit() (gas: 567212) ERC4626VaultTest:testEmptyVaultMint() (gas: 568097) ERC4626VaultTest:testEmptyVaultRedeem() (gas: 202461) ERC4626VaultTest:testEmptyVaultwithdraw() (gas: 215305) -ERC4626VaultTest:testFail_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 553698, ~: 556450) -ERC4626VaultTest:testFail_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 555490, ~: 558009) -ERC4626VaultTest:testFuzzDomainSeparator(uint8) (runs: 256, μ: 11916, ~: 11944) -ERC4626VaultTest:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 21641, ~: 21679) -ERC4626VaultTest:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 44525, ~: 44519) -ERC4626VaultTest:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 70460, ~: 70461) -ERC4626VaultTest:testInitialSetup() (gas: 5948310) +ERC4626VaultTest:testFail_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 553692, ~: 556450) +ERC4626VaultTest:testFail_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 555431, ~: 558009) +ERC4626VaultTest:testFuzzDomainSeparator(uint8) (runs: 256, μ: 11917, ~: 11944) +ERC4626VaultTest:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 21642, ~: 21693) +ERC4626VaultTest:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 44539, ~: 44533) +ERC4626VaultTest:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 70474, ~: 70475) +ERC4626VaultTest:testInitialSetup() (gas: 5950710) ERC4626VaultTest:testMintWithNoApproval() (gas: 24357) ERC4626VaultTest:testMintZero() (gas: 41195) ERC4626VaultTest:testMultipleMintDepositRedeemWithdraw() (gas: 376794) -ERC4626VaultTest:testPermitBadChainId() (gas: 43414) -ERC4626VaultTest:testPermitBadNonce() (gas: 40494) +ERC4626VaultTest:testPermitBadChainId() (gas: 43428) +ERC4626VaultTest:testPermitBadNonce() (gas: 40508) ERC4626VaultTest:testPermitExpiredDeadline() (gas: 17018) -ERC4626VaultTest:testPermitOtherSignature() (gas: 41436) -ERC4626VaultTest:testPermitReplaySignature() (gas: 73273) -ERC4626VaultTest:testPermitSuccess() (gas: 69604) +ERC4626VaultTest:testPermitOtherSignature() (gas: 41450) +ERC4626VaultTest:testPermitReplaySignature() (gas: 73301) +ERC4626VaultTest:testPermitSuccess() (gas: 69618) ERC4626VaultTest:testRedeemInsufficientShares() (gas: 131070) ERC4626VaultTest:testRedeemWithNoShares() (gas: 13336) ERC4626VaultTest:testSingleDepositWithdraw() (gas: 177877) @@ -429,30 +429,30 @@ ERC4626VaultTest:testVaultInteractionsForSomeoneElse() (gas: 224109) ERC4626VaultTest:testWithdrawInsufficientAllowance() (gas: 122385) ERC4626VaultTest:testWithdrawInsufficientAssets() (gas: 117790) ERC4626VaultTest:testWithdrawWithNoAssets() (gas: 21277) -ERC4626VaultTest:test_RT_deposit_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472198, ~: 473184) -ERC4626VaultTest:test_RT_deposit_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474184, ~: 474414) -ERC4626VaultTest:test_RT_mint_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 471791, ~: 473276) -ERC4626VaultTest:test_RT_mint_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473711, ~: 474484) -ERC4626VaultTest:test_RT_redeem_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472614, ~: 473263) -ERC4626VaultTest:test_RT_redeem_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472712, ~: 473336) -ERC4626VaultTest:test_RT_withdraw_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473783, ~: 474432) -ERC4626VaultTest:test_RT_withdraw_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473898, ~: 474639) -ERC4626VaultTest:test_asset((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424188, ~: 426310) -ERC4626VaultTest:test_convertToAssets((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 429133, ~: 430567) -ERC4626VaultTest:test_convertToShares((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 429131, ~: 430568) -ERC4626VaultTest:test_deposit((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 469788, ~: 471125) -ERC4626VaultTest:test_maxDeposit((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424182, ~: 426304) -ERC4626VaultTest:test_maxMint((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424225, ~: 426347) -ERC4626VaultTest:test_maxRedeem((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424322, ~: 426444) -ERC4626VaultTest:test_maxWithdraw((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 425768, ~: 427680) -ERC4626VaultTest:test_mint((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 469840, ~: 471144) -ERC4626VaultTest:test_previewDeposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 464611, ~: 465784) -ERC4626VaultTest:test_previewMint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 464359, ~: 465966) -ERC4626VaultTest:test_previewRedeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 467276, ~: 467295) -ERC4626VaultTest:test_previewWithdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 468194, ~: 468552) -ERC4626VaultTest:test_redeem((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 472973, ~: 473835) -ERC4626VaultTest:test_totalAssets((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424771, ~: 426893) -ERC4626VaultTest:test_withdraw((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 474616, ~: 475028) +ERC4626VaultTest:test_RT_deposit_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472259, ~: 473187) +ERC4626VaultTest:test_RT_deposit_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474270, ~: 474415) +ERC4626VaultTest:test_RT_mint_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 471846, ~: 473277) +ERC4626VaultTest:test_RT_mint_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473554, ~: 474486) +ERC4626VaultTest:test_RT_redeem_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472597, ~: 473234) +ERC4626VaultTest:test_RT_redeem_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472696, ~: 473317) +ERC4626VaultTest:test_RT_withdraw_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473800, ~: 474429) +ERC4626VaultTest:test_RT_withdraw_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473919, ~: 474552) +ERC4626VaultTest:test_asset((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424202, ~: 426310) +ERC4626VaultTest:test_convertToAssets((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 429155, ~: 430583) +ERC4626VaultTest:test_convertToShares((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 429160, ~: 430570) +ERC4626VaultTest:test_deposit((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 469793, ~: 471125) +ERC4626VaultTest:test_maxDeposit((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424197, ~: 426304) +ERC4626VaultTest:test_maxMint((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424239, ~: 426347) +ERC4626VaultTest:test_maxRedeem((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424337, ~: 426444) +ERC4626VaultTest:test_maxWithdraw((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 425784, ~: 427687) +ERC4626VaultTest:test_mint((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 469871, ~: 471146) +ERC4626VaultTest:test_previewDeposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 464671, ~: 465787) +ERC4626VaultTest:test_previewMint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 464414, ~: 465967) +ERC4626VaultTest:test_previewRedeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 467349, ~: 467509) +ERC4626VaultTest:test_previewWithdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 468415, ~: 468555) +ERC4626VaultTest:test_redeem((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 472977, ~: 473832) +ERC4626VaultTest:test_totalAssets((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424786, ~: 426893) +ERC4626VaultTest:test_withdraw((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 474757, ~: 475025) ERC721Invariants:statefulFuzzOwner() (runs: 256, calls: 3840, reverts: 3484) ERC721Invariants:statefulFuzzTotalSupply() (runs: 256, calls: 3840, reverts: 3484) ERC721Test:testApproveClearingApprovalWithNoPriorApproval() (gas: 177097) @@ -474,44 +474,44 @@ ERC721Test:testBurnSuccessViaApproveAndSetApprovalForAll() (gas: 371362) ERC721Test:testCachedDomainSeparator() (gas: 10621) ERC721Test:testDomainSeparator() (gas: 11909) ERC721Test:testEIP712Domain() (gas: 18235) -ERC721Test:testFuzzApproveClearingApprovalWithNoPriorApproval(address,address) (runs: 256, μ: 196767, ~: 196777) -ERC721Test:testFuzzApproveClearingApprovalWithPriorApproval(address,address) (runs: 256, μ: 184411, ~: 184421) +ERC721Test:testFuzzApproveClearingApprovalWithNoPriorApproval(address,address) (runs: 256, μ: 196777, ~: 196777) +ERC721Test:testFuzzApproveClearingApprovalWithPriorApproval(address,address) (runs: 256, μ: 184421, ~: 184421) ERC721Test:testFuzzApproveFromNonOwner(address) (runs: 256, μ: 172049, ~: 172049) ERC721Test:testFuzzApproveFromOperatorAddress(address,address,address) (runs: 256, μ: 222915, ~: 222915) -ERC721Test:testFuzzApproveWithNoPriorApproval(address,address) (runs: 256, μ: 196767, ~: 196777) -ERC721Test:testFuzzApproveWithPriorApproval(address,address) (runs: 256, μ: 204296, ~: 204306) -ERC721Test:testFuzzBurnSuccess(address) (runs: 256, μ: 305341, ~: 305335) -ERC721Test:testFuzzDomainSeparator(uint8) (runs: 256, μ: 12028, ~: 12056) -ERC721Test:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 21706, ~: 21744) -ERC721Test:testFuzzGetApprovedApprovedTokenId(address,address) (runs: 256, μ: 194337, ~: 194347) -ERC721Test:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 200560, ~: 200554) -ERC721Test:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 227008, ~: 227009) +ERC721Test:testFuzzApproveWithNoPriorApproval(address,address) (runs: 256, μ: 196777, ~: 196777) +ERC721Test:testFuzzApproveWithPriorApproval(address,address) (runs: 256, μ: 204306, ~: 204306) +ERC721Test:testFuzzBurnSuccess(address) (runs: 256, μ: 305349, ~: 305335) +ERC721Test:testFuzzDomainSeparator(uint8) (runs: 256, μ: 12027, ~: 12056) +ERC721Test:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 21708, ~: 21758) +ERC721Test:testFuzzGetApprovedApprovedTokenId(address,address) (runs: 256, μ: 194347, ~: 194347) +ERC721Test:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 200574, ~: 200568) +ERC721Test:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 227022, ~: 227023) ERC721Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13974, ~: 13974) ERC721Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48629, ~: 48615) ERC721Test:testFuzzSafeMintNonMinter(address) (runs: 256, μ: 15677, ~: 15677) -ERC721Test:testFuzzSafeMintSuccess(address[]) (runs: 256, μ: 21429618, ~: 21659038) -ERC721Test:testFuzzSafeTransferFromWithData(address,address,address,bytes) (runs: 256, μ: 1433678, ~: 1433885) +ERC721Test:testFuzzSafeMintSuccess(address[]) (runs: 256, μ: 21380018, ~: 21311099) +ERC721Test:testFuzzSafeTransferFromWithData(address,address,address,bytes) (runs: 256, μ: 1433790, ~: 1433893) ERC721Test:testFuzzSetApprovalForAllSuccess(address,address) (runs: 256, μ: 189156, ~: 189156) ERC721Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 15520, ~: 15521) ERC721Test:testFuzzSetMinterSuccess(string) (runs: 256, μ: 33624, ~: 33631) -ERC721Test:testFuzzTokenByIndex(address,string[]) (runs: 256, μ: 23225063, ~: 22918422) -ERC721Test:testFuzzTotalSupply(address,string[]) (runs: 256, μ: 23033252, ~: 22729467) -ERC721Test:testFuzzTransferFrom(address,address,address) (runs: 256, μ: 564784, ~: 564760) +ERC721Test:testFuzzTokenByIndex(address,string[]) (runs: 256, μ: 23220111, ~: 22918422) +ERC721Test:testFuzzTotalSupply(address,string[]) (runs: 256, μ: 23028334, ~: 22729467) +ERC721Test:testFuzzTransferFrom(address,address,address) (runs: 256, μ: 564786, ~: 564760) ERC721Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14040, ~: 14040) ERC721Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 75707, ~: 75676) ERC721Test:testGetApprovedApprovedTokenId() (gas: 193886) ERC721Test:testGetApprovedInvalidTokenId() (gas: 11076) ERC721Test:testGetApprovedNotApprovedTokenId() (gas: 170325) ERC721Test:testHasOwner() (gas: 12626) -ERC721Test:testInitialSetup() (gas: 2506119) +ERC721Test:testInitialSetup() (gas: 2506919) ERC721Test:testOwnerOf() (gas: 166033) ERC721Test:testOwnerOfInvalidTokenId() (gas: 11009) -ERC721Test:testPermitBadChainId() (gas: 199351) -ERC721Test:testPermitBadNonce() (gas: 196563) +ERC721Test:testPermitBadChainId() (gas: 199365) +ERC721Test:testPermitBadNonce() (gas: 196577) ERC721Test:testPermitExpiredDeadline() (gas: 169912) -ERC721Test:testPermitOtherSignature() (gas: 197421) -ERC721Test:testPermitReplaySignature() (gas: 229707) -ERC721Test:testPermitSuccess() (gas: 226151) +ERC721Test:testPermitOtherSignature() (gas: 197435) +ERC721Test:testPermitReplaySignature() (gas: 229735) +ERC721Test:testPermitSuccess() (gas: 226165) ERC721Test:testRenounceOwnershipNonOwner() (gas: 10901) ERC721Test:testRenounceOwnershipSuccess() (gas: 22880) ERC721Test:testSafeMintNonMinter() (gas: 13011) @@ -551,7 +551,7 @@ ERC721Test:testTokenOfOwnerByIndexReverts() (gas: 545656) ERC721Test:testTokenURIAfterBurning() (gas: 138536) ERC721Test:testTokenURIDefault() (gas: 168178) ERC721Test:testTokenURIInvalidTokenId() (gas: 13114) -ERC721Test:testTokenURINoBaseURI() (gas: 2625585) +ERC721Test:testTokenURINoBaseURI() (gas: 2626385) ERC721Test:testTokenURINoTokenUri() (gas: 125681) ERC721Test:testTotalSupply() (gas: 328172) ERC721Test:testTransferFrom() (gas: 574008) @@ -662,6 +662,16 @@ P256Test:testVerifyWithTooHighSValue() (gas: 9278) P256Test:testVerifyWithValidSignature() (gas: 554171) P256Test:testVerifyWithZeroInputs() (gas: 8683) P256Test:testVerifyWycheproofData() (gas: 351057996) +PausableInvariants:statefulFuzzPaused() (runs: 256, calls: 3840, reverts: 1897) +PausableTest:testFuzzPauseSuccess(address) (runs: 256, μ: 34633, ~: 34633) +PausableTest:testFuzzPauseWhilePaused(address) (runs: 256, μ: 37292, ~: 37292) +PausableTest:testFuzzUnpauseSuccess(address) (runs: 256, μ: 26990, ~: 26975) +PausableTest:testFuzzUnpauseWhileUnpaused(address) (runs: 256, μ: 29208, ~: 29193) +PausableTest:testInitialSetup() (gas: 10346) +PausableTest:testPauseSuccess() (gas: 36670) +PausableTest:testPauseWhilePaused() (gas: 39287) +PausableTest:testUnpauseSuccess() (gas: 28798) +PausableTest:testUnpauseWhileUnpaused() (gas: 30964) SignatureCheckerTest:testEIP1271NoIsValidSignatureFunction() (gas: 18844) SignatureCheckerTest:testEIP1271WithInvalidSignature(bytes,string) (runs: 256, μ: 23633, ~: 23626) SignatureCheckerTest:testEIP1271WithInvalidSignature1() (gas: 29770) @@ -669,16 +679,16 @@ SignatureCheckerTest:testEIP1271WithInvalidSignature2() (gas: 31459) SignatureCheckerTest:testEIP1271WithInvalidSigner() (gas: 29848) SignatureCheckerTest:testEIP1271WithMaliciousWallet() (gas: 19745) SignatureCheckerTest:testEIP1271WithValidSignature() (gas: 29757) -SignatureCheckerTest:testEOAWithInvalidSignature1() (gas: 19403) -SignatureCheckerTest:testEOAWithInvalidSignature2() (gas: 23064) -SignatureCheckerTest:testEOAWithInvalidSigner() (gas: 19495) +SignatureCheckerTest:testEOAWithInvalidSignature1() (gas: 19417) +SignatureCheckerTest:testEOAWithInvalidSignature2() (gas: 23078) +SignatureCheckerTest:testEOAWithInvalidSigner() (gas: 19509) SignatureCheckerTest:testEOAWithTooHighSValue() (gas: 20013) -SignatureCheckerTest:testEOAWithValidSignature() (gas: 19411) +SignatureCheckerTest:testEOAWithValidSignature() (gas: 19425) SignatureCheckerTest:testFuzzEIP1271WithInvalidSigner(string,string) (runs: 256, μ: 31672, ~: 31668) SignatureCheckerTest:testFuzzEIP1271WithValidSignature(string) (runs: 256, μ: 30337, ~: 30331) SignatureCheckerTest:testFuzzEOAWithInvalidSignature(bytes,string) (runs: 256, μ: 16395, ~: 16393) -SignatureCheckerTest:testFuzzEOAWithInvalidSigner(string,string) (runs: 256, μ: 20409, ~: 20410) -SignatureCheckerTest:testFuzzEOAWithValidSignature(string,string) (runs: 256, μ: 20341, ~: 20342) +SignatureCheckerTest:testFuzzEOAWithInvalidSigner(string,string) (runs: 256, μ: 20423, ~: 20424) +SignatureCheckerTest:testFuzzEOAWithValidSignature(string,string) (runs: 256, μ: 20355, ~: 20356) SignatureCheckerTest:testInitialSetup() (gas: 8356) TimelockControllerInvariants:statefulFuzzExecutedLessThanOrEqualToScheduled() (runs: 256, calls: 3840, reverts: 1315) TimelockControllerInvariants:statefulFuzzExecutedProposalCancellation() (runs: 256, calls: 3840, reverts: 1251) @@ -686,7 +696,7 @@ TimelockControllerInvariants:statefulFuzzExecutingCancelledProposal() (runs: 256 TimelockControllerInvariants:statefulFuzzExecutingNotReadyProposal() (runs: 256, calls: 3840, reverts: 1293) TimelockControllerInvariants:statefulFuzzOnceProposalExecution() (runs: 256, calls: 3840, reverts: 1253) TimelockControllerInvariants:statefulFuzzProposalsExecutedMatchCount() (runs: 256, calls: 3840, reverts: 1316) -TimelockControllerInvariants:statefulFuzzSumOfProposals() (runs: 256, calls: 3840, reverts: 1315) +TimelockControllerInvariants:statefulFuzzSumOfProposals() (runs: 256, calls: 3840, reverts: 1316) TimelockControllerTest:testAdminCannotBatchExecute() (gas: 750632) TimelockControllerTest:testAdminCannotBatchSchedule() (gas: 748419) TimelockControllerTest:testAdminCannotCancel() (gas: 13369) @@ -729,7 +739,7 @@ TimelockControllerTest:testFuzzHashOperation(address,uint256,bytes,bytes32,bytes TimelockControllerTest:testFuzzHashOperationBatch(address[],uint256[],bytes[],bytes32,bytes32) (runs: 256, μ: 1826836, ~: 1817245) TimelockControllerTest:testFuzzOperationValue(uint256) (runs: 256, μ: 111956, ~: 111792) TimelockControllerTest:testHandleERC1155() (gas: 41560525) -TimelockControllerTest:testHandleERC721() (gas: 7154235) +TimelockControllerTest:testHandleERC721() (gas: 7155035) TimelockControllerTest:testHashOperation() (gas: 12365) TimelockControllerTest:testHashOperationBatch() (gas: 1525338) TimelockControllerTest:testInitialSetup() (gas: 4325125) diff --git a/.gas-snapshot-venom b/.gas-snapshot-venom index 2a3fe164..30ab8761 100644 --- a/.gas-snapshot-venom +++ b/.gas-snapshot-venom @@ -1,5 +1,5 @@ -Vyper version: 0.4.1b5+commit.9db15462 -Forge version: forge 0.3.0 (6f81e76 2025-01-11T00:21:24.528660762Z) +Vyper version: 0.4.1rc2+commit.762eec68 +Forge version: forge 0.3.1-nightly (64c2370 2025-01-21T15:57:15.994668323Z) Vyper config: { "optimize": "gas", @@ -49,35 +49,35 @@ AccessControlTest:testSupportsInterfaceInvalidInterfaceIdGasCost() (gas: 9196) AccessControlTest:testSupportsInterfaceSuccess() (gas: 9514) AccessControlTest:testSupportsInterfaceSuccessGasCost() (gas: 9140) Base64Test:testDataLengthMismatch() (gas: 113324) -Base64Test:testDecodeEmptyString() (gas: 105832) -Base64Test:testDecodeSafeUrl() (gas: 359200) -Base64Test:testDecodeSentence() (gas: 538352) -Base64Test:testDecodeSingleCharacter() (gas: 208544) -Base64Test:testDecodeWithDoublePadding() (gas: 272983) -Base64Test:testDecodeWithNoPadding() (gas: 231291) -Base64Test:testDecodeWithSinglePadding() (gas: 240451) -Base64Test:testEncodeEmptyString() (gas: 171946) -Base64Test:testEncodeSafeUrl() (gas: 193407) -Base64Test:testEncodeSentence() (gas: 216761) -Base64Test:testEncodeSingleCharacter() (gas: 178257) -Base64Test:testEncodeWithDoublePadding() (gas: 183080) -Base64Test:testEncodeWithNoPadding() (gas: 182487) -Base64Test:testEncodeWithSinglePadding() (gas: 183227) +Base64Test:testDecodeEmptyString() (gas: 105788) +Base64Test:testDecodeSafeUrl() (gas: 358877) +Base64Test:testDecodeSentence() (gas: 537586) +Base64Test:testDecodeSingleCharacter() (gas: 208378) +Base64Test:testDecodeWithDoublePadding() (gas: 272697) +Base64Test:testDecodeWithNoPadding() (gas: 230981) +Base64Test:testDecodeWithSinglePadding() (gas: 240165) +Base64Test:testEncodeEmptyString() (gas: 171902) +Base64Test:testEncodeSafeUrl() (gas: 192653) +Base64Test:testEncodeSentence() (gas: 215207) +Base64Test:testEncodeSingleCharacter() (gas: 177983) +Base64Test:testEncodeWithDoublePadding() (gas: 182646) +Base64Test:testEncodeWithNoPadding() (gas: 182097) +Base64Test:testEncodeWithSinglePadding() (gas: 182793) BatchDistributorInvariants:statefulFuzzNoEtherBalance() (runs: 256, calls: 3840, reverts: 3830) BatchDistributorInvariants:statefulFuzzNoTokenBalance() (runs: 256, calls: 3840, reverts: 3830) -BatchDistributorTest:testDistributeEtherMultipleAddressesSuccess() (gas: 135511) -BatchDistributorTest:testDistributeEtherOneAddressSuccess() (gas: 61649) -BatchDistributorTest:testDistributeEtherReentrancy() (gas: 1646119) -BatchDistributorTest:testDistributeEtherRevertWithInsufficientFunds() (gas: 65222) -BatchDistributorTest:testDistributeEtherRevertWithNoFallbackFunctionForMsgSender() (gas: 141057) -BatchDistributorTest:testDistributeEtherRevertWithNoFallbackFunctionForReceipt() (gas: 36613) -BatchDistributorTest:testDistributeEtherSendsBackExcessiveEther() (gas: 170872) -BatchDistributorTest:testDistributeTokenMultipleAddressesSuccess() (gas: 617345) -BatchDistributorTest:testDistributeTokenOneAddressSuccess() (gas: 579351) -BatchDistributorTest:testDistributeTokenRevertWithInsufficientAllowance() (gas: 573876) -BatchDistributorTest:testDistributeTokenRevertWithInsufficientBalance() (gas: 574529) -BatchDistributorTest:testFuzzDistributeEtherMultipleAddressesSuccess(((address,uint256)[]),uint256) (runs: 256, μ: 1761667, ~: 1784004) -BatchDistributorTest:testFuzzDistributeTokenMultipleAddressesSuccess(((address,uint256)[]),address,uint256) (runs: 256, μ: 1325695, ~: 1251160) +BatchDistributorTest:testDistributeEtherMultipleAddressesSuccess() (gas: 135493) +BatchDistributorTest:testDistributeEtherOneAddressSuccess() (gas: 61631) +BatchDistributorTest:testDistributeEtherReentrancy() (gas: 1646060) +BatchDistributorTest:testDistributeEtherRevertWithInsufficientFunds() (gas: 65204) +BatchDistributorTest:testDistributeEtherRevertWithNoFallbackFunctionForMsgSender() (gas: 141039) +BatchDistributorTest:testDistributeEtherRevertWithNoFallbackFunctionForReceipt() (gas: 36595) +BatchDistributorTest:testDistributeEtherSendsBackExcessiveEther() (gas: 170854) +BatchDistributorTest:testDistributeTokenMultipleAddressesSuccess() (gas: 617325) +BatchDistributorTest:testDistributeTokenOneAddressSuccess() (gas: 579331) +BatchDistributorTest:testDistributeTokenRevertWithInsufficientAllowance() (gas: 573861) +BatchDistributorTest:testDistributeTokenRevertWithInsufficientBalance() (gas: 574514) +BatchDistributorTest:testFuzzDistributeEtherMultipleAddressesSuccess(((address,uint256)[]),uint256) (runs: 256, μ: 1750204, ~: 1783630) +BatchDistributorTest:testFuzzDistributeTokenMultipleAddressesSuccess(((address,uint256)[]),address,uint256) (runs: 256, μ: 1325839, ~: 1251141) Create2AddressTest:testComputeAddress() (gas: 532201) Create2AddressTest:testComputeAddressSelf() (gas: 540879) Create2AddressTest:testFuzzComputeAddress(bytes32,address) (runs: 256, μ: 532795, ~: 532795) @@ -89,8 +89,8 @@ CreateAddressTest:testComputeAddressNonceUint24() (gas: 530469) CreateAddressTest:testComputeAddressNonceUint32() (gas: 530491) CreateAddressTest:testComputeAddressNonceUint40() (gas: 530471) CreateAddressTest:testComputeAddressNonceUint48() (gas: 530472) -CreateAddressTest:testComputeAddressNonceUint56() (gas: 530539) -CreateAddressTest:testComputeAddressNonceUint64() (gas: 530673) +CreateAddressTest:testComputeAddressNonceUint56() (gas: 530540) +CreateAddressTest:testComputeAddressNonceUint64() (gas: 530672) CreateAddressTest:testComputeAddressNonceUint8() (gas: 530424) CreateAddressTest:testComputeAddressRevertTooHighNonce() (gas: 10321) CreateAddressTest:testComputeAddressSelfNonce0x7f() (gas: 534666) @@ -99,153 +99,153 @@ CreateAddressTest:testComputeAddressSelfNonceUint24() (gas: 534848) CreateAddressTest:testComputeAddressSelfNonceUint32() (gas: 534917) CreateAddressTest:testComputeAddressSelfNonceUint40() (gas: 534963) CreateAddressTest:testComputeAddressSelfNonceUint48() (gas: 534986) -CreateAddressTest:testComputeAddressSelfNonceUint56() (gas: 535032) -CreateAddressTest:testComputeAddressSelfNonceUint64() (gas: 535124) +CreateAddressTest:testComputeAddressSelfNonceUint56() (gas: 535033) +CreateAddressTest:testComputeAddressSelfNonceUint64() (gas: 535123) CreateAddressTest:testComputeAddressSelfNonceUint8() (gas: 534785) CreateAddressTest:testComputeAddressSelfRevertTooHighNonce() (gas: 8949) -CreateAddressTest:testFuzzComputeAddressNonce0x7f(uint64,address) (runs: 256, μ: 533309, ~: 533391) -CreateAddressTest:testFuzzComputeAddressNonceUint16(uint64,address) (runs: 256, μ: 532702, ~: 532966) -CreateAddressTest:testFuzzComputeAddressNonceUint24(uint64,address) (runs: 256, μ: 532841, ~: 532921) -CreateAddressTest:testFuzzComputeAddressNonceUint32(uint64,address) (runs: 256, μ: 532822, ~: 532945) -CreateAddressTest:testFuzzComputeAddressNonceUint40(uint64,address) (runs: 256, μ: 532951, ~: 533010) -CreateAddressTest:testFuzzComputeAddressNonceUint48(uint64,address) (runs: 256, μ: 532911, ~: 533011) -CreateAddressTest:testFuzzComputeAddressNonceUint56(uint64,address) (runs: 256, μ: 532980, ~: 533058) -CreateAddressTest:testFuzzComputeAddressNonceUint64(uint64,address) (runs: 256, μ: 533033, ~: 533119) -CreateAddressTest:testFuzzComputeAddressNonceUint8(uint64,address) (runs: 256, μ: 532754, ~: 532805) -CreateAddressTest:testFuzzComputeAddressRevertTooHighNonce(uint256,address) (runs: 256, μ: 12778, ~: 13073) -CreateAddressTest:testFuzzComputeAddressSelfNonce0x7f(uint64) (runs: 256, μ: 539567, ~: 539628) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint16(uint64) (runs: 256, μ: 538768, ~: 539056) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint24(uint64) (runs: 256, μ: 539110, ~: 539191) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint32(uint64) (runs: 256, μ: 539097, ~: 539194) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint40(uint64) (runs: 256, μ: 539182, ~: 539260) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint48(uint64) (runs: 256, μ: 539174, ~: 539242) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint56(uint64) (runs: 256, μ: 539247, ~: 539307) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint64(uint64) (runs: 256, μ: 539361, ~: 539439) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint8(uint64) (runs: 256, μ: 538877, ~: 538927) -CreateAddressTest:testFuzzComputeAddressSelfRevertTooHighNonce(uint256) (runs: 256, μ: 12760, ~: 13073) +CreateAddressTest:testFuzzComputeAddressNonce0x7f(uint64,address) (runs: 256, μ: 533310, ~: 533391) +CreateAddressTest:testFuzzComputeAddressNonceUint16(uint64,address) (runs: 256, μ: 532706, ~: 532966) +CreateAddressTest:testFuzzComputeAddressNonceUint24(uint64,address) (runs: 256, μ: 532836, ~: 532921) +CreateAddressTest:testFuzzComputeAddressNonceUint32(uint64,address) (runs: 256, μ: 532823, ~: 532945) +CreateAddressTest:testFuzzComputeAddressNonceUint40(uint64,address) (runs: 256, μ: 532949, ~: 533010) +CreateAddressTest:testFuzzComputeAddressNonceUint48(uint64,address) (runs: 256, μ: 532910, ~: 533011) +CreateAddressTest:testFuzzComputeAddressNonceUint56(uint64,address) (runs: 256, μ: 532979, ~: 533059) +CreateAddressTest:testFuzzComputeAddressNonceUint64(uint64,address) (runs: 256, μ: 533028, ~: 533118) +CreateAddressTest:testFuzzComputeAddressNonceUint8(uint64,address) (runs: 256, μ: 532750, ~: 532805) +CreateAddressTest:testFuzzComputeAddressRevertTooHighNonce(uint256,address) (runs: 256, μ: 12783, ~: 13073) +CreateAddressTest:testFuzzComputeAddressSelfNonce0x7f(uint64) (runs: 256, μ: 539568, ~: 539628) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint16(uint64) (runs: 256, μ: 538756, ~: 539056) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint24(uint64) (runs: 256, μ: 539109, ~: 539191) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint32(uint64) (runs: 256, μ: 539110, ~: 539194) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint40(uint64) (runs: 256, μ: 539181, ~: 539260) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint48(uint64) (runs: 256, μ: 539173, ~: 539242) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint56(uint64) (runs: 256, μ: 539247, ~: 539308) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint64(uint64) (runs: 256, μ: 539358, ~: 539438) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint8(uint64) (runs: 256, μ: 538870, ~: 538927) +CreateAddressTest:testFuzzComputeAddressSelfRevertTooHighNonce(uint256) (runs: 256, μ: 12757, ~: 13073) ECDSATest:testFuzzRecoverWithInvalidSignature(bytes,string) (runs: 256, μ: 15374, ~: 15377) ECDSATest:testFuzzRecoverWithTooLongSignature(bytes,string) (runs: 256, μ: 13766, ~: 13769) -ECDSATest:testFuzzRecoverWithValidSignature(string,string) (runs: 256, μ: 21596, ~: 21594) -ECDSATest:testFuzzRecoverWithWrongMessage(string,string,bytes32) (runs: 256, μ: 21676, ~: 21679) -ECDSATest:testRecoverWith0x00Value() (gas: 14877) -ECDSATest:testRecoverWithArbitraryMessage() (gas: 20588) -ECDSATest:testRecoverWithCorrectVersion() (gas: 21039) -ECDSATest:testRecoverWithInvalidSignature() (gas: 14610) -ECDSATest:testRecoverWithTooHighSValue() (gas: 15700) +ECDSATest:testFuzzRecoverWithValidSignature(string,string) (runs: 256, μ: 21607, ~: 21605) +ECDSATest:testFuzzRecoverWithWrongMessage(string,string,bytes32) (runs: 256, μ: 21687, ~: 21690) +ECDSATest:testRecoverWith0x00Value() (gas: 14874) +ECDSATest:testRecoverWithArbitraryMessage() (gas: 20599) +ECDSATest:testRecoverWithCorrectVersion() (gas: 21050) +ECDSATest:testRecoverWithInvalidSignature() (gas: 14607) +ECDSATest:testRecoverWithTooHighSValue() (gas: 15683) ECDSATest:testRecoverWithTooLongSignature() (gas: 12553) ECDSATest:testRecoverWithTooShortSignature() (gas: 14170) -ECDSATest:testRecoverWithValidSignature() (gas: 20645) -ECDSATest:testRecoverWithWrongMessage() (gas: 20657) -ECDSATest:testRecoverWithWrongVersion() (gas: 14883) +ECDSATest:testRecoverWithValidSignature() (gas: 20656) +ECDSATest:testRecoverWithWrongMessage() (gas: 20668) +ECDSATest:testRecoverWithWrongVersion() (gas: 14880) EIP712DomainSeparatorTest:testCachedDomainSeparatorV4() (gas: 10552) EIP712DomainSeparatorTest:testDomainSeparatorV4() (gas: 11673) EIP712DomainSeparatorTest:testEIP712Domain() (gas: 17802) EIP712DomainSeparatorTest:testFuzzDomainSeparatorV4(uint8) (runs: 256, μ: 11823, ~: 11848) -EIP712DomainSeparatorTest:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 21147, ~: 21197) -EIP712DomainSeparatorTest:testFuzzHashTypedDataV4(address,address,uint256,uint256,uint64) (runs: 256, μ: 10566, ~: 10566) -EIP712DomainSeparatorTest:testHashTypedDataV4() (gas: 13042) +EIP712DomainSeparatorTest:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 21148, ~: 21197) +EIP712DomainSeparatorTest:testFuzzHashTypedDataV4(address,address,uint256,uint256,uint64) (runs: 256, μ: 10561, ~: 10561) +EIP712DomainSeparatorTest:testHashTypedDataV4() (gas: 13037) ERC1155Invariants:statefulFuzzOwner() (runs: 256, calls: 3840, reverts: 3480) -ERC1155Test:testBalanceOfBatchCase1() (gas: 261577) -ERC1155Test:testBalanceOfBatchCase2() (gas: 216147) -ERC1155Test:testBalanceOfBatchCase3() (gas: 35492) -ERC1155Test:testBalanceOfBatchLengthsMismatch() (gas: 23614) -ERC1155Test:testBalanceOfCase1() (gas: 137671) +ERC1155Test:testBalanceOfBatchCase1() (gas: 261523) +ERC1155Test:testBalanceOfBatchCase2() (gas: 216093) +ERC1155Test:testBalanceOfBatchCase3() (gas: 35458) +ERC1155Test:testBalanceOfBatchLengthsMismatch() (gas: 23588) +ERC1155Test:testBalanceOfCase1() (gas: 137661) ERC1155Test:testBalanceOfCase2() (gas: 21833) -ERC1155Test:testBurnAmountExceedsBalance() (gas: 116718) -ERC1155Test:testBurnBatchAmountExceedsBalance() (gas: 178208) -ERC1155Test:testBurnBatchByApprovedOperator() (gas: 231716) +ERC1155Test:testBurnAmountExceedsBalance() (gas: 116703) +ERC1155Test:testBurnBatchAmountExceedsBalance() (gas: 178167) +ERC1155Test:testBurnBatchByApprovedOperator() (gas: 231648) ERC1155Test:testBurnBatchByNotApprovedOperator() (gas: 22211) ERC1155Test:testBurnBatchFromZeroAddress() (gas: 18235) ERC1155Test:testBurnBatchLengthsMismatch() (gas: 26039) -ERC1155Test:testBurnBatchNonExistentTokenIds() (gas: 20072) -ERC1155Test:testBurnBatchSuccess() (gas: 196865) -ERC1155Test:testBurnByApprovedOperator() (gas: 186173) -ERC1155Test:testBurnByNotApprovedOperator() (gas: 138104) +ERC1155Test:testBurnBatchNonExistentTokenIds() (gas: 20067) +ERC1155Test:testBurnBatchSuccess() (gas: 196798) +ERC1155Test:testBurnByApprovedOperator() (gas: 186158) +ERC1155Test:testBurnByNotApprovedOperator() (gas: 138094) ERC1155Test:testBurnFromZeroAddress() (gas: 12598) -ERC1155Test:testBurnNonExistentTokenId() (gas: 16863) -ERC1155Test:testBurnSuccess() (gas: 130495) -ERC1155Test:testExistsAfterBatchBurn() (gas: 113244) -ERC1155Test:testExistsAfterBatchMint() (gas: 128391) -ERC1155Test:testExistsAfterSingleBurn() (gas: 125976) -ERC1155Test:testExistsAfterSingleMint() (gas: 110878) +ERC1155Test:testBurnNonExistentTokenId() (gas: 16858) +ERC1155Test:testBurnSuccess() (gas: 130480) +ERC1155Test:testExistsAfterBatchBurn() (gas: 113176) +ERC1155Test:testExistsAfterBatchMint() (gas: 128349) +ERC1155Test:testExistsAfterSingleBurn() (gas: 125961) +ERC1155Test:testExistsAfterSingleMint() (gas: 110868) ERC1155Test:testExistsBeforeMint() (gas: 10470) -ERC1155Test:testFuzzBurnBatchSuccess(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 114489, ~: 114477) -ERC1155Test:testFuzzBurnSuccess(address,address,uint256) (runs: 256, μ: 128903, ~: 128903) +ERC1155Test:testFuzzBurnBatchSuccess(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 114421, ~: 114411) +ERC1155Test:testFuzzBurnSuccess(address,address,uint256) (runs: 256, μ: 128878, ~: 128888) ERC1155Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13886, ~: 13886) ERC1155Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48707, ~: 48692) -ERC1155Test:testFuzzSafeBatchTransferFromByApprovedOperator(address,address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 196191, ~: 196170) -ERC1155Test:testFuzzSafeBatchTransferFromEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 160769, ~: 160738) -ERC1155Test:testFuzzSafeBatchTransferFromNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 528799, ~: 528799) -ERC1155Test:testFuzzSafeBatchTransferFromWithData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 529177, ~: 528869) -ERC1155Test:testFuzzSafeMintBatchEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 138216, ~: 138201) -ERC1155Test:testFuzzSafeMintBatchNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 500150, ~: 500150) +ERC1155Test:testFuzzSafeBatchTransferFromByApprovedOperator(address,address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 196102, ~: 196091) +ERC1155Test:testFuzzSafeBatchTransferFromEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 160690, ~: 160659) +ERC1155Test:testFuzzSafeBatchTransferFromNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 528688, ~: 528688) +ERC1155Test:testFuzzSafeBatchTransferFromWithData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 529071, ~: 529380) +ERC1155Test:testFuzzSafeMintBatchEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 138174, ~: 138159) +ERC1155Test:testFuzzSafeMintBatchNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 500076, ~: 500076) ERC1155Test:testFuzzSafeMintBatchNonMinter(address) (runs: 256, μ: 26729, ~: 26729) -ERC1155Test:testFuzzSafeMintBatchWithData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 500519, ~: 500353) -ERC1155Test:testFuzzSafeMintEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 144253, ~: 144223) -ERC1155Test:testFuzzSafeMintNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 506915, ~: 506915) +ERC1155Test:testFuzzSafeMintBatchWithData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 500448, ~: 500615) +ERC1155Test:testFuzzSafeMintEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 144243, ~: 144213) +ERC1155Test:testFuzzSafeMintNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 506905, ~: 506905) ERC1155Test:testFuzzSafeMintNonMinter(address) (runs: 256, μ: 29994, ~: 29994) -ERC1155Test:testFuzzSafeMintWithData(address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 508058, ~: 507687) -ERC1155Test:testFuzzSafeTransferFromByApprovedOperator(address,address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 193216, ~: 193182) -ERC1155Test:testFuzzSafeTransferFromEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 157881, ~: 157837) -ERC1155Test:testFuzzSafeTransferFromNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 585804, ~: 585804) -ERC1155Test:testFuzzSafeTransferFromWithData(address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 587906, ~: 587176) -ERC1155Test:testFuzzSetApprovalForAllRevoke(address,address) (runs: 256, μ: 31891, ~: 31859) +ERC1155Test:testFuzzSafeMintWithData(address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 508048, ~: 507677) +ERC1155Test:testFuzzSafeTransferFromByApprovedOperator(address,address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 193196, ~: 193172) +ERC1155Test:testFuzzSafeTransferFromEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 157871, ~: 157827) +ERC1155Test:testFuzzSafeTransferFromNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 585794, ~: 585794) +ERC1155Test:testFuzzSafeTransferFromWithData(address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 587896, ~: 587166) +ERC1155Test:testFuzzSetApprovalForAllRevoke(address,address) (runs: 256, μ: 31890, ~: 31859) ERC1155Test:testFuzzSetApprovalForAllSuccess(address,address) (runs: 256, μ: 45249, ~: 45249) ERC1155Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 15427, ~: 15428) ERC1155Test:testFuzzSetMinterSuccess(string) (runs: 256, μ: 33562, ~: 33569) ERC1155Test:testFuzzSetUriNonMinter(address) (runs: 256, μ: 14400, ~: 14400) -ERC1155Test:testFuzzTotalSupplyAfterBatchBurn(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 108100, ~: 108088) -ERC1155Test:testFuzzTotalSupplyAfterBatchMint(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 126366, ~: 126335) -ERC1155Test:testFuzzTotalSupplyAfterSingleBurn(address,uint256,bytes) (runs: 256, μ: 125962, ~: 125946) -ERC1155Test:testFuzzTotalSupplyAfterSingleMint(uint256,uint256,bytes) (runs: 256, μ: 84050, ~: 111534) +ERC1155Test:testFuzzTotalSupplyAfterBatchBurn(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 108033, ~: 108022) +ERC1155Test:testFuzzTotalSupplyAfterBatchMint(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 126325, ~: 126357) +ERC1155Test:testFuzzTotalSupplyAfterSingleBurn(address,uint256,bytes) (runs: 256, μ: 125957, ~: 125931) +ERC1155Test:testFuzzTotalSupplyAfterSingleMint(uint256,uint256,bytes) (runs: 256, μ: 82874, ~: 111521) ERC1155Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 13983, ~: 13983) ERC1155Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 75648, ~: 75616) ERC1155Test:testHasOwner() (gas: 12686) -ERC1155Test:testInitialSetup() (gas: 2833287) +ERC1155Test:testInitialSetup() (gas: 2815914) ERC1155Test:testRenounceOwnershipNonOwner() (gas: 10833) ERC1155Test:testRenounceOwnershipSuccess() (gas: 22881) -ERC1155Test:testSafeBatchTransferFromByApprovedOperator() (gas: 309539) -ERC1155Test:testSafeBatchTransferFromByNotApprovedOperator() (gas: 231248) -ERC1155Test:testSafeBatchTransferFromEOAReceiver() (gas: 272394) -ERC1155Test:testSafeBatchTransferFromInsufficientBalance() (gas: 237220) +ERC1155Test:testSafeBatchTransferFromByApprovedOperator() (gas: 309460) +ERC1155Test:testSafeBatchTransferFromByNotApprovedOperator() (gas: 231206) +ERC1155Test:testSafeBatchTransferFromEOAReceiver() (gas: 272331) +ERC1155Test:testSafeBatchTransferFromInsufficientBalance() (gas: 237173) ERC1155Test:testSafeBatchTransferFromLengthsMismatch() (gas: 35356) -ERC1155Test:testSafeBatchTransferFromNoData() (gas: 636687) -ERC1155Test:testSafeBatchTransferFromReceiverFunctionNotImplemented() (gas: 258044) -ERC1155Test:testSafeBatchTransferFromReceiverInvalidReturnIdentifier() (gas: 612274) -ERC1155Test:testSafeBatchTransferFromReceiverReverts() (gas: 605597) -ERC1155Test:testSafeBatchTransferFromReceiverRevertsOnlySingle() (gas: 636728) -ERC1155Test:testSafeBatchTransferFromToZeroAddress() (gas: 227948) -ERC1155Test:testSafeBatchTransferFromWithData() (gas: 637900) -ERC1155Test:testSafeMintBatchEOAReceiver() (gas: 233629) +ERC1155Test:testSafeBatchTransferFromNoData() (gas: 636576) +ERC1155Test:testSafeBatchTransferFromReceiverFunctionNotImplemented() (gas: 257956) +ERC1155Test:testSafeBatchTransferFromReceiverInvalidReturnIdentifier() (gas: 612163) +ERC1155Test:testSafeBatchTransferFromReceiverReverts() (gas: 605486) +ERC1155Test:testSafeBatchTransferFromReceiverRevertsOnlySingle() (gas: 636617) +ERC1155Test:testSafeBatchTransferFromToZeroAddress() (gas: 227906) +ERC1155Test:testSafeBatchTransferFromWithData() (gas: 637789) +ERC1155Test:testSafeMintBatchEOAReceiver() (gas: 233587) ERC1155Test:testSafeMintBatchLengthsMismatch() (gas: 38348) -ERC1155Test:testSafeMintBatchNoData() (gas: 597313) +ERC1155Test:testSafeMintBatchNoData() (gas: 597239) ERC1155Test:testSafeMintBatchNonMinter() (gas: 25532) -ERC1155Test:testSafeMintBatchOverflow() (gas: 235077) -ERC1155Test:testSafeMintBatchReceiverFunctionNotImplemented() (gas: 213846) -ERC1155Test:testSafeMintBatchReceiverInvalidReturnIdentifier() (gas: 577901) -ERC1155Test:testSafeMintBatchReceiverReverts() (gas: 571200) -ERC1155Test:testSafeMintBatchReceiverRevertsOnlySingle() (gas: 597290) +ERC1155Test:testSafeMintBatchOverflow() (gas: 235030) +ERC1155Test:testSafeMintBatchReceiverFunctionNotImplemented() (gas: 213772) +ERC1155Test:testSafeMintBatchReceiverInvalidReturnIdentifier() (gas: 577827) +ERC1155Test:testSafeMintBatchReceiverReverts() (gas: 571126) +ERC1155Test:testSafeMintBatchReceiverRevertsOnlySingle() (gas: 597216) ERC1155Test:testSafeMintBatchToZeroAddress() (gas: 26622) -ERC1155Test:testSafeMintBatchWithData() (gas: 597981) -ERC1155Test:testSafeMintEOAReceiver() (gas: 141095) -ERC1155Test:testSafeMintNoData() (gas: 503468) +ERC1155Test:testSafeMintBatchWithData() (gas: 597907) +ERC1155Test:testSafeMintEOAReceiver() (gas: 141085) +ERC1155Test:testSafeMintNoData() (gas: 503458) ERC1155Test:testSafeMintNonMinter() (gas: 28755) -ERC1155Test:testSafeMintOverflow() (gas: 84862) -ERC1155Test:testSafeMintReceiverFunctionNotImplemented() (gas: 132448) -ERC1155Test:testSafeMintReceiverInvalidReturnIdentifier() (gas: 493344) -ERC1155Test:testSafeMintReceiverReverts() (gas: 487035) +ERC1155Test:testSafeMintOverflow() (gas: 84852) +ERC1155Test:testSafeMintReceiverFunctionNotImplemented() (gas: 132438) +ERC1155Test:testSafeMintReceiverInvalidReturnIdentifier() (gas: 493334) +ERC1155Test:testSafeMintReceiverReverts() (gas: 487025) ERC1155Test:testSafeMintToZeroAddress() (gas: 29788) -ERC1155Test:testSafeMintWithData() (gas: 504727) -ERC1155Test:testSafeTransferFromByApprovedOperator() (gas: 193026) -ERC1155Test:testSafeTransferFromByNotApprovedOperator() (gas: 140444) -ERC1155Test:testSafeTransferFromEOAReceiver() (gas: 156609) -ERC1155Test:testSafeTransferFromInsufficientBalance() (gas: 82350) -ERC1155Test:testSafeTransferFromNoData() (gas: 583429) -ERC1155Test:testSafeTransferFromReceiverFunctionNotImplemented() (gas: 193471) -ERC1155Test:testSafeTransferFromReceiverInvalidReturnIdentifier() (gas: 554424) -ERC1155Test:testSafeTransferFromReceiverReverts() (gas: 548094) -ERC1155Test:testSafeTransferFromToZeroAddress() (gas: 81443) -ERC1155Test:testSafeTransferFromWithData() (gas: 585758) +ERC1155Test:testSafeMintWithData() (gas: 504717) +ERC1155Test:testSafeTransferFromByApprovedOperator() (gas: 193016) +ERC1155Test:testSafeTransferFromByNotApprovedOperator() (gas: 140434) +ERC1155Test:testSafeTransferFromEOAReceiver() (gas: 156599) +ERC1155Test:testSafeTransferFromInsufficientBalance() (gas: 82345) +ERC1155Test:testSafeTransferFromNoData() (gas: 583419) +ERC1155Test:testSafeTransferFromReceiverFunctionNotImplemented() (gas: 193461) +ERC1155Test:testSafeTransferFromReceiverInvalidReturnIdentifier() (gas: 554414) +ERC1155Test:testSafeTransferFromReceiverReverts() (gas: 548084) +ERC1155Test:testSafeTransferFromToZeroAddress() (gas: 81438) +ERC1155Test:testSafeTransferFromWithData() (gas: 585748) ERC1155Test:testSetApprovalForAllRevoke() (gas: 33813) ERC1155Test:testSetApprovalForAllSuccess() (gas: 47571) ERC1155Test:testSetApprovalForAllToSelf() (gas: 10775) @@ -253,27 +253,27 @@ ERC1155Test:testSetMinterNonOwner() (gas: 12451) ERC1155Test:testSetMinterRemoveOwnerAddress() (gas: 13621) ERC1155Test:testSetMinterSuccess() (gas: 33431) ERC1155Test:testSetMinterToZeroAddress() (gas: 15639) -ERC1155Test:testSetUri() (gas: 67366) -ERC1155Test:testSetUriEmpty() (gas: 25794) +ERC1155Test:testSetUri() (gas: 67299) +ERC1155Test:testSetUriEmpty() (gas: 25769) ERC1155Test:testSetUriNonMinter() (gas: 13218) ERC1155Test:testSupportsInterfaceInvalidInterfaceId() (gas: 8487) ERC1155Test:testSupportsInterfaceInvalidInterfaceIdGasCost() (gas: 9344) ERC1155Test:testSupportsInterfaceSuccess() (gas: 10870) ERC1155Test:testSupportsInterfaceSuccessGasCost() (gas: 9350) -ERC1155Test:testTotalSupplyAfterBatchBurn() (gas: 113275) -ERC1155Test:testTotalSupplyAfterBatchMint() (gas: 128342) -ERC1155Test:testTotalSupplyAfterSingleBurn() (gas: 122696) -ERC1155Test:testTotalSupplyAfterSingleMint() (gas: 110817) +ERC1155Test:testTotalSupplyAfterBatchBurn() (gas: 113208) +ERC1155Test:testTotalSupplyAfterBatchMint() (gas: 128300) +ERC1155Test:testTotalSupplyAfterSingleBurn() (gas: 122681) +ERC1155Test:testTotalSupplyAfterSingleMint() (gas: 110807) ERC1155Test:testTotalSupplyBeforeMint() (gas: 10466) ERC1155Test:testTransferOwnershipNonOwner() (gas: 12373) ERC1155Test:testTransferOwnershipSuccess() (gas: 53811) ERC1155Test:testTransferOwnershipToZeroAddress() (gas: 15549) -ERC1155Test:testUriBaseAndTokenUriNotSet() (gas: 2792446) -ERC1155Test:testUriBaseAndTokenUriSet() (gas: 64198) -ERC1155Test:testUriNoBaseURI() (gas: 2841893) -ERC1155Test:testUriNoTokenUri() (gas: 18727) -ERC20Invariants:statefulFuzzOwner() (runs: 256, calls: 3840, reverts: 3445) -ERC20Invariants:statefulFuzzTotalSupply() (runs: 256, calls: 3840, reverts: 3445) +ERC1155Test:testUriBaseAndTokenUriNotSet() (gas: 2775108) +ERC1155Test:testUriBaseAndTokenUriSet() (gas: 64131) +ERC1155Test:testUriNoBaseURI() (gas: 2824545) +ERC1155Test:testUriNoTokenUri() (gas: 18707) +ERC20Invariants:statefulFuzzOwner() (runs: 256, calls: 3840, reverts: 3444) +ERC20Invariants:statefulFuzzTotalSupply() (runs: 256, calls: 3840, reverts: 3444) ERC20Test:testApproveExceedingBalanceCase1() (gas: 40811) ERC20Test:testApproveExceedingBalanceCase2() (gas: 47807) ERC20Test:testApproveFromZeroAddress() (gas: 12926) @@ -281,13 +281,13 @@ ERC20Test:testApproveSuccessCase1() (gas: 43489) ERC20Test:testApproveSuccessCase2() (gas: 50589) ERC20Test:testApproveToZeroAddress() (gas: 16437) ERC20Test:testBalanceOf() (gas: 18520) -ERC20Test:testBurnFromExceedingBalance() (gas: 30917) -ERC20Test:testBurnFromFromZeroAddress() (gas: 15315) -ERC20Test:testBurnFromInsufficientAllowanceCase1() (gas: 41436) -ERC20Test:testBurnFromInsufficientAllowanceCase2() (gas: 41467) -ERC20Test:testBurnFromSuccessCase1() (gas: 40025) -ERC20Test:testBurnFromSuccessCase2() (gas: 65600) -ERC20Test:testBurnFromUnlimitedAllowance() (gas: 50426) +ERC20Test:testBurnFromExceedingBalance() (gas: 30912) +ERC20Test:testBurnFromFromZeroAddress() (gas: 15309) +ERC20Test:testBurnFromInsufficientAllowanceCase1() (gas: 41430) +ERC20Test:testBurnFromInsufficientAllowanceCase2() (gas: 41461) +ERC20Test:testBurnFromSuccessCase1() (gas: 40019) +ERC20Test:testBurnFromSuccessCase2() (gas: 65594) +ERC20Test:testBurnFromUnlimitedAllowance() (gas: 50420) ERC20Test:testBurnFromZeroAddress() (gas: 11217) ERC20Test:testBurnInvalidAmount() (gas: 14392) ERC20Test:testBurnSuccessCase1() (gas: 25791) @@ -296,38 +296,38 @@ ERC20Test:testCachedDomainSeparator() (gas: 10598) ERC20Test:testDomainSeparator() (gas: 11798) ERC20Test:testEIP712Domain() (gas: 17990) ERC20Test:testFuzzApproveSuccess(address,uint256) (runs: 256, μ: 41124, ~: 41202) -ERC20Test:testFuzzBurnFromInsufficientAllowance(address,uint256,uint8) (runs: 256, μ: 205960, ~: 205971) -ERC20Test:testFuzzBurnFromSuccess(address,uint256) (runs: 256, μ: 339794, ~: 339657) +ERC20Test:testFuzzBurnFromInsufficientAllowance(address,uint256,uint8) (runs: 256, μ: 205957, ~: 205966) +ERC20Test:testFuzzBurnFromSuccess(address,uint256) (runs: 256, μ: 339793, ~: 339653) ERC20Test:testFuzzBurnInvalidAmount(address,uint256) (runs: 256, μ: 16368, ~: 16368) -ERC20Test:testFuzzBurnSuccessCase(uint256) (runs: 256, μ: 314420, ~: 314204) +ERC20Test:testFuzzBurnSuccessCase(uint256) (runs: 256, μ: 314416, ~: 314204) ERC20Test:testFuzzDomainSeparator(uint8) (runs: 256, μ: 12010, ~: 12034) ERC20Test:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 21468, ~: 21518) ERC20Test:testFuzzMintNonMinter(string,uint256) (runs: 256, μ: 12876, ~: 12869) -ERC20Test:testFuzzMintSuccess(string,uint256) (runs: 256, μ: 55385, ~: 56048) -ERC20Test:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 44433, ~: 44427) -ERC20Test:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 70435, ~: 70436) +ERC20Test:testFuzzMintSuccess(string,uint256) (runs: 256, μ: 55388, ~: 56058) +ERC20Test:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 44442, ~: 44436) +ERC20Test:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 70444, ~: 70445) ERC20Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13892, ~: 13892) ERC20Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48643, ~: 48628) ERC20Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 15458, ~: 15459) ERC20Test:testFuzzSetMinterSuccess(string) (runs: 256, μ: 33591, ~: 33598) -ERC20Test:testFuzzTransferFromInsufficientAllowance(address,address,uint256,uint8) (runs: 256, μ: 204596, ~: 204580) -ERC20Test:testFuzzTransferFromSuccess(address,address,uint256) (runs: 256, μ: 233551, ~: 234128) +ERC20Test:testFuzzTransferFromInsufficientAllowance(address,address,uint256,uint8) (runs: 256, μ: 204598, ~: 204576) +ERC20Test:testFuzzTransferFromSuccess(address,address,uint256) (runs: 256, μ: 233295, ~: 234121) ERC20Test:testFuzzTransferInvalidAmount(address,address,uint256) (runs: 256, μ: 16752, ~: 16752) ERC20Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 13987, ~: 13987) ERC20Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 75636, ~: 75604) -ERC20Test:testFuzzTransferSuccess(address,uint256) (runs: 256, μ: 205510, ~: 205571) +ERC20Test:testFuzzTransferSuccess(address,uint256) (runs: 256, μ: 205510, ~: 205570) ERC20Test:testHasOwner() (gas: 12669) -ERC20Test:testInitialSetup() (gas: 1576164) +ERC20Test:testInitialSetup() (gas: 1569701) ERC20Test:testMintNonMinter() (gas: 12415) ERC20Test:testMintOverflow() (gas: 16762) ERC20Test:testMintSuccess() (gas: 51773) ERC20Test:testMintToZeroAddress() (gas: 15548) -ERC20Test:testPermitBadChainId() (gas: 43257) -ERC20Test:testPermitBadNonce() (gas: 40364) +ERC20Test:testPermitBadChainId() (gas: 43266) +ERC20Test:testPermitBadNonce() (gas: 40373) ERC20Test:testPermitExpiredDeadline() (gas: 17012) -ERC20Test:testPermitOtherSignature() (gas: 41326) -ERC20Test:testPermitReplaySignature() (gas: 73077) -ERC20Test:testPermitSuccess() (gas: 69512) +ERC20Test:testPermitOtherSignature() (gas: 41335) +ERC20Test:testPermitReplaySignature() (gas: 73095) +ERC20Test:testPermitSuccess() (gas: 69521) ERC20Test:testRenounceOwnershipNonOwner() (gas: 10775) ERC20Test:testRenounceOwnershipSuccess() (gas: 22916) ERC20Test:testSetMinterNonOwner() (gas: 12481) @@ -335,13 +335,13 @@ ERC20Test:testSetMinterRemoveOwnerAddress() (gas: 13582) ERC20Test:testSetMinterSuccess() (gas: 33389) ERC20Test:testSetMinterToZeroAddress() (gas: 15599) ERC20Test:testTotalSupply() (gas: 11446) -ERC20Test:testTransferFromExceedingBalance() (gas: 32200) -ERC20Test:testTransferFromFromZeroAddress() (gas: 17491) -ERC20Test:testTransferFromInsufficientAllowanceCase1() (gas: 43066) -ERC20Test:testTransferFromInsufficientAllowanceCase2() (gas: 43075) -ERC20Test:testTransferFromSuccess() (gas: 61427) -ERC20Test:testTransferFromToZeroAddress() (gas: 32408) -ERC20Test:testTransferFromUnlimitedAllowance() (gas: 71728) +ERC20Test:testTransferFromExceedingBalance() (gas: 32196) +ERC20Test:testTransferFromFromZeroAddress() (gas: 17485) +ERC20Test:testTransferFromInsufficientAllowanceCase1() (gas: 43060) +ERC20Test:testTransferFromInsufficientAllowanceCase2() (gas: 43069) +ERC20Test:testTransferFromSuccess() (gas: 61422) +ERC20Test:testTransferFromToZeroAddress() (gas: 32403) +ERC20Test:testTransferFromUnlimitedAllowance() (gas: 71722) ERC20Test:testTransferFromZeroAddress() (gas: 19409) ERC20Test:testTransferInvalidAmount() (gas: 15201) ERC20Test:testTransferOwnershipNonOwner() (gas: 12358) @@ -394,8 +394,8 @@ ERC2981Test:testSupportsInterfaceSuccessGasCost() (gas: 9175) ERC2981Test:testTransferOwnershipNonOwner() (gas: 12297) ERC2981Test:testTransferOwnershipSuccess() (gas: 22119) ERC2981Test:testTransferOwnershipToZeroAddress() (gas: 15431) -ERC4626VaultInvariants:statefulFuzzTotalAssets() (runs: 256, calls: 3840, reverts: 3291) -ERC4626VaultInvariants:statefulFuzzTotalSupply() (runs: 256, calls: 3840, reverts: 3291) +ERC4626VaultInvariants:statefulFuzzTotalAssets() (runs: 256, calls: 3840, reverts: 3289) +ERC4626VaultInvariants:statefulFuzzTotalSupply() (runs: 256, calls: 3840, reverts: 3289) ERC4626VaultTest:testCachedDomainSeparator() (gas: 10580) ERC4626VaultTest:testDepositInsufficientAllowance() (gas: 82490) ERC4626VaultTest:testDepositWithNoApproval() (gas: 24321) @@ -404,139 +404,139 @@ ERC4626VaultTest:testDomainSeparator() (gas: 11890) ERC4626VaultTest:testEIP712Domain() (gas: 18001) ERC4626VaultTest:testEmptyVaultDeposit() (gas: 567196) ERC4626VaultTest:testEmptyVaultMint() (gas: 567993) -ERC4626VaultTest:testEmptyVaultRedeem() (gas: 202453) -ERC4626VaultTest:testEmptyVaultwithdraw() (gas: 214877) -ERC4626VaultTest:testFail_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 553317, ~: 555893) -ERC4626VaultTest:testFail_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 554897, ~: 557315) -ERC4626VaultTest:testFuzzDomainSeparator(uint8) (runs: 256, μ: 11904, ~: 11928) +ERC4626VaultTest:testEmptyVaultRedeem() (gas: 202405) +ERC4626VaultTest:testEmptyVaultwithdraw() (gas: 214829) +ERC4626VaultTest:testFail_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 553334, ~: 555634) +ERC4626VaultTest:testFail_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 555016, ~: 557444) +ERC4626VaultTest:testFuzzDomainSeparator(uint8) (runs: 256, μ: 11903, ~: 11928) ERC4626VaultTest:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 21501, ~: 21550) -ERC4626VaultTest:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 44403, ~: 44397) -ERC4626VaultTest:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 70347, ~: 70348) -ERC4626VaultTest:testInitialSetup() (gas: 5886549) +ERC4626VaultTest:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 44412, ~: 44406) +ERC4626VaultTest:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 70356, ~: 70357) +ERC4626VaultTest:testInitialSetup() (gas: 5867179) ERC4626VaultTest:testMintWithNoApproval() (gas: 24355) ERC4626VaultTest:testMintZero() (gas: 41167) -ERC4626VaultTest:testMultipleMintDepositRedeemWithdraw() (gas: 376459) -ERC4626VaultTest:testPermitBadChainId() (gas: 43287) -ERC4626VaultTest:testPermitBadNonce() (gas: 40375) +ERC4626VaultTest:testMultipleMintDepositRedeemWithdraw() (gas: 376420) +ERC4626VaultTest:testPermitBadChainId() (gas: 43296) +ERC4626VaultTest:testPermitBadNonce() (gas: 40384) ERC4626VaultTest:testPermitExpiredDeadline() (gas: 16999) -ERC4626VaultTest:testPermitOtherSignature() (gas: 41314) -ERC4626VaultTest:testPermitReplaySignature() (gas: 73059) -ERC4626VaultTest:testPermitSuccess() (gas: 69491) +ERC4626VaultTest:testPermitOtherSignature() (gas: 41323) +ERC4626VaultTest:testPermitReplaySignature() (gas: 73077) +ERC4626VaultTest:testPermitSuccess() (gas: 69500) ERC4626VaultTest:testRedeemInsufficientShares() (gas: 131022) ERC4626VaultTest:testRedeemWithNoShares() (gas: 13316) -ERC4626VaultTest:testSingleDepositWithdraw() (gas: 177760) -ERC4626VaultTest:testSingleMintRedeem() (gas: 176646) -ERC4626VaultTest:testVaultInteractionsForSomeoneElse() (gas: 223961) -ERC4626VaultTest:testWithdrawInsufficientAllowance() (gas: 122280) +ERC4626VaultTest:testSingleDepositWithdraw() (gas: 177751) +ERC4626VaultTest:testSingleMintRedeem() (gas: 176636) +ERC4626VaultTest:testVaultInteractionsForSomeoneElse() (gas: 223952) +ERC4626VaultTest:testWithdrawInsufficientAllowance() (gas: 122276) ERC4626VaultTest:testWithdrawInsufficientAssets() (gas: 117704) ERC4626VaultTest:testWithdrawWithNoAssets() (gas: 21198) -ERC4626VaultTest:test_RT_deposit_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 471628, ~: 473058) -ERC4626VaultTest:test_RT_deposit_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473325, ~: 474239) -ERC4626VaultTest:test_RT_mint_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 471209, ~: 473149) -ERC4626VaultTest:test_RT_mint_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473013, ~: 474310) -ERC4626VaultTest:test_RT_redeem_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472073, ~: 473098) -ERC4626VaultTest:test_RT_redeem_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472161, ~: 473201) -ERC4626VaultTest:test_RT_withdraw_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473052, ~: 474390) -ERC4626VaultTest:test_RT_withdraw_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473269, ~: 474483) -ERC4626VaultTest:test_asset((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423953, ~: 426223) -ERC4626VaultTest:test_convertToAssets((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 428766, ~: 430443) -ERC4626VaultTest:test_convertToShares((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 428763, ~: 430460) -ERC4626VaultTest:test_deposit((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 469520, ~: 471005) -ERC4626VaultTest:test_maxDeposit((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423939, ~: 426208) -ERC4626VaultTest:test_maxMint((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423981, ~: 426251) -ERC4626VaultTest:test_maxRedeem((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424079, ~: 426348) -ERC4626VaultTest:test_maxWithdraw((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 425435, ~: 427566) -ERC4626VaultTest:test_mint((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 469569, ~: 471024) -ERC4626VaultTest:test_previewDeposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 464042, ~: 465667) -ERC4626VaultTest:test_previewMint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 463836, ~: 465849) -ERC4626VaultTest:test_previewRedeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 466924, ~: 467152) -ERC4626VaultTest:test_previewWithdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 467842, ~: 468438) -ERC4626VaultTest:test_redeem((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 472689, ~: 473722) -ERC4626VaultTest:test_totalAssets((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424540, ~: 426810) -ERC4626VaultTest:test_withdraw((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 474392, ~: 474864) +ERC4626VaultTest:test_RT_deposit_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 471622, ~: 473047) +ERC4626VaultTest:test_RT_deposit_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473142, ~: 474229) +ERC4626VaultTest:test_RT_mint_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 470997, ~: 473142) +ERC4626VaultTest:test_RT_mint_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472804, ~: 474304) +ERC4626VaultTest:test_RT_redeem_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472150, ~: 473240) +ERC4626VaultTest:test_RT_redeem_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472179, ~: 473314) +ERC4626VaultTest:test_RT_withdraw_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473067, ~: 474427) +ERC4626VaultTest:test_RT_withdraw_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473293, ~: 474535) +ERC4626VaultTest:test_asset((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423942, ~: 426220) +ERC4626VaultTest:test_convertToAssets((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 428855, ~: 430520) +ERC4626VaultTest:test_convertToShares((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 428794, ~: 430464) +ERC4626VaultTest:test_deposit((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 469520, ~: 471008) +ERC4626VaultTest:test_maxDeposit((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423928, ~: 426206) +ERC4626VaultTest:test_maxMint((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423970, ~: 426248) +ERC4626VaultTest:test_maxRedeem((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424068, ~: 426346) +ERC4626VaultTest:test_maxWithdraw((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 425423, ~: 427566) +ERC4626VaultTest:test_mint((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 469558, ~: 471028) +ERC4626VaultTest:test_previewDeposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 464046, ~: 465665) +ERC4626VaultTest:test_previewMint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 463634, ~: 465852) +ERC4626VaultTest:test_previewRedeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 466950, ~: 467354) +ERC4626VaultTest:test_previewWithdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 467941, ~: 468485) +ERC4626VaultTest:test_redeem((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 472701, ~: 473732) +ERC4626VaultTest:test_totalAssets((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424529, ~: 426808) +ERC4626VaultTest:test_withdraw((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 474416, ~: 474873) ERC721Invariants:statefulFuzzOwner() (runs: 256, calls: 3840, reverts: 3483) ERC721Invariants:statefulFuzzTotalSupply() (runs: 256, calls: 3840, reverts: 3483) -ERC721Test:testApproveClearingApprovalWithNoPriorApproval() (gas: 177008) -ERC721Test:testApproveClearingApprovalWithPriorApproval() (gas: 185849) -ERC721Test:testApproveFromApprovedAddress() (gas: 198569) -ERC721Test:testApproveFromNonOwner() (gas: 172387) -ERC721Test:testApproveFromOperatorAddress() (gas: 223562) -ERC721Test:testApproveInvalidTokenId() (gas: 170614) -ERC721Test:testApproveToOwner() (gas: 167132) -ERC721Test:testApproveToZeroAddress() (gas: 185870) -ERC721Test:testApproveWithNoPriorApproval() (gas: 196272) -ERC721Test:testApproveWithPriorApprovalToDifferentAddress() (gas: 205162) -ERC721Test:testApproveWithPriorApprovalToSameAddress() (gas: 203731) -ERC721Test:testBalanceOfCase1() (gas: 328256) +ERC721Test:testApproveClearingApprovalWithNoPriorApproval() (gas: 176997) +ERC721Test:testApproveClearingApprovalWithPriorApproval() (gas: 185835) +ERC721Test:testApproveFromApprovedAddress() (gas: 198555) +ERC721Test:testApproveFromNonOwner() (gas: 172376) +ERC721Test:testApproveFromOperatorAddress() (gas: 223551) +ERC721Test:testApproveInvalidTokenId() (gas: 170603) +ERC721Test:testApproveToOwner() (gas: 167121) +ERC721Test:testApproveToZeroAddress() (gas: 185856) +ERC721Test:testApproveWithNoPriorApproval() (gas: 196261) +ERC721Test:testApproveWithPriorApprovalToDifferentAddress() (gas: 205148) +ERC721Test:testApproveWithPriorApprovalToSameAddress() (gas: 203717) +ERC721Test:testBalanceOfCase1() (gas: 328240) ERC721Test:testBalanceOfCase2() (gas: 12147) ERC721Test:testBalanceOfZeroAddress() (gas: 10890) -ERC721Test:testBurnSuccess() (gas: 305612) -ERC721Test:testBurnSuccessViaApproveAndSetApprovalForAll() (gas: 370908) +ERC721Test:testBurnSuccess() (gas: 305600) +ERC721Test:testBurnSuccessViaApproveAndSetApprovalForAll() (gas: 370892) ERC721Test:testCachedDomainSeparator() (gas: 10621) ERC721Test:testDomainSeparator() (gas: 11888) ERC721Test:testEIP712Domain() (gas: 18101) -ERC721Test:testFuzzApproveClearingApprovalWithNoPriorApproval(address,address) (runs: 256, μ: 196688, ~: 196688) -ERC721Test:testFuzzApproveClearingApprovalWithPriorApproval(address,address) (runs: 256, μ: 184287, ~: 184287) -ERC721Test:testFuzzApproveFromNonOwner(address) (runs: 256, μ: 171961, ~: 171961) -ERC721Test:testFuzzApproveFromOperatorAddress(address,address,address) (runs: 256, μ: 222835, ~: 222835) -ERC721Test:testFuzzApproveWithNoPriorApproval(address,address) (runs: 256, μ: 196688, ~: 196688) -ERC721Test:testFuzzApproveWithPriorApproval(address,address) (runs: 256, μ: 204172, ~: 204172) -ERC721Test:testFuzzBurnSuccess(address) (runs: 256, μ: 305092, ~: 305078) +ERC721Test:testFuzzApproveClearingApprovalWithNoPriorApproval(address,address) (runs: 256, μ: 196677, ~: 196677) +ERC721Test:testFuzzApproveClearingApprovalWithPriorApproval(address,address) (runs: 256, μ: 184273, ~: 184273) +ERC721Test:testFuzzApproveFromNonOwner(address) (runs: 256, μ: 171950, ~: 171950) +ERC721Test:testFuzzApproveFromOperatorAddress(address,address,address) (runs: 256, μ: 222824, ~: 222824) +ERC721Test:testFuzzApproveWithNoPriorApproval(address,address) (runs: 256, μ: 196677, ~: 196677) +ERC721Test:testFuzzApproveWithPriorApproval(address,address) (runs: 256, μ: 204158, ~: 204158) +ERC721Test:testFuzzBurnSuccess(address) (runs: 256, μ: 305079, ~: 305065) ERC721Test:testFuzzDomainSeparator(uint8) (runs: 256, μ: 12011, ~: 12035) ERC721Test:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 21555, ~: 21605) -ERC721Test:testFuzzGetApprovedApprovedTokenId(address,address) (runs: 256, μ: 194258, ~: 194258) -ERC721Test:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 200398, ~: 200392) -ERC721Test:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 226880, ~: 226881) +ERC721Test:testFuzzGetApprovedApprovedTokenId(address,address) (runs: 256, μ: 194247, ~: 194247) +ERC721Test:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 200399, ~: 200393) +ERC721Test:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 226881, ~: 226882) ERC721Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13937, ~: 13937) ERC721Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48638, ~: 48624) ERC721Test:testFuzzSafeMintNonMinter(address) (runs: 256, μ: 15651, ~: 15651) -ERC721Test:testFuzzSafeMintSuccess(address[]) (runs: 256, μ: 20952110, ~: 20349134) -ERC721Test:testFuzzSafeTransferFromWithData(address,address,address,bytes) (runs: 256, μ: 1432034, ~: 1432215) -ERC721Test:testFuzzSetApprovalForAllSuccess(address,address) (runs: 256, μ: 189067, ~: 189067) +ERC721Test:testFuzzSafeMintSuccess(address[]) (runs: 256, μ: 21122141, ~: 20601074) +ERC721Test:testFuzzSafeTransferFromWithData(address,address,address,bytes) (runs: 256, μ: 1431962, ~: 1432089) +ERC721Test:testFuzzSetApprovalForAllSuccess(address,address) (runs: 256, μ: 189059, ~: 189059) ERC721Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 15458, ~: 15459) ERC721Test:testFuzzSetMinterSuccess(string) (runs: 256, μ: 33638, ~: 33645) -ERC721Test:testFuzzTokenByIndex(address,string[]) (runs: 256, μ: 23200137, ~: 22919656) -ERC721Test:testFuzzTotalSupply(address,string[]) (runs: 256, μ: 23002557, ~: 22724806) -ERC721Test:testFuzzTransferFrom(address,address,address) (runs: 256, μ: 564352, ~: 564328) +ERC721Test:testFuzzTokenByIndex(address,string[]) (runs: 256, μ: 23189801, ~: 22918608) +ERC721Test:testFuzzTotalSupply(address,string[]) (runs: 256, μ: 22992297, ~: 22723758) +ERC721Test:testFuzzTransferFrom(address,address,address) (runs: 256, μ: 564302, ~: 564280) ERC721Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 13987, ~: 13987) ERC721Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 75719, ~: 75688) -ERC721Test:testGetApprovedApprovedTokenId() (gas: 193797) +ERC721Test:testGetApprovedApprovedTokenId() (gas: 193786) ERC721Test:testGetApprovedInvalidTokenId() (gas: 11038) -ERC721Test:testGetApprovedNotApprovedTokenId() (gas: 170289) +ERC721Test:testGetApprovedNotApprovedTokenId() (gas: 170281) ERC721Test:testHasOwner() (gas: 12640) -ERC721Test:testInitialSetup() (gas: 2533233) -ERC721Test:testOwnerOf() (gas: 165984) +ERC721Test:testInitialSetup() (gas: 2526574) +ERC721Test:testOwnerOf() (gas: 165976) ERC721Test:testOwnerOfInvalidTokenId() (gas: 10958) -ERC721Test:testPermitBadChainId() (gas: 199189) -ERC721Test:testPermitBadNonce() (gas: 196392) -ERC721Test:testPermitExpiredDeadline() (gas: 169854) -ERC721Test:testPermitOtherSignature() (gas: 197259) -ERC721Test:testPermitReplaySignature() (gas: 229435) -ERC721Test:testPermitSuccess() (gas: 226023) +ERC721Test:testPermitBadChainId() (gas: 199190) +ERC721Test:testPermitBadNonce() (gas: 196393) +ERC721Test:testPermitExpiredDeadline() (gas: 169846) +ERC721Test:testPermitOtherSignature() (gas: 197260) +ERC721Test:testPermitReplaySignature() (gas: 229445) +ERC721Test:testPermitSuccess() (gas: 226024) ERC721Test:testRenounceOwnershipNonOwner() (gas: 10864) ERC721Test:testRenounceOwnershipSuccess() (gas: 22889) ERC721Test:testSafeMintNonMinter() (gas: 12985) ERC721Test:testSafeMintOverflow() (gas: 15265) -ERC721Test:testSafeMintReceiverContract() (gas: 386097) -ERC721Test:testSafeMintReceiverContractFunctionNotImplemented() (gas: 118154) -ERC721Test:testSafeMintReceiverContractInvalidReturnIdentifier() (gas: 337159) -ERC721Test:testSafeMintReceiverContractRevertsWithMessage() (gas: 334450) -ERC721Test:testSafeMintReceiverContractRevertsWithPanic() (gas: 334607) -ERC721Test:testSafeMintReceiverContractRevertsWithoutMessage() (gas: 334162) -ERC721Test:testSafeMintSuccess() (gas: 524180) +ERC721Test:testSafeMintReceiverContract() (gas: 386089) +ERC721Test:testSafeMintReceiverContractFunctionNotImplemented() (gas: 118151) +ERC721Test:testSafeMintReceiverContractInvalidReturnIdentifier() (gas: 337156) +ERC721Test:testSafeMintReceiverContractRevertsWithMessage() (gas: 334447) +ERC721Test:testSafeMintReceiverContractRevertsWithPanic() (gas: 334604) +ERC721Test:testSafeMintReceiverContractRevertsWithoutMessage() (gas: 334159) +ERC721Test:testSafeMintSuccess() (gas: 524148) ERC721Test:testSafeMintToZeroAddress() (gas: 38311) -ERC721Test:testSafeMintTokenAlreadyMinted() (gas: 362185) -ERC721Test:testSafeTransferFromNoData() (gas: 1436651) -ERC721Test:testSafeTransferFromReceiverFunctionNotImplemented() (gas: 182520) -ERC721Test:testSafeTransferFromReceiverInvalidReturnIdentifier() (gas: 401505) -ERC721Test:testSafeTransferFromReceiverRevertsWithMessage() (gas: 398821) -ERC721Test:testSafeTransferFromReceiverRevertsWithPanic() (gas: 399023) -ERC721Test:testSafeTransferFromReceiverRevertsWithoutMessage() (gas: 398533) -ERC721Test:testSafeTransferFromWithData() (gas: 1192817) -ERC721Test:testSetApprovalForAllOperatorIsOwner() (gas: 166933) -ERC721Test:testSetApprovalForAllSuccessCase1() (gas: 195402) -ERC721Test:testSetApprovalForAllSuccessCase2() (gas: 188635) -ERC721Test:testSetApprovalForAllSuccessCase3() (gas: 202013) +ERC721Test:testSafeMintTokenAlreadyMinted() (gas: 362169) +ERC721Test:testSafeTransferFromNoData() (gas: 1436523) +ERC721Test:testSafeTransferFromReceiverFunctionNotImplemented() (gas: 182506) +ERC721Test:testSafeTransferFromReceiverInvalidReturnIdentifier() (gas: 401491) +ERC721Test:testSafeTransferFromReceiverRevertsWithMessage() (gas: 398807) +ERC721Test:testSafeTransferFromReceiverRevertsWithPanic() (gas: 399009) +ERC721Test:testSafeTransferFromReceiverRevertsWithoutMessage() (gas: 398519) +ERC721Test:testSafeTransferFromWithData() (gas: 1192723) +ERC721Test:testSetApprovalForAllOperatorIsOwner() (gas: 166925) +ERC721Test:testSetApprovalForAllSuccessCase1() (gas: 195394) +ERC721Test:testSetApprovalForAllSuccessCase2() (gas: 188627) +ERC721Test:testSetApprovalForAllSuccessCase3() (gas: 202005) ERC721Test:testSetMinterNonOwner() (gas: 12415) ERC721Test:testSetMinterRemoveOwnerAddress() (gas: 13626) ERC721Test:testSetMinterSuccess() (gas: 33525) @@ -545,36 +545,36 @@ ERC721Test:testSupportsInterfaceInvalidInterfaceId() (gas: 8547) ERC721Test:testSupportsInterfaceInvalidInterfaceIdGasCost() (gas: 9583) ERC721Test:testSupportsInterfaceSuccess() (gas: 14663) ERC721Test:testSupportsInterfaceSuccessGasCost() (gas: 9338) -ERC721Test:testTokenByIndex() (gas: 555089) -ERC721Test:testTokenByIndexOutOfBounds() (gas: 329704) -ERC721Test:testTokenOfOwnerByIndex() (gas: 574365) -ERC721Test:testTokenOfOwnerByIndexReverts() (gas: 545316) -ERC721Test:testTokenURIAfterBurning() (gas: 138389) -ERC721Test:testTokenURIDefault() (gas: 168156) +ERC721Test:testTokenByIndex() (gas: 555057) +ERC721Test:testTokenByIndexOutOfBounds() (gas: 329688) +ERC721Test:testTokenOfOwnerByIndex() (gas: 574327) +ERC721Test:testTokenOfOwnerByIndexReverts() (gas: 545274) +ERC721Test:testTokenURIAfterBurning() (gas: 138383) +ERC721Test:testTokenURIDefault() (gas: 168117) ERC721Test:testTokenURIInvalidTokenId() (gas: 13081) -ERC721Test:testTokenURINoBaseURI() (gas: 2652707) -ERC721Test:testTokenURINoTokenUri() (gas: 125707) -ERC721Test:testTotalSupply() (gas: 328099) -ERC721Test:testTransferFrom() (gas: 573577) +ERC721Test:testTokenURINoBaseURI() (gas: 2646035) +ERC721Test:testTokenURINoTokenUri() (gas: 125689) +ERC721Test:testTotalSupply() (gas: 328083) +ERC721Test:testTransferFrom() (gas: 573528) ERC721Test:testTransferOwnershipNonOwner() (gas: 12337) ERC721Test:testTransferOwnershipSuccess() (gas: 53924) ERC721Test:testTransferOwnershipToZeroAddress() (gas: 15485) -MathTest:testCbrtRoundDown() (gas: 46971) -MathTest:testCbrtRoundUp() (gas: 47650) +MathTest:testCbrtRoundDown() (gas: 46911) +MathTest:testCbrtRoundUp() (gas: 47638) MathTest:testCeilDiv() (gas: 14792) -MathTest:testFuzzCbrt(uint256,bool) (runs: 256, μ: 22113, ~: 22012) +MathTest:testFuzzCbrt(uint256,bool) (runs: 256, μ: 22110, ~: 22008) MathTest:testFuzzCeilDiv(uint256,uint256) (runs: 256, μ: 9780, ~: 9781) MathTest:testFuzzInt256Average(int256,int256) (runs: 256, μ: 8546, ~: 8546) MathTest:testFuzzLog10(uint256,bool) (runs: 256, μ: 10324, ~: 10262) -MathTest:testFuzzLog2(uint256,bool) (runs: 256, μ: 10052, ~: 10011) -MathTest:testFuzzLog256(uint256,bool) (runs: 256, μ: 10178, ~: 10056) +MathTest:testFuzzLog2(uint256,bool) (runs: 256, μ: 10051, ~: 10011) +MathTest:testFuzzLog256(uint256,bool) (runs: 256, μ: 10175, ~: 10056) MathTest:testFuzzMulDiv(uint256,uint256,uint256) (runs: 256, μ: 14177, ~: 14036) MathTest:testFuzzMulDivDomain(uint256,uint256,uint256) (runs: 256, μ: 10739, ~: 10772) MathTest:testFuzzSignum(int256) (runs: 256, μ: 8493, ~: 8485) MathTest:testFuzzUint256Average(uint256,uint256) (runs: 256, μ: 8677, ~: 8677) -MathTest:testFuzzWadCbrt(uint256) (runs: 256, μ: 22020, ~: 21743) +MathTest:testFuzzWadCbrt(uint256) (runs: 256, μ: 22018, ~: 21741) MathTest:testFuzzWadExp(int256) (runs: 256, μ: 14660, ~: 14965) -MathTest:testFuzzWadLn(int256) (runs: 256, μ: 16106, ~: 15850) +MathTest:testFuzzWadLn(int256) (runs: 256, μ: 16106, ~: 15851) MathTest:testInt256Average() (gas: 18943) MathTest:testLog10RoundDown() (gas: 25819) MathTest:testLog10RoundUp() (gas: 26998) @@ -590,40 +590,40 @@ MathTest:testMulDivRoundUpLargeValues() (gas: 16878) MathTest:testMulDivRoundUpSmallValues() (gas: 11825) MathTest:testSignum() (gas: 17837) MathTest:testUint256Average() (gas: 12971) -MathTest:testWadCbrt() (gas: 44249) +MathTest:testWadCbrt() (gas: 44189) MathTest:testWadExp() (gas: 32943) MathTest:testWadExpOverflow() (gas: 11045) MathTest:testWadLn() (gas: 29024) MathTest:testWadLnNegativeValues() (gas: 11008) -MerkleProofVerificationTest:testFuzzMultiProofVerifySingleLeaf(bytes32[],uint256) (runs: 256, μ: 260639, ~: 271811) -MerkleProofVerificationTest:testFuzzVerify(bytes32[],uint256) (runs: 256, μ: 175190, ~: 184618) -MerkleProofVerificationTest:testFuzzVerifyMultiProofMultipleLeaves(bool,bool,bool) (runs: 256, μ: 45406, ~: 45398) -MerkleProofVerificationTest:testInvalidMerkleMultiProof() (gas: 46384) -MerkleProofVerificationTest:testInvalidMerkleProof() (gas: 18723) -MerkleProofVerificationTest:testInvalidMerkleProofLength() (gas: 20389) -MerkleProofVerificationTest:testInvalidMultiProof() (gas: 87165) -MerkleProofVerificationTest:testMaliciousMultiProofVerify() (gas: 36039) -MerkleProofVerificationTest:testMultiProofEdgeCase1() (gas: 31074) -MerkleProofVerificationTest:testMultiProofEdgeCase2() (gas: 31267) -MerkleProofVerificationTest:testMultiProofVerify() (gas: 49760) -MerkleProofVerificationTest:testVerify() (gas: 34645) -MessageHashUtilsTest:testEthSignedMessageHash() (gas: 8576) -MessageHashUtilsTest:testFuzzEthSignedMessageHash(string) (runs: 256, μ: 9281, ~: 9275) -MessageHashUtilsTest:testFuzzToDataWithIntendedValidatorHash(address,bytes) (runs: 256, μ: 9810, ~: 9794) -MessageHashUtilsTest:testFuzzToDataWithIntendedValidatorHashSelf(bytes) (runs: 256, μ: 11828, ~: 11814) -MessageHashUtilsTest:testFuzzToTypedDataHash(string,string) (runs: 256, μ: 9895, ~: 9897) -MessageHashUtilsTest:testToDataWithIntendedValidatorHash() (gas: 11039) -MessageHashUtilsTest:testToDataWithIntendedValidatorHashSelf() (gas: 11580) -MessageHashUtilsTest:testToTypedDataHash() (gas: 8674) -MulticallTest:testMulticallRevert() (gas: 1151980) -MulticallTest:testMulticallSelfRevert() (gas: 2216367) -MulticallTest:testMulticallSelfSuccess() (gas: 3339828) -MulticallTest:testMulticallSuccess() (gas: 1160319) -MulticallTest:testMulticallValueRevertCase1() (gas: 1211465) -MulticallTest:testMulticallValueRevertCase2() (gas: 1212333) -MulticallTest:testMulticallValueSuccess() (gas: 1239316) -MulticallTest:testMultistaticcallRevert() (gas: 1040449066) -MulticallTest:testMultistaticcallSuccess() (gas: 1130547) +MerkleProofVerificationTest:testFuzzMultiProofVerifySingleLeaf(bytes32[],uint256) (runs: 256, μ: 260595, ~: 271786) +MerkleProofVerificationTest:testFuzzVerify(bytes32[],uint256) (runs: 256, μ: 175198, ~: 184645) +MerkleProofVerificationTest:testFuzzVerifyMultiProofMultipleLeaves(bool,bool,bool) (runs: 256, μ: 45394, ~: 45386) +MerkleProofVerificationTest:testInvalidMerkleMultiProof() (gas: 46372) +MerkleProofVerificationTest:testInvalidMerkleProof() (gas: 18724) +MerkleProofVerificationTest:testInvalidMerkleProofLength() (gas: 20390) +MerkleProofVerificationTest:testInvalidMultiProof() (gas: 87126) +MerkleProofVerificationTest:testMaliciousMultiProofVerify() (gas: 36027) +MerkleProofVerificationTest:testMultiProofEdgeCase1() (gas: 31062) +MerkleProofVerificationTest:testMultiProofEdgeCase2() (gas: 31255) +MerkleProofVerificationTest:testMultiProofVerify() (gas: 49748) +MerkleProofVerificationTest:testVerify() (gas: 34647) +MessageHashUtilsTest:testEthSignedMessageHash() (gas: 8571) +MessageHashUtilsTest:testFuzzEthSignedMessageHash(string) (runs: 256, μ: 9276, ~: 9270) +MessageHashUtilsTest:testFuzzToDataWithIntendedValidatorHash(address,bytes) (runs: 256, μ: 9805, ~: 9789) +MessageHashUtilsTest:testFuzzToDataWithIntendedValidatorHashSelf(bytes) (runs: 256, μ: 11823, ~: 11809) +MessageHashUtilsTest:testFuzzToTypedDataHash(string,string) (runs: 256, μ: 9890, ~: 9892) +MessageHashUtilsTest:testToDataWithIntendedValidatorHash() (gas: 11034) +MessageHashUtilsTest:testToDataWithIntendedValidatorHashSelf() (gas: 11575) +MessageHashUtilsTest:testToTypedDataHash() (gas: 8669) +MulticallTest:testMulticallRevert() (gas: 1151949) +MulticallTest:testMulticallSelfRevert() (gas: 2216305) +MulticallTest:testMulticallSelfSuccess() (gas: 3339630) +MulticallTest:testMulticallSuccess() (gas: 1160253) +MulticallTest:testMulticallValueRevertCase1() (gas: 1211431) +MulticallTest:testMulticallValueRevertCase2() (gas: 1212299) +MulticallTest:testMulticallValueSuccess() (gas: 1239247) +MulticallTest:testMultistaticcallRevert() (gas: 1040449065) +MulticallTest:testMultistaticcallSuccess() (gas: 1130481) Ownable2StepInvariants:statefulFuzzOwner() (runs: 256, calls: 3840, reverts: 3840) Ownable2StepInvariants:statefulFuzzPendingOwner() (runs: 256, calls: 3840, reverts: 3840) Ownable2StepTest:testAcceptOwnershipNonPendingOwner() (gas: 47231) @@ -655,14 +655,24 @@ OwnableTest:testRenounceOwnershipSuccess() (gas: 17923) OwnableTest:testTransferOwnershipNonOwner() (gas: 12225) OwnableTest:testTransferOwnershipSuccess() (gas: 22067) OwnableTest:testTransferOwnershipToZeroAddress() (gas: 15380) -P256Test:testFuzzVerifyWithValidSignature(string,string) (runs: 256, μ: 247184, ~: 447105) -P256Test:testVerifyWithFlippedValues() (gas: 905439) -P256Test:testVerifyWithInvalidSignature() (gas: 451845) -P256Test:testVerifyWithOutOfBoundsPublicKey() (gas: 17684) +P256Test:testFuzzVerifyWithValidSignature(string,string) (runs: 256, μ: 247181, ~: 447096) +P256Test:testVerifyWithFlippedValues() (gas: 905421) +P256Test:testVerifyWithInvalidSignature() (gas: 451842) +P256Test:testVerifyWithOutOfBoundsPublicKey() (gas: 17669) P256Test:testVerifyWithTooHighSValue() (gas: 9387) -P256Test:testVerifyWithValidSignature() (gas: 454138) +P256Test:testVerifyWithValidSignature() (gas: 454126) P256Test:testVerifyWithZeroInputs() (gas: 8861) -P256Test:testVerifyWycheproofData() (gas: 289286936) +P256Test:testVerifyWycheproofData() (gas: 289283750) +PausableInvariants:statefulFuzzPaused() (runs: 256, calls: 3840, reverts: 1863) +PausableTest:testFuzzPauseSuccess(address) (runs: 256, μ: 34629, ~: 34629) +PausableTest:testFuzzPauseWhilePaused(address) (runs: 256, μ: 37238, ~: 37238) +PausableTest:testFuzzUnpauseSuccess(address) (runs: 256, μ: 26987, ~: 26972) +PausableTest:testFuzzUnpauseWhileUnpaused(address) (runs: 256, μ: 29166, ~: 29151) +PausableTest:testInitialSetup() (gas: 10346) +PausableTest:testPauseSuccess() (gas: 36666) +PausableTest:testPauseWhilePaused() (gas: 39233) +PausableTest:testUnpauseSuccess() (gas: 28795) +PausableTest:testUnpauseWhileUnpaused() (gas: 30921) SignatureCheckerTest:testEIP1271NoIsValidSignatureFunction() (gas: 18700) SignatureCheckerTest:testEIP1271WithInvalidSignature(bytes,string) (runs: 256, μ: 23489, ~: 23482) SignatureCheckerTest:testEIP1271WithInvalidSignature1() (gas: 29644) @@ -670,104 +680,104 @@ SignatureCheckerTest:testEIP1271WithInvalidSignature2() (gas: 31315) SignatureCheckerTest:testEIP1271WithInvalidSigner() (gas: 29722) SignatureCheckerTest:testEIP1271WithMaliciousWallet() (gas: 19619) SignatureCheckerTest:testEIP1271WithValidSignature() (gas: 29631) -SignatureCheckerTest:testEOAWithInvalidSignature1() (gas: 19274) -SignatureCheckerTest:testEOAWithInvalidSignature2() (gas: 22915) -SignatureCheckerTest:testEOAWithInvalidSigner() (gas: 19366) -SignatureCheckerTest:testEOAWithTooHighSValue() (gas: 19866) -SignatureCheckerTest:testEOAWithValidSignature() (gas: 19282) +SignatureCheckerTest:testEOAWithInvalidSignature1() (gas: 19271) +SignatureCheckerTest:testEOAWithInvalidSignature2() (gas: 22912) +SignatureCheckerTest:testEOAWithInvalidSigner() (gas: 19363) +SignatureCheckerTest:testEOAWithTooHighSValue() (gas: 19849) +SignatureCheckerTest:testEOAWithValidSignature() (gas: 19279) SignatureCheckerTest:testFuzzEIP1271WithInvalidSigner(string,string) (runs: 256, μ: 31546, ~: 31542) SignatureCheckerTest:testFuzzEIP1271WithValidSignature(string) (runs: 256, μ: 30211, ~: 30205) SignatureCheckerTest:testFuzzEOAWithInvalidSignature(bytes,string) (runs: 256, μ: 16338, ~: 16336) -SignatureCheckerTest:testFuzzEOAWithInvalidSigner(string,string) (runs: 256, μ: 20280, ~: 20281) -SignatureCheckerTest:testFuzzEOAWithValidSignature(string,string) (runs: 256, μ: 20212, ~: 20213) +SignatureCheckerTest:testFuzzEOAWithInvalidSigner(string,string) (runs: 256, μ: 20277, ~: 20278) +SignatureCheckerTest:testFuzzEOAWithValidSignature(string,string) (runs: 256, μ: 20209, ~: 20210) SignatureCheckerTest:testInitialSetup() (gas: 8370) -TimelockControllerInvariants:statefulFuzzExecutedLessThanOrEqualToScheduled() (runs: 256, calls: 3840, reverts: 1299) -TimelockControllerInvariants:statefulFuzzExecutedProposalCancellation() (runs: 256, calls: 3840, reverts: 1238) -TimelockControllerInvariants:statefulFuzzExecutingCancelledProposal() (runs: 256, calls: 3840, reverts: 1314) -TimelockControllerInvariants:statefulFuzzExecutingNotReadyProposal() (runs: 256, calls: 3840, reverts: 1204) -TimelockControllerInvariants:statefulFuzzOnceProposalExecution() (runs: 256, calls: 3840, reverts: 1289) -TimelockControllerInvariants:statefulFuzzProposalsExecutedMatchCount() (runs: 256, calls: 3840, reverts: 1299) -TimelockControllerInvariants:statefulFuzzSumOfProposals() (runs: 256, calls: 3840, reverts: 1299) -TimelockControllerTest:testAdminCannotBatchExecute() (gas: 750605) -TimelockControllerTest:testAdminCannotBatchSchedule() (gas: 748396) +TimelockControllerInvariants:statefulFuzzExecutedLessThanOrEqualToScheduled() (runs: 256, calls: 3840, reverts: 1222) +TimelockControllerInvariants:statefulFuzzExecutedProposalCancellation() (runs: 256, calls: 3840, reverts: 1231) +TimelockControllerInvariants:statefulFuzzExecutingCancelledProposal() (runs: 256, calls: 3840, reverts: 1215) +TimelockControllerInvariants:statefulFuzzExecutingNotReadyProposal() (runs: 256, calls: 3840, reverts: 1251) +TimelockControllerInvariants:statefulFuzzOnceProposalExecution() (runs: 256, calls: 3840, reverts: 1211) +TimelockControllerInvariants:statefulFuzzProposalsExecutedMatchCount() (runs: 256, calls: 3840, reverts: 1223) +TimelockControllerInvariants:statefulFuzzSumOfProposals() (runs: 256, calls: 3840, reverts: 1223) +TimelockControllerTest:testAdminCannotBatchExecute() (gas: 750576) +TimelockControllerTest:testAdminCannotBatchSchedule() (gas: 748370) TimelockControllerTest:testAdminCannotCancel() (gas: 13330) -TimelockControllerTest:testAdminCannotExecute() (gas: 18370) +TimelockControllerTest:testAdminCannotExecute() (gas: 18367) TimelockControllerTest:testAdminCannotSchedule() (gas: 16042) -TimelockControllerTest:testBatchCancelFinished() (gas: 4640455) -TimelockControllerTest:testBatchEqualAndGreaterMinimumDelay() (gas: 6146847) -TimelockControllerTest:testBatchHasBeenExecuted() (gas: 4638627) -TimelockControllerTest:testBatchHasNotBeenExecuted() (gas: 3078043) -TimelockControllerTest:testBatchInsufficientDelay() (gas: 1532896) -TimelockControllerTest:testBatchMinimumDelayUpdate() (gas: 3085824) -TimelockControllerTest:testBatchOperationAlreadyScheduled() (gas: 4592711) -TimelockControllerTest:testBatchOperationIsNotReady() (gas: 4598436) -TimelockControllerTest:testBatchPendingIfExecuted() (gas: 4637350) -TimelockControllerTest:testBatchPendingIfNotYetExecuted() (gas: 3078033) -TimelockControllerTest:testBatchPredecessorInvalid() (gas: 4600764) -TimelockControllerTest:testBatchPredecessorMultipleNotExecuted() (gas: 6141837) -TimelockControllerTest:testBatchPredecessorNotExecuted() (gas: 7665151) -TimelockControllerTest:testBatchPredecessorNotScheduled() (gas: 6119206) -TimelockControllerTest:testBatchReadyAfterTheExecutionTime() (gas: 3078997) -TimelockControllerTest:testBatchReadyBeforeTheExecutionTime() (gas: 3079003) -TimelockControllerTest:testBatchReadyOnTheExecutionTime() (gas: 3078900) -TimelockControllerTest:testBatchScheduleAndExecuteWithEmptySalt() (gas: 4646432) -TimelockControllerTest:testBatchScheduleAndExecuteWithNonEmptySalt() (gas: 4653130) -TimelockControllerTest:testBatchTargetRevert() (gas: 9189392) -TimelockControllerTest:testBatchTimestampHasBeenExecuted() (gas: 4637089) -TimelockControllerTest:testBatchTimestampHasNotBeenExecuted() (gas: 3077982) +TimelockControllerTest:testBatchCancelFinished() (gas: 4640166) +TimelockControllerTest:testBatchEqualAndGreaterMinimumDelay() (gas: 6146477) +TimelockControllerTest:testBatchHasBeenExecuted() (gas: 4638338) +TimelockControllerTest:testBatchHasNotBeenExecuted() (gas: 3077855) +TimelockControllerTest:testBatchInsufficientDelay() (gas: 1532806) +TimelockControllerTest:testBatchMinimumDelayUpdate() (gas: 3085636) +TimelockControllerTest:testBatchOperationAlreadyScheduled() (gas: 4592433) +TimelockControllerTest:testBatchOperationIsNotReady() (gas: 4598152) +TimelockControllerTest:testBatchPendingIfExecuted() (gas: 4637061) +TimelockControllerTest:testBatchPendingIfNotYetExecuted() (gas: 3077845) +TimelockControllerTest:testBatchPredecessorInvalid() (gas: 4600480) +TimelockControllerTest:testBatchPredecessorMultipleNotExecuted() (gas: 6141458) +TimelockControllerTest:testBatchPredecessorNotExecuted() (gas: 7664679) +TimelockControllerTest:testBatchPredecessorNotScheduled() (gas: 6118829) +TimelockControllerTest:testBatchReadyAfterTheExecutionTime() (gas: 3078809) +TimelockControllerTest:testBatchReadyBeforeTheExecutionTime() (gas: 3078815) +TimelockControllerTest:testBatchReadyOnTheExecutionTime() (gas: 3078712) +TimelockControllerTest:testBatchScheduleAndExecuteWithEmptySalt() (gas: 4646152) +TimelockControllerTest:testBatchScheduleAndExecuteWithNonEmptySalt() (gas: 4652850) +TimelockControllerTest:testBatchTargetRevert() (gas: 9188814) +TimelockControllerTest:testBatchTimestampHasBeenExecuted() (gas: 4636800) +TimelockControllerTest:testBatchTimestampHasNotBeenExecuted() (gas: 3077794) TimelockControllerTest:testCanReceiveEther() (gas: 15000) -TimelockControllerTest:testCancellerCanCancelOperation() (gas: 3064279) +TimelockControllerTest:testCancellerCanCancelOperation() (gas: 3064094) TimelockControllerTest:testCompleteOperationWithAssignExecutorRoleToZeroAddress() (gas: 122775) TimelockControllerTest:testCompletePipelineOperationMinimumDelayUpdate() (gas: 71743) TimelockControllerTest:testCompletePipelineOperationSetRoleAdmin() (gas: 98610) -TimelockControllerTest:testExecutorCanBatchExecute() (gas: 3050550) -TimelockControllerTest:testExecutorCanExecute() (gas: 29171) -TimelockControllerTest:testExecutorCannotBatchSchedule() (gas: 1485468) +TimelockControllerTest:testExecutorCanBatchExecute() (gas: 3050358) +TimelockControllerTest:testExecutorCanExecute() (gas: 29165) +TimelockControllerTest:testExecutorCannotBatchSchedule() (gas: 1485416) TimelockControllerTest:testExecutorCannotCancel() (gas: 15381) TimelockControllerTest:testExecutorCannotSchedule() (gas: 18994) -TimelockControllerTest:testFuzzBatchValue(uint256) (runs: 256, μ: 4652704, ~: 4652531) +TimelockControllerTest:testFuzzBatchValue(uint256) (runs: 256, μ: 4652433, ~: 4652242) TimelockControllerTest:testFuzzHashOperation(address,uint256,bytes,bytes32,bytes32) (runs: 256, μ: 10530, ~: 10510) -TimelockControllerTest:testFuzzHashOperationBatch(address[],uint256[],bytes[],bytes32,bytes32) (runs: 256, μ: 1830098, ~: 1819528) -TimelockControllerTest:testFuzzOperationValue(uint256) (runs: 256, μ: 111515, ~: 111342) -TimelockControllerTest:testHandleERC1155() (gas: 41506713) -TimelockControllerTest:testHandleERC721() (gas: 7182935) +TimelockControllerTest:testFuzzHashOperationBatch(address[],uint256[],bytes[],bytes32,bytes32) (runs: 256, μ: 1830005, ~: 1819435) +TimelockControllerTest:testFuzzOperationValue(uint256) (runs: 256, μ: 111533, ~: 111342) +TimelockControllerTest:testHandleERC1155() (gas: 41489007) +TimelockControllerTest:testHandleERC721() (gas: 7175979) TimelockControllerTest:testHashOperation() (gas: 12294) -TimelockControllerTest:testHashOperationBatch() (gas: 1525385) -TimelockControllerTest:testInitialSetup() (gas: 4308663) -TimelockControllerTest:testInvalidOperation() (gas: 10714) -TimelockControllerTest:testOperationAlreadyScheduled() (gas: 51105) +TimelockControllerTest:testHashOperationBatch() (gas: 1525292) +TimelockControllerTest:testInitialSetup() (gas: 4280395) +TimelockControllerTest:testInvalidOperation() (gas: 10717) +TimelockControllerTest:testOperationAlreadyScheduled() (gas: 51111) TimelockControllerTest:testOperationCancelFinished() (gas: 99373) -TimelockControllerTest:testOperationEqualAndGreaterMinimumDelay() (gas: 89070) +TimelockControllerTest:testOperationEqualAndGreaterMinimumDelay() (gas: 89082) TimelockControllerTest:testOperationHasBeenExecuted() (gas: 97556) -TimelockControllerTest:testOperationHasNotBeenExecuted() (gas: 51139) -TimelockControllerTest:testOperationInsufficientDelay() (gas: 19119) -TimelockControllerTest:testOperationMinimumDelayUpdate() (gas: 60939) +TimelockControllerTest:testOperationHasNotBeenExecuted() (gas: 51142) +TimelockControllerTest:testOperationInsufficientDelay() (gas: 19122) +TimelockControllerTest:testOperationMinimumDelayUpdate() (gas: 60942) TimelockControllerTest:testOperationOperationIsNotReady() (gas: 56854) TimelockControllerTest:testOperationPendingIfExecuted() (gas: 96124) -TimelockControllerTest:testOperationPendingIfNotYetExecuted() (gas: 51185) +TimelockControllerTest:testOperationPendingIfNotYetExecuted() (gas: 51188) TimelockControllerTest:testOperationPredecessorInvalid() (gas: 61074) -TimelockControllerTest:testOperationPredecessorMultipleNotExecuted() (gas: 90309) -TimelockControllerTest:testOperationPredecessorNotExecuted() (gas: 96009) +TimelockControllerTest:testOperationPredecessorMultipleNotExecuted() (gas: 90312) +TimelockControllerTest:testOperationPredecessorNotExecuted() (gas: 96012) TimelockControllerTest:testOperationPredecessorNotScheduled() (gas: 64520) -TimelockControllerTest:testOperationReadyAfterTheExecutionTime() (gas: 52139) -TimelockControllerTest:testOperationReadyBeforeTheExecutionTime() (gas: 52093) -TimelockControllerTest:testOperationReadyOnTheExecutionTime() (gas: 51976) +TimelockControllerTest:testOperationReadyAfterTheExecutionTime() (gas: 52142) +TimelockControllerTest:testOperationReadyBeforeTheExecutionTime() (gas: 52096) +TimelockControllerTest:testOperationReadyOnTheExecutionTime() (gas: 51979) TimelockControllerTest:testOperationTargetRevert() (gas: 107017) TimelockControllerTest:testOperationTimestampHasBeenExecuted() (gas: 95910) -TimelockControllerTest:testOperationTimestampHasNotBeenExecuted() (gas: 50992) -TimelockControllerTest:testProposerCanBatchSchedule() (gas: 3094198) +TimelockControllerTest:testOperationTimestampHasNotBeenExecuted() (gas: 50995) +TimelockControllerTest:testProposerCanBatchSchedule() (gas: 3094008) TimelockControllerTest:testProposerCanCancel() (gas: 20259) -TimelockControllerTest:testProposerCanSchedule() (gas: 74616) -TimelockControllerTest:testProposerCannotBatchExecute() (gas: 1489914) -TimelockControllerTest:testProposerCannotExecute() (gas: 23542) +TimelockControllerTest:testProposerCanSchedule() (gas: 74622) +TimelockControllerTest:testProposerCannotBatchExecute() (gas: 1489856) +TimelockControllerTest:testProposerCannotExecute() (gas: 23536) TimelockControllerTest:testReturnsLaterMinimumDelayForCalls() (gas: 20830) TimelockControllerTest:testRevertWhenNotTimelock() (gas: 9105) -TimelockControllerTest:testScheduleAndExecuteWithEmptySalt() (gas: 105392) -TimelockControllerTest:testScheduleAndExecuteWithNonEmptySalt() (gas: 108844) -TimelockControllerTest:testStrangerCannotBatchExecute() (gas: 748624) -TimelockControllerTest:testStrangerCannotBatchSchedule() (gas: 746436) +TimelockControllerTest:testScheduleAndExecuteWithEmptySalt() (gas: 105401) +TimelockControllerTest:testScheduleAndExecuteWithNonEmptySalt() (gas: 108853) +TimelockControllerTest:testStrangerCannotBatchExecute() (gas: 748595) +TimelockControllerTest:testStrangerCannotBatchSchedule() (gas: 746410) TimelockControllerTest:testStrangerCannotCancel() (gas: 11304) -TimelockControllerTest:testStrangerCannotExecute() (gas: 16387) +TimelockControllerTest:testStrangerCannotExecute() (gas: 16384) TimelockControllerTest:testStrangerCannotSchedule() (gas: 14171) TimelockControllerTest:testSupportsInterfaceInvalidInterfaceId() (gas: 8492) TimelockControllerTest:testSupportsInterfaceInvalidInterfaceIdGasCost() (gas: 9287) diff --git a/scripts/generate_gas_snapshot.sh b/scripts/generate_gas_snapshot.sh index e06f94d5..bb24fc5d 100644 --- a/scripts/generate_gas_snapshot.sh +++ b/scripts/generate_gas_snapshot.sh @@ -1,5 +1,18 @@ #!/usr/bin/env bash +# Enable strict error handling: +# -E: Inherit `ERR` traps in functions and subshells. +# -e: Exit immediately if a command exits with a non-zero status. +# -u: Treat unset variables as an error and exit. +# -o pipefail: Return the exit status of the first failed command in a pipeline. +set -Eeuo pipefail + +# Enable debug mode if the environment variable `DEBUG` is set to `true`. +if [[ "${DEBUG:-false}" == "true" ]]; then + # Print each command before executing it. + set -x +fi + # Set the default values. OUTPUT_FILE=".gas-snapshot" FOUNDRY_PROFILE="default" @@ -16,6 +29,16 @@ prepend_to_output() { echo "$1" >> "$TEMP_FILE" } +# Utility function to parse the output of `forge --version` and transform it. +forge_version=$(forge --version | awk ' + /^forge Version:/ { version = $3 } + /Commit SHA:/ { sha = substr($3, 1, 7) } + /Build Timestamp:/ { timestamp = $3 } + END { + print "forge", version, "(" sha, timestamp ")" + } +') + # Parse the command line arguments. while [[ "$#" -gt 0 ]]; do case $1 in @@ -44,7 +67,7 @@ forge snapshot --snap "$OUTPUT_FILE" # Prepare the content to be prepended. prepend_to_output "Vyper version: $(vyper --version)" -prepend_to_output "Forge version: $(forge --version)" +prepend_to_output "Forge version: $forge_version" prepend_to_output "Vyper config:" forge config --json | jq -r ".vyper" >> "$TEMP_FILE" prepend_to_output "==========================================" From e9a9eed74b89ad1cd01b8d1a83734e453f1cf61d Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Wed, 22 Jan 2025 11:22:11 +0100 Subject: [PATCH 09/10] =?UTF-8?q?=F0=9F=91=B7=20Disable=20Foundry=20Warnin?= =?UTF-8?q?gs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Pascal Marco Caversaccio --- .github/workflows/checks.yml | 2 +- .github/workflows/halmos-venom.yml | 1 + .github/workflows/halmos.yml | 1 + .github/workflows/test-contracts-venom.yml | 6 ++++++ .github/workflows/test-contracts.yml | 6 ++++++ lib/forge-std | 2 +- 6 files changed, 16 insertions(+), 2 deletions(-) diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 4cc23803..72db9775 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -89,7 +89,7 @@ jobs: os: - ubuntu-latest ruby_version: - - 3.3 + - 3.4 steps: - name: Checkout diff --git a/.github/workflows/halmos-venom.yml b/.github/workflows/halmos-venom.yml index 705466c6..968e7aa1 100644 --- a/.github/workflows/halmos-venom.yml +++ b/.github/workflows/halmos-venom.yml @@ -65,6 +65,7 @@ jobs: run: forge config env: FOUNDRY_PROFILE: halmos-venom + FOUNDRY_DISABLE_NIGHTLY_WARNING: "1" - name: Run Halmos ERC-20 symbolic tests run: halmos --contract ERC20TestHalmos ${{ matrix.halmos }} diff --git a/.github/workflows/halmos.yml b/.github/workflows/halmos.yml index ab475952..768b26f5 100644 --- a/.github/workflows/halmos.yml +++ b/.github/workflows/halmos.yml @@ -65,6 +65,7 @@ jobs: run: forge config env: FOUNDRY_PROFILE: halmos + FOUNDRY_DISABLE_NIGHTLY_WARNING: "1" - name: Run Halmos ERC-20 symbolic tests run: halmos --contract ERC20TestHalmos ${{ matrix.halmos }} diff --git a/.github/workflows/test-contracts-venom.yml b/.github/workflows/test-contracts-venom.yml index fbc560e6..652211eb 100644 --- a/.github/workflows/test-contracts-venom.yml +++ b/.github/workflows/test-contracts-venom.yml @@ -72,21 +72,25 @@ jobs: run: forge config env: FOUNDRY_PROFILE: ci-venom + FOUNDRY_DISABLE_NIGHTLY_WARNING: "1" - name: Foundry tests run: forge test env: FOUNDRY_PROFILE: ci-venom + FOUNDRY_DISABLE_NIGHTLY_WARNING: "1" - name: Show the Foundry default config run: forge config env: FOUNDRY_PROFILE: default-venom + FOUNDRY_DISABLE_NIGHTLY_WARNING: "1" - name: Run snapshot run: NO_COLOR=1 forge snapshot >> $GITHUB_STEP_SUMMARY env: FOUNDRY_PROFILE: default-venom + FOUNDRY_DISABLE_NIGHTLY_WARNING: "1" - name: Install Homebrew uses: Homebrew/actions/setup-homebrew@master @@ -101,11 +105,13 @@ jobs: run: forge config env: FOUNDRY_PROFILE: echidna-venom + FOUNDRY_DISABLE_NIGHTLY_WARNING: "1" - name: Compile the Echidna test contracts run: forge build --build-info env: FOUNDRY_PROFILE: echidna-venom + FOUNDRY_DISABLE_NIGHTLY_WARNING: "1" - name: Run Echidna ERC-20 property tests run: echidna test/tokens/echidna/ERC20Properties.sol --contract CryticERC20ExternalHarness ${{ matrix.echidna }} diff --git a/.github/workflows/test-contracts.yml b/.github/workflows/test-contracts.yml index 37d8e6de..cb44d0e3 100644 --- a/.github/workflows/test-contracts.yml +++ b/.github/workflows/test-contracts.yml @@ -83,21 +83,25 @@ jobs: run: forge config env: FOUNDRY_PROFILE: ci + FOUNDRY_DISABLE_NIGHTLY_WARNING: "1" - name: Foundry tests run: forge test env: FOUNDRY_PROFILE: ci + FOUNDRY_DISABLE_NIGHTLY_WARNING: "1" - name: Show the Foundry default config run: forge config env: FOUNDRY_PROFILE: default + FOUNDRY_DISABLE_NIGHTLY_WARNING: "1" - name: Run snapshot run: NO_COLOR=1 forge snapshot >> $GITHUB_STEP_SUMMARY env: FOUNDRY_PROFILE: default + FOUNDRY_DISABLE_NIGHTLY_WARNING: "1" - name: Install Homebrew uses: Homebrew/actions/setup-homebrew@master @@ -112,11 +116,13 @@ jobs: run: forge config env: FOUNDRY_PROFILE: echidna + FOUNDRY_DISABLE_NIGHTLY_WARNING: "1" - name: Compile the Echidna test contracts run: forge build --build-info env: FOUNDRY_PROFILE: echidna + FOUNDRY_DISABLE_NIGHTLY_WARNING: "1" - name: Run Echidna ERC-20 property tests run: echidna test/tokens/echidna/ERC20Properties.sol --contract CryticERC20ExternalHarness ${{ matrix.echidna }} diff --git a/lib/forge-std b/lib/forge-std index 726a6ee5..999be66e 160000 --- a/lib/forge-std +++ b/lib/forge-std @@ -1 +1 @@ -Subproject commit 726a6ee5fc8427a0013d6f624e486c9130c0e336 +Subproject commit 999be66ec94c78090087f674bbf52ce1cca12b75 From 718548d66aa1596c6febedb3ca9987c366155f74 Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Wed, 22 Jan 2025 11:29:35 +0100 Subject: [PATCH 10/10] =?UTF-8?q?=F0=9F=91=B7=20Fix=20Codespell=20Warning?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Pascal Marco Caversaccio --- .github/workflows/checks.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 72db9775..64d3c578 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -81,6 +81,7 @@ jobs: with: check_filenames: true skip: ./.git,pnpm-lock.yaml + ignore_words_list: pre-emptive validate-links: runs-on: ${{ matrix.os }}