From 1feea2f1d5a39894afe5c9945c253028a201f4a0 Mon Sep 17 00:00:00 2001 From: Filipp Makarov Date: Tue, 24 Sep 2024 12:03:02 +0300 Subject: [PATCH 1/2] upd code --- cache_forge/solidity-files-cache.json | 2 +- src/AssociatedArrayLib.sol | 137 ++++++++++++++---- ...numerableMap.sol => EnumerableMap4337.sol} | 2 +- ...numerableSet.sol => EnumerableSet4337.sol} | 7 +- test/EnumerableMap.t.sol | 2 +- test/EnumerableSet.t.sol | 2 +- 6 files changed, 120 insertions(+), 32 deletions(-) rename src/{EnumerableMap.sol => EnumerableMap4337.sol} (99%) rename src/{EnumerableSet.sol => EnumerableSet4337.sol} (98%) diff --git a/cache_forge/solidity-files-cache.json b/cache_forge/solidity-files-cache.json index 342974e..250da09 100644 --- a/cache_forge/solidity-files-cache.json +++ b/cache_forge/solidity-files-cache.json @@ -1 +1 @@ -{"_format":"","paths":{"artifacts":"out","build_infos":"out/build-info","sources":"contracts","tests":"test","scripts":"script","libraries":["lib","node_modules"]},"files":{"lib/forge-std/src/Base.sol":{"lastModificationDate":1725369084214,"contentHash":"ee13c050b1914464f1d3f90cde90204b","sourceName":"lib/forge-std/src/Base.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/StdStorage.sol","lib/forge-std/src/Vm.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"CommonBase":{"0.8.26":{"path":"Base.sol/CommonBase.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}},"ScriptBase":{"0.8.26":{"path":"Base.sol/ScriptBase.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}},"TestBase":{"0.8.26":{"path":"Base.sol/TestBase.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true},"lib/forge-std/src/StdAssertions.sol":{"lastModificationDate":1725369084214,"contentHash":"25b77f9806b64d497b8a46aeb8e5f6f0","sourceName":"lib/forge-std/src/StdAssertions.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Vm.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"StdAssertions":{"0.8.26":{"path":"StdAssertions.sol/StdAssertions.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true},"lib/forge-std/src/StdChains.sol":{"lastModificationDate":1725369084214,"contentHash":"134a39a51ebf6702e9537d9b72fc4812","sourceName":"lib/forge-std/src/StdChains.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Vm.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"StdChains":{"0.8.26":{"path":"StdChains.sol/StdChains.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true},"lib/forge-std/src/StdCheats.sol":{"lastModificationDate":1725369084255,"contentHash":"7922ae0087a21ee3cdb97137be18c06c","sourceName":"lib/forge-std/src/StdCheats.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/StdStorage.sol","lib/forge-std/src/Vm.sol","lib/forge-std/src/console.sol","lib/forge-std/src/console2.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"StdCheats":{"0.8.26":{"path":"StdCheats.sol/StdCheats.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}},"StdCheatsSafe":{"0.8.26":{"path":"StdCheats.sol/StdCheatsSafe.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true},"lib/forge-std/src/StdError.sol":{"lastModificationDate":1725369084215,"contentHash":"64c896e1276a291776e5ea5aecb3870a","sourceName":"lib/forge-std/src/StdError.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"stdError":{"0.8.26":{"path":"StdError.sol/stdError.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true},"lib/forge-std/src/StdInvariant.sol":{"lastModificationDate":1725369084215,"contentHash":"f16837d0e7cb829544ae1f1319ea7643","sourceName":"lib/forge-std/src/StdInvariant.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"StdInvariant":{"0.8.26":{"path":"StdInvariant.sol/StdInvariant.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true},"lib/forge-std/src/StdJson.sol":{"lastModificationDate":1725369084215,"contentHash":"3339192c616789604138e2d8206c0702","sourceName":"lib/forge-std/src/StdJson.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Vm.sol"],"versionRequirement":">=0.6.0, <0.9.0","artifacts":{"stdJson":{"0.8.26":{"path":"StdJson.sol/stdJson.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true},"lib/forge-std/src/StdMath.sol":{"lastModificationDate":1725369084215,"contentHash":"9da8f453eba6bb98f3d75bc6822bfb29","sourceName":"lib/forge-std/src/StdMath.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"stdMath":{"0.8.26":{"path":"StdMath.sol/stdMath.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true},"lib/forge-std/src/StdStorage.sol":{"lastModificationDate":1725369084215,"contentHash":"ce68f6e336944f16d31351a47d0b19b8","sourceName":"lib/forge-std/src/StdStorage.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Vm.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"stdStorage":{"0.8.26":{"path":"StdStorage.sol/stdStorage.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}},"stdStorageSafe":{"0.8.26":{"path":"StdStorage.sol/stdStorageSafe.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true},"lib/forge-std/src/StdStyle.sol":{"lastModificationDate":1725369084215,"contentHash":"6281165a12aa639705c691fccefd855e","sourceName":"lib/forge-std/src/StdStyle.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Vm.sol"],"versionRequirement":">=0.4.22, <0.9.0","artifacts":{"StdStyle":{"0.8.26":{"path":"StdStyle.sol/StdStyle.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true},"lib/forge-std/src/StdToml.sol":{"lastModificationDate":1725369084215,"contentHash":"2bb543c13f276e5db311aa3b81ed1651","sourceName":"lib/forge-std/src/StdToml.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Vm.sol"],"versionRequirement":">=0.6.0, <0.9.0","artifacts":{"stdToml":{"0.8.26":{"path":"StdToml.sol/stdToml.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true},"lib/forge-std/src/StdUtils.sol":{"lastModificationDate":1725369084216,"contentHash":"b50717f17f251a2a96a5884c90add7bf","sourceName":"lib/forge-std/src/StdUtils.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Vm.sol","lib/forge-std/src/interfaces/IERC165.sol","lib/forge-std/src/interfaces/IERC20.sol","lib/forge-std/src/interfaces/IERC721.sol","lib/forge-std/src/interfaces/IMulticall3.sol","lib/forge-std/src/mocks/MockERC20.sol","lib/forge-std/src/mocks/MockERC721.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"StdUtils":{"0.8.26":{"path":"StdUtils.sol/StdUtils.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true},"lib/forge-std/src/Test.sol":{"lastModificationDate":1725369084216,"contentHash":"b6f15605355fc8c421fe42a90f94bf32","sourceName":"lib/forge-std/src/Test.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Base.sol","lib/forge-std/src/StdAssertions.sol","lib/forge-std/src/StdChains.sol","lib/forge-std/src/StdCheats.sol","lib/forge-std/src/StdError.sol","lib/forge-std/src/StdInvariant.sol","lib/forge-std/src/StdJson.sol","lib/forge-std/src/StdMath.sol","lib/forge-std/src/StdStorage.sol","lib/forge-std/src/StdStyle.sol","lib/forge-std/src/StdToml.sol","lib/forge-std/src/StdUtils.sol","lib/forge-std/src/Vm.sol","lib/forge-std/src/console.sol","lib/forge-std/src/console2.sol","lib/forge-std/src/interfaces/IERC165.sol","lib/forge-std/src/interfaces/IERC20.sol","lib/forge-std/src/interfaces/IERC721.sol","lib/forge-std/src/interfaces/IMulticall3.sol","lib/forge-std/src/mocks/MockERC20.sol","lib/forge-std/src/mocks/MockERC721.sol","lib/forge-std/src/safeconsole.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"Test":{"0.8.26":{"path":"Test.sol/Test.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true},"lib/forge-std/src/Vm.sol":{"lastModificationDate":1725369084255,"contentHash":"bd1ebd6d961246e45ffb60d5c3f68f82","sourceName":"lib/forge-std/src/Vm.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"Vm":{"0.8.26":{"path":"Vm.sol/Vm.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}},"VmSafe":{"0.8.26":{"path":"Vm.sol/VmSafe.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true},"lib/forge-std/src/console.sol":{"lastModificationDate":1725369084216,"contentHash":"19bc22856c14b56e4e55ab19c7a27c87","sourceName":"lib/forge-std/src/console.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.4.22, <0.9.0","artifacts":{"console":{"0.8.26":{"path":"console.sol/console.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true},"lib/forge-std/src/console2.sol":{"lastModificationDate":1725369084216,"contentHash":"f65ad21034b111e70fb5342d5771efcd","sourceName":"lib/forge-std/src/console2.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/console.sol"],"versionRequirement":">=0.4.22, <0.9.0","artifacts":{},"seenByCompiler":true},"lib/forge-std/src/interfaces/IERC165.sol":{"lastModificationDate":1725369084217,"contentHash":"90fe5e2e3ed432d6f3b408e7c9e8a739","sourceName":"lib/forge-std/src/interfaces/IERC165.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.6.2","artifacts":{"IERC165":{"0.8.26":{"path":"IERC165.sol/IERC165.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true},"lib/forge-std/src/interfaces/IERC20.sol":{"lastModificationDate":1725369084217,"contentHash":"8099161d518e5862a76750349d58e801","sourceName":"lib/forge-std/src/interfaces/IERC20.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.6.2","artifacts":{"IERC20":{"0.8.26":{"path":"IERC20.sol/IERC20.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true},"lib/forge-std/src/interfaces/IERC721.sol":{"lastModificationDate":1725369084217,"contentHash":"efc26e7f9a2f76b68088c8760ceae2dc","sourceName":"lib/forge-std/src/interfaces/IERC721.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/interfaces/IERC165.sol"],"versionRequirement":">=0.6.2","artifacts":{"IERC721":{"0.8.26":{"path":"IERC721.sol/IERC721.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}},"IERC721Enumerable":{"0.8.26":{"path":"IERC721.sol/IERC721Enumerable.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}},"IERC721Metadata":{"0.8.26":{"path":"IERC721.sol/IERC721Metadata.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}},"IERC721TokenReceiver":{"0.8.26":{"path":"IERC721.sol/IERC721TokenReceiver.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true},"lib/forge-std/src/interfaces/IMulticall3.sol":{"lastModificationDate":1725369084217,"contentHash":"7b131ca1ca32ef6378b7b9ad5488b901","sourceName":"lib/forge-std/src/interfaces/IMulticall3.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"IMulticall3":{"0.8.26":{"path":"IMulticall3.sol/IMulticall3.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true},"lib/forge-std/src/mocks/MockERC20.sol":{"lastModificationDate":1725369084217,"contentHash":"8e14d63e81e1d54dbc2d44df38ae9dec","sourceName":"lib/forge-std/src/mocks/MockERC20.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/interfaces/IERC20.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"MockERC20":{"0.8.26":{"path":"MockERC20.sol/MockERC20.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true},"lib/forge-std/src/mocks/MockERC721.sol":{"lastModificationDate":1725369084217,"contentHash":"e91cd9dba7f88f03710c56a347d89d1e","sourceName":"lib/forge-std/src/mocks/MockERC721.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/interfaces/IERC165.sol","lib/forge-std/src/interfaces/IERC721.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"MockERC721":{"0.8.26":{"path":"MockERC721.sol/MockERC721.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true},"lib/forge-std/src/safeconsole.sol":{"lastModificationDate":1725369084218,"contentHash":"1445aa2f47000e212173e0cefd6c7a77","sourceName":"lib/forge-std/src/safeconsole.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"safeconsole":{"0.8.26":{"path":"safeconsole.sol/safeconsole.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true},"src/AssociatedArrayLib.sol":{"lastModificationDate":1725369163930,"contentHash":"9e82f3d7f0b275b708a793d2d23c4a85","sourceName":"src/AssociatedArrayLib.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":"^0.8.20","artifacts":{"AssociatedArrayLib":{"0.8.26":{"path":"AssociatedArrayLib.sol/AssociatedArrayLib.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true},"src/EnumerableMap.sol":{"lastModificationDate":1725369248066,"contentHash":"7bcdddb4a14e6163792431e5b42abc85","sourceName":"src/EnumerableMap.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["src/AssociatedArrayLib.sol","src/EnumerableSet.sol"],"versionRequirement":"^0.8.20","artifacts":{"EnumerableMap":{"0.8.26":{"path":"EnumerableMap.sol/EnumerableMap.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true},"src/EnumerableSet.sol":{"lastModificationDate":1725369163930,"contentHash":"3763a1724aedd1b1c66c63e43806e58b","sourceName":"src/EnumerableSet.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["src/AssociatedArrayLib.sol"],"versionRequirement":"^0.8.20","artifacts":{"EnumerableSet":{"0.8.26":{"path":"EnumerableSet.sol/EnumerableSet.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true},"test/EnumerableMap.t.sol":{"lastModificationDate":1725369249161,"contentHash":"82eef0de83d92b3ae9b81064d43aaa1a","sourceName":"test/EnumerableMap.t.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Base.sol","lib/forge-std/src/StdAssertions.sol","lib/forge-std/src/StdChains.sol","lib/forge-std/src/StdCheats.sol","lib/forge-std/src/StdError.sol","lib/forge-std/src/StdInvariant.sol","lib/forge-std/src/StdJson.sol","lib/forge-std/src/StdMath.sol","lib/forge-std/src/StdStorage.sol","lib/forge-std/src/StdStyle.sol","lib/forge-std/src/StdToml.sol","lib/forge-std/src/StdUtils.sol","lib/forge-std/src/Test.sol","lib/forge-std/src/Vm.sol","lib/forge-std/src/console.sol","lib/forge-std/src/console2.sol","lib/forge-std/src/interfaces/IERC165.sol","lib/forge-std/src/interfaces/IERC20.sol","lib/forge-std/src/interfaces/IERC721.sol","lib/forge-std/src/interfaces/IMulticall3.sol","lib/forge-std/src/mocks/MockERC20.sol","lib/forge-std/src/mocks/MockERC721.sol","lib/forge-std/src/safeconsole.sol","src/AssociatedArrayLib.sol","src/EnumerableMap.sol","src/EnumerableSet.sol"],"versionRequirement":"^0.8.20","artifacts":{"EnumerableMapTest":{"0.8.26":{"path":"EnumerableMap.t.sol/EnumerableMapTest.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true},"test/EnumerableSet.t.sol":{"lastModificationDate":1725369249161,"contentHash":"4ca6f2358e7318070c31960cc9076fdc","sourceName":"test/EnumerableSet.t.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Base.sol","lib/forge-std/src/StdAssertions.sol","lib/forge-std/src/StdChains.sol","lib/forge-std/src/StdCheats.sol","lib/forge-std/src/StdError.sol","lib/forge-std/src/StdInvariant.sol","lib/forge-std/src/StdJson.sol","lib/forge-std/src/StdMath.sol","lib/forge-std/src/StdStorage.sol","lib/forge-std/src/StdStyle.sol","lib/forge-std/src/StdToml.sol","lib/forge-std/src/StdUtils.sol","lib/forge-std/src/Test.sol","lib/forge-std/src/Vm.sol","lib/forge-std/src/console.sol","lib/forge-std/src/console2.sol","lib/forge-std/src/interfaces/IERC165.sol","lib/forge-std/src/interfaces/IERC20.sol","lib/forge-std/src/interfaces/IERC721.sol","lib/forge-std/src/interfaces/IMulticall3.sol","lib/forge-std/src/mocks/MockERC20.sol","lib/forge-std/src/mocks/MockERC721.sol","lib/forge-std/src/safeconsole.sol","src/AssociatedArrayLib.sol","src/EnumerableSet.sol"],"versionRequirement":"^0.8.20","artifacts":{"EnumerableSetTest":{"0.8.26":{"path":"EnumerableSet.t.sol/EnumerableSetTest.json","build_id":"f2ca0f1d97db9810b466965ac563ed0b"}}},"seenByCompiler":true}},"builds":["f2ca0f1d97db9810b466965ac563ed0b"]} \ No newline at end of file +{"_format":"","paths":{"artifacts":"out","build_infos":"out/build-info","sources":"src","tests":"test","scripts":"script","libraries":["lib","node_modules"]},"files":{"lib/forge-std/src/Base.sol":{"lastModificationDate":1727168489864,"contentHash":"ee13c050b1914464f1d3f90cde90204b","sourceName":"lib/forge-std/src/Base.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/StdStorage.sol","lib/forge-std/src/Vm.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"CommonBase":{"0.8.26":{"path":"Base.sol/CommonBase.json","build_id":"06892858f2c156b61a3f778aed90d32a"}},"ScriptBase":{"0.8.26":{"path":"Base.sol/ScriptBase.json","build_id":"06892858f2c156b61a3f778aed90d32a"}},"TestBase":{"0.8.26":{"path":"Base.sol/TestBase.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/StdAssertions.sol":{"lastModificationDate":1727168489864,"contentHash":"25b77f9806b64d497b8a46aeb8e5f6f0","sourceName":"lib/forge-std/src/StdAssertions.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Vm.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"StdAssertions":{"0.8.26":{"path":"StdAssertions.sol/StdAssertions.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/StdChains.sol":{"lastModificationDate":1727168489864,"contentHash":"134a39a51ebf6702e9537d9b72fc4812","sourceName":"lib/forge-std/src/StdChains.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Vm.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"StdChains":{"0.8.26":{"path":"StdChains.sol/StdChains.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/StdCheats.sol":{"lastModificationDate":1727168489864,"contentHash":"7922ae0087a21ee3cdb97137be18c06c","sourceName":"lib/forge-std/src/StdCheats.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/StdStorage.sol","lib/forge-std/src/Vm.sol","lib/forge-std/src/console.sol","lib/forge-std/src/console2.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"StdCheats":{"0.8.26":{"path":"StdCheats.sol/StdCheats.json","build_id":"06892858f2c156b61a3f778aed90d32a"}},"StdCheatsSafe":{"0.8.26":{"path":"StdCheats.sol/StdCheatsSafe.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/StdError.sol":{"lastModificationDate":1727168489864,"contentHash":"64c896e1276a291776e5ea5aecb3870a","sourceName":"lib/forge-std/src/StdError.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"stdError":{"0.8.26":{"path":"StdError.sol/stdError.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/StdInvariant.sol":{"lastModificationDate":1727168489864,"contentHash":"f16837d0e7cb829544ae1f1319ea7643","sourceName":"lib/forge-std/src/StdInvariant.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"StdInvariant":{"0.8.26":{"path":"StdInvariant.sol/StdInvariant.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/StdJson.sol":{"lastModificationDate":1727168489864,"contentHash":"3339192c616789604138e2d8206c0702","sourceName":"lib/forge-std/src/StdJson.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Vm.sol"],"versionRequirement":">=0.6.0, <0.9.0","artifacts":{"stdJson":{"0.8.26":{"path":"StdJson.sol/stdJson.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/StdMath.sol":{"lastModificationDate":1727168489864,"contentHash":"9da8f453eba6bb98f3d75bc6822bfb29","sourceName":"lib/forge-std/src/StdMath.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"stdMath":{"0.8.26":{"path":"StdMath.sol/stdMath.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/StdStorage.sol":{"lastModificationDate":1727168489865,"contentHash":"ce68f6e336944f16d31351a47d0b19b8","sourceName":"lib/forge-std/src/StdStorage.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Vm.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"stdStorage":{"0.8.26":{"path":"StdStorage.sol/stdStorage.json","build_id":"06892858f2c156b61a3f778aed90d32a"}},"stdStorageSafe":{"0.8.26":{"path":"StdStorage.sol/stdStorageSafe.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/StdStyle.sol":{"lastModificationDate":1727168489865,"contentHash":"6281165a12aa639705c691fccefd855e","sourceName":"lib/forge-std/src/StdStyle.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Vm.sol"],"versionRequirement":">=0.4.22, <0.9.0","artifacts":{"StdStyle":{"0.8.26":{"path":"StdStyle.sol/StdStyle.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/StdToml.sol":{"lastModificationDate":1727168489865,"contentHash":"2bb543c13f276e5db311aa3b81ed1651","sourceName":"lib/forge-std/src/StdToml.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Vm.sol"],"versionRequirement":">=0.6.0, <0.9.0","artifacts":{"stdToml":{"0.8.26":{"path":"StdToml.sol/stdToml.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/StdUtils.sol":{"lastModificationDate":1727168489865,"contentHash":"b50717f17f251a2a96a5884c90add7bf","sourceName":"lib/forge-std/src/StdUtils.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Vm.sol","lib/forge-std/src/interfaces/IERC165.sol","lib/forge-std/src/interfaces/IERC20.sol","lib/forge-std/src/interfaces/IERC721.sol","lib/forge-std/src/interfaces/IMulticall3.sol","lib/forge-std/src/mocks/MockERC20.sol","lib/forge-std/src/mocks/MockERC721.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"StdUtils":{"0.8.26":{"path":"StdUtils.sol/StdUtils.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/Test.sol":{"lastModificationDate":1727168489865,"contentHash":"b6f15605355fc8c421fe42a90f94bf32","sourceName":"lib/forge-std/src/Test.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Base.sol","lib/forge-std/src/StdAssertions.sol","lib/forge-std/src/StdChains.sol","lib/forge-std/src/StdCheats.sol","lib/forge-std/src/StdError.sol","lib/forge-std/src/StdInvariant.sol","lib/forge-std/src/StdJson.sol","lib/forge-std/src/StdMath.sol","lib/forge-std/src/StdStorage.sol","lib/forge-std/src/StdStyle.sol","lib/forge-std/src/StdToml.sol","lib/forge-std/src/StdUtils.sol","lib/forge-std/src/Vm.sol","lib/forge-std/src/console.sol","lib/forge-std/src/console2.sol","lib/forge-std/src/interfaces/IERC165.sol","lib/forge-std/src/interfaces/IERC20.sol","lib/forge-std/src/interfaces/IERC721.sol","lib/forge-std/src/interfaces/IMulticall3.sol","lib/forge-std/src/mocks/MockERC20.sol","lib/forge-std/src/mocks/MockERC721.sol","lib/forge-std/src/safeconsole.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"Test":{"0.8.26":{"path":"Test.sol/Test.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/Vm.sol":{"lastModificationDate":1727168489865,"contentHash":"bd1ebd6d961246e45ffb60d5c3f68f82","sourceName":"lib/forge-std/src/Vm.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"Vm":{"0.8.26":{"path":"Vm.sol/Vm.json","build_id":"06892858f2c156b61a3f778aed90d32a"}},"VmSafe":{"0.8.26":{"path":"Vm.sol/VmSafe.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/console.sol":{"lastModificationDate":1727168489865,"contentHash":"19bc22856c14b56e4e55ab19c7a27c87","sourceName":"lib/forge-std/src/console.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.4.22, <0.9.0","artifacts":{"console":{"0.8.26":{"path":"console.sol/console.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/console2.sol":{"lastModificationDate":1727168489865,"contentHash":"f65ad21034b111e70fb5342d5771efcd","sourceName":"lib/forge-std/src/console2.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/console.sol"],"versionRequirement":">=0.4.22, <0.9.0","artifacts":{},"seenByCompiler":true},"lib/forge-std/src/interfaces/IERC165.sol":{"lastModificationDate":1727168489866,"contentHash":"90fe5e2e3ed432d6f3b408e7c9e8a739","sourceName":"lib/forge-std/src/interfaces/IERC165.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.6.2","artifacts":{"IERC165":{"0.8.26":{"path":"IERC165.sol/IERC165.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/interfaces/IERC20.sol":{"lastModificationDate":1727168489866,"contentHash":"8099161d518e5862a76750349d58e801","sourceName":"lib/forge-std/src/interfaces/IERC20.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.6.2","artifacts":{"IERC20":{"0.8.26":{"path":"IERC20.sol/IERC20.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/interfaces/IERC721.sol":{"lastModificationDate":1727168489866,"contentHash":"efc26e7f9a2f76b68088c8760ceae2dc","sourceName":"lib/forge-std/src/interfaces/IERC721.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/interfaces/IERC165.sol"],"versionRequirement":">=0.6.2","artifacts":{"IERC721":{"0.8.26":{"path":"IERC721.sol/IERC721.json","build_id":"06892858f2c156b61a3f778aed90d32a"}},"IERC721Enumerable":{"0.8.26":{"path":"IERC721.sol/IERC721Enumerable.json","build_id":"06892858f2c156b61a3f778aed90d32a"}},"IERC721Metadata":{"0.8.26":{"path":"IERC721.sol/IERC721Metadata.json","build_id":"06892858f2c156b61a3f778aed90d32a"}},"IERC721TokenReceiver":{"0.8.26":{"path":"IERC721.sol/IERC721TokenReceiver.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/interfaces/IMulticall3.sol":{"lastModificationDate":1727168489866,"contentHash":"7b131ca1ca32ef6378b7b9ad5488b901","sourceName":"lib/forge-std/src/interfaces/IMulticall3.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"IMulticall3":{"0.8.26":{"path":"IMulticall3.sol/IMulticall3.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/mocks/MockERC20.sol":{"lastModificationDate":1727168489866,"contentHash":"8e14d63e81e1d54dbc2d44df38ae9dec","sourceName":"lib/forge-std/src/mocks/MockERC20.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/interfaces/IERC20.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"MockERC20":{"0.8.26":{"path":"MockERC20.sol/MockERC20.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/mocks/MockERC721.sol":{"lastModificationDate":1727168489866,"contentHash":"e91cd9dba7f88f03710c56a347d89d1e","sourceName":"lib/forge-std/src/mocks/MockERC721.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/interfaces/IERC165.sol","lib/forge-std/src/interfaces/IERC721.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"MockERC721":{"0.8.26":{"path":"MockERC721.sol/MockERC721.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/safeconsole.sol":{"lastModificationDate":1727168489867,"contentHash":"1445aa2f47000e212173e0cefd6c7a77","sourceName":"lib/forge-std/src/safeconsole.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"safeconsole":{"0.8.26":{"path":"safeconsole.sol/safeconsole.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"src/AssociatedArrayLib.sol":{"lastModificationDate":1727168518560,"contentHash":"7bb869988fd1d8a337ce404df699980f","sourceName":"src/AssociatedArrayLib.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":"^0.8.20","artifacts":{"AssociatedArrayLib":{"0.8.26":{"path":"AssociatedArrayLib.sol/AssociatedArrayLib.json","build_id":"1f653b004925e7c8555fd0078ae5c06d"}}},"seenByCompiler":true},"src/EnumerableMap4337.sol":{"lastModificationDate":1727168518563,"contentHash":"4cd46438307d082ed47864adfc92536a","sourceName":"src/EnumerableMap4337.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["src/AssociatedArrayLib.sol","src/EnumerableSet4337.sol"],"versionRequirement":"^0.8.20","artifacts":{"EnumerableMap":{"0.8.26":{"path":"EnumerableMap4337.sol/EnumerableMap.json","build_id":"1f653b004925e7c8555fd0078ae5c06d"}}},"seenByCompiler":true},"src/EnumerableSet4337.sol":{"lastModificationDate":1727168518565,"contentHash":"83dbb8ae8d3f02aa0558bca4eb420f5b","sourceName":"src/EnumerableSet4337.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["src/AssociatedArrayLib.sol"],"versionRequirement":"^0.8.20","artifacts":{"EnumerableSet":{"0.8.26":{"path":"EnumerableSet4337.sol/EnumerableSet.json","build_id":"1f653b004925e7c8555fd0078ae5c06d"}}},"seenByCompiler":true},"test/EnumerableMap.t.sol":{"lastModificationDate":1727168555056,"contentHash":"05dbe5c6448aea23df9ff7a020bf1a73","sourceName":"test/EnumerableMap.t.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Base.sol","lib/forge-std/src/StdAssertions.sol","lib/forge-std/src/StdChains.sol","lib/forge-std/src/StdCheats.sol","lib/forge-std/src/StdError.sol","lib/forge-std/src/StdInvariant.sol","lib/forge-std/src/StdJson.sol","lib/forge-std/src/StdMath.sol","lib/forge-std/src/StdStorage.sol","lib/forge-std/src/StdStyle.sol","lib/forge-std/src/StdToml.sol","lib/forge-std/src/StdUtils.sol","lib/forge-std/src/Test.sol","lib/forge-std/src/Vm.sol","lib/forge-std/src/console.sol","lib/forge-std/src/console2.sol","lib/forge-std/src/interfaces/IERC165.sol","lib/forge-std/src/interfaces/IERC20.sol","lib/forge-std/src/interfaces/IERC721.sol","lib/forge-std/src/interfaces/IMulticall3.sol","lib/forge-std/src/mocks/MockERC20.sol","lib/forge-std/src/mocks/MockERC721.sol","lib/forge-std/src/safeconsole.sol","src/AssociatedArrayLib.sol","src/EnumerableMap4337.sol","src/EnumerableSet4337.sol"],"versionRequirement":"^0.8.20","artifacts":{"EnumerableMapTest":{"0.8.26":{"path":"EnumerableMap.t.sol/EnumerableMapTest.json","build_id":"1f653b004925e7c8555fd0078ae5c06d"}}},"seenByCompiler":true},"test/EnumerableSet.t.sol":{"lastModificationDate":1727168560937,"contentHash":"62e9b807bcb84fcf83af528b521cf6ac","sourceName":"test/EnumerableSet.t.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Base.sol","lib/forge-std/src/StdAssertions.sol","lib/forge-std/src/StdChains.sol","lib/forge-std/src/StdCheats.sol","lib/forge-std/src/StdError.sol","lib/forge-std/src/StdInvariant.sol","lib/forge-std/src/StdJson.sol","lib/forge-std/src/StdMath.sol","lib/forge-std/src/StdStorage.sol","lib/forge-std/src/StdStyle.sol","lib/forge-std/src/StdToml.sol","lib/forge-std/src/StdUtils.sol","lib/forge-std/src/Test.sol","lib/forge-std/src/Vm.sol","lib/forge-std/src/console.sol","lib/forge-std/src/console2.sol","lib/forge-std/src/interfaces/IERC165.sol","lib/forge-std/src/interfaces/IERC20.sol","lib/forge-std/src/interfaces/IERC721.sol","lib/forge-std/src/interfaces/IMulticall3.sol","lib/forge-std/src/mocks/MockERC20.sol","lib/forge-std/src/mocks/MockERC721.sol","lib/forge-std/src/safeconsole.sol","src/AssociatedArrayLib.sol","src/EnumerableSet4337.sol"],"versionRequirement":"^0.8.20","artifacts":{"EnumerableSetTest":{"0.8.26":{"path":"EnumerableSet.t.sol/EnumerableSetTest.json","build_id":"1f653b004925e7c8555fd0078ae5c06d"}}},"seenByCompiler":true}},"builds":["06892858f2c156b61a3f778aed90d32a","1f653b004925e7c8555fd0078ae5c06d"]} \ No newline at end of file diff --git a/src/AssociatedArrayLib.sol b/src/AssociatedArrayLib.sol index 9119789..20d928d 100644 --- a/src/AssociatedArrayLib.sol +++ b/src/AssociatedArrayLib.sol @@ -10,45 +10,85 @@ library AssociatedArrayLib { uint256 _spacer; } - function _length(Array storage s, address account) private view returns (uint256 __length) { + function _slot(Array storage s, address account) private pure returns (bytes32 __slot) { assembly { mstore(0x00, account) mstore(0x20, s.slot) - __length := sload(keccak256(0x00, 0x40)) + __slot := keccak256(0x00, 0x40) + } + } + + function _length(Array storage s, address account) private view returns (uint256 __length) { + bytes32 slot = _slot(s, account); + assembly { + __length := sload(slot) } } function _get(Array storage s, address account, uint256 index) private view returns (bytes32 value) { - if (index >= _length(s, account)) revert AssociatedArray_OutOfBounds(index); + return _get(_slot(s, account), index); + } + + function _get(bytes32 slot, uint256 index) private view returns (bytes32 value) { assembly { - mstore(0x00, account) - mstore(0x20, s.slot) - value := sload(add(keccak256(0x00, 0x40), mul(0x20, add(index, 1)))) + //if (index >= _length(s, account)) revert AssociatedArray_OutOfBounds(index); + if iszero(lt(index, sload(slot))) { + mstore(0, 0x8277484f) // `AssociatedArray_OutOfBounds(uint256)` + mstore(0x20, index) + revert(0x1c, 0x24) + } + value := sload(add(slot, mul(0x20, add(index, 1)))) } } function _getAll(Array storage s, address account) private view returns (bytes32[] memory values) { - uint256 __length = _length(s, account); + bytes32 slot = _slot(s, account); + uint256 __length; + assembly { + __length := sload(slot) + } values = new bytes32[](__length); for (uint256 i; i < __length; i++) { - values[i] = _get(s, account, i); + values[i] = _get(slot, i); } } + // inefficient. complexity = O(n) + // use with caution + // in case of large arrays, consider using EnumerableSet4337 instead + function _contains(Array storage s, address account, bytes32 value) private view returns (bool) { + bytes32 slot = _slot(s, account); + uint256 __length; + assembly { + __length := sload(slot) + } + for (uint256 i; i < __length; i++) { + if (_get(slot, i) == value) { + return true; + } + } + return false; + } + function _set(Array storage s, address account, uint256 index, bytes32 value) private { - if (index >= _length(s, account)) revert AssociatedArray_OutOfBounds(index); + _set(_slot(s, account), index, value); + } + + function _set(bytes32 slot, uint256 index, bytes32 value) private { assembly { - mstore(0x00, account) - mstore(0x20, s.slot) - sstore(add(keccak256(0x00, 0x40), mul(0x20, add(index, 1))), value) + //if (index >= _length(s, account)) revert AssociatedArray_OutOfBounds(index); + if iszero(lt(index, sload(slot))) { + mstore(0, 0x8277484f) // `AssociatedArray_OutOfBounds(uint256)` + mstore(0x20, index) + revert(0x1c, 0x24) + } + sstore(add(slot, mul(0x20, add(index, 1))), value) } } function _push(Array storage s, address account, bytes32 value) private { + bytes32 slot = _slot(s, account); assembly { - mstore(0x00, account) // store a - mstore(0x20, s.slot) //store x - let slot := keccak256(0x00, 0x40) // load length (stored @ slot), add 1 to it => index. // mul index by 0x20 and add it to orig slot to get the next free slot let index := add(sload(slot), 1) @@ -58,24 +98,39 @@ library AssociatedArrayLib { } function _pop(Array storage s, address account) private { - uint256 __length = _length(s, account); + bytes32 slot = _slot(s, account); + uint256 __length; + assembly { + __length := sload(slot) + } if (__length == 0) return; - _set(s, account, __length - 1, 0); + _set(slot, __length - 1, 0); assembly { - mstore(0x00, account) - mstore(0x20, s.slot) - sstore(keccak256(0x00, 0x40), sub(__length, 1)) + sstore(slot, sub(__length, 1)) } } function _remove(Array storage s, address account, uint256 index) private { - uint256 __length = _length(s, account); - if (index >= __length) revert AssociatedArray_OutOfBounds(index); - _set(s, account, index, _get(s, account, __length - 1)); + bytes32 slot = _slot(s, account); + uint256 __length; assembly { - mstore(0x00, account) - mstore(0x20, s.slot) - sstore(keccak256(0x00, 0x40), sub(__length, 1)) + __length := sload(slot) + if iszero(lt(index, __length)) { + mstore(0, 0x8277484f) // `AssociatedArray_OutOfBounds(uint256)` + mstore(0x20, index) + revert(0x1c, 0x24) + } + } + _set(slot, index, _get(s, account, __length - 1)); + + assembly { + // clear the last slot + // this is the 'unchecked' version of _set(slot, __length - 1, 0) + // as we use length-1 as index, so the check is excessive. + // also removes extra -1 and +1 operations + sstore(add(slot, mul(0x20, __length)), 0) + // store new length + sstore(slot, sub(__length, 1)) } } @@ -95,6 +150,16 @@ library AssociatedArrayLib { return _getAll(s._inner, account); } + function contains(Bytes32Array storage s, address account, bytes32 value) internal view returns (bool) { + return _contains(s._inner, account, value); + } + + function add(Bytes32Array storage s, address account, bytes32 value) internal { + if (!_contains(s._inner, account, value)) { + _push(s._inner, account, value); + } + } + function set(Bytes32Array storage s, address account, uint256 index, bytes32 value) internal { _set(s._inner, account, index, value); } @@ -134,6 +199,16 @@ library AssociatedArrayLib { return addressArray; } + function contains(AddressArray storage s, address account, address value) internal view returns (bool) { + return _contains(s._inner, account, bytes32(uint256(uint160(value)))); + } + + function add(AddressArray storage s, address account, address value) internal { + if (!_contains(s._inner, account, bytes32(uint256(uint160(value))))) { + _push(s._inner, account, bytes32(uint256(uint160(value)))); + } + } + function set(AddressArray storage s, address account, uint256 index, address value) internal { _set(s._inner, account, index, bytes32(uint256(uint160(value)))); } @@ -173,6 +248,16 @@ library AssociatedArrayLib { return uintArray; } + function contains(UintArray storage s, address account, uint256 value) internal view returns (bool) { + return _contains(s._inner, account, bytes32(value)); + } + + function add(UintArray storage s, address account, uint256 value) internal { + if (!_contains(s._inner, account, bytes32(value))) { + _push(s._inner, account, bytes32(value)); + } + } + function set(UintArray storage s, address account, uint256 index, uint256 value) internal { _set(s._inner, account, index, bytes32(value)); } diff --git a/src/EnumerableMap.sol b/src/EnumerableMap4337.sol similarity index 99% rename from src/EnumerableMap.sol rename to src/EnumerableMap4337.sol index b2cce53..4eccf43 100644 --- a/src/EnumerableMap.sol +++ b/src/EnumerableMap4337.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.20; -import { EnumerableSet } from "./EnumerableSet.sol"; +import { EnumerableSet } from "./EnumerableSet4337.sol"; /** * Fork of OZ's EnumerableSet that makes all storage access ERC-4337 compliant via associated storage diff --git a/src/EnumerableSet.sol b/src/EnumerableSet4337.sol similarity index 98% rename from src/EnumerableSet.sol rename to src/EnumerableSet4337.sol index 6b6c76f..ad62b37 100644 --- a/src/EnumerableSet.sol +++ b/src/EnumerableSet4337.sol @@ -86,9 +86,12 @@ library EnumerableSet { } function _removeAll(Set storage set, address account) internal { + // get length of the array uint256 len = _length(set, account); - for (uint256 i; i < len; i++) { - _remove(set, account, _at(set, account, i)); + for (uint256 i = 1; i <= len; i++) { + // get last value + bytes32 value = _at(set, account, len - i); + _remove(set, account, value); } } diff --git a/test/EnumerableMap.t.sol b/test/EnumerableMap.t.sol index ea1508d..e4f9716 100644 --- a/test/EnumerableMap.t.sol +++ b/test/EnumerableMap.t.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.20; import "forge-std/Test.sol"; -import "src/EnumerableMap.sol"; +import "src/EnumerableMap4337.sol"; contract EnumerableMapTest is Test { using EnumerableMap for EnumerableMap.Bytes32ToBytes32Map; diff --git a/test/EnumerableSet.t.sol b/test/EnumerableSet.t.sol index f1dc362..f6582ce 100644 --- a/test/EnumerableSet.t.sol +++ b/test/EnumerableSet.t.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.20; import "forge-std/Test.sol"; -import "src/EnumerableSet.sol"; +import "src/EnumerableSet4337.sol"; contract EnumerableSetTest is Test { using EnumerableSet for EnumerableSet.Bytes32Set; From d773e9b909de04dd9bce8fb15ad1be77ee1e6068 Mon Sep 17 00:00:00 2001 From: Filipp Makarov Date: Tue, 24 Sep 2024 12:06:42 +0300 Subject: [PATCH 2/2] rm cache --- .gitignore | 2 ++ cache_forge/solidity-files-cache.json | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) delete mode 100644 cache_forge/solidity-files-cache.json diff --git a/.gitignore b/.gitignore index 85198aa..d62054f 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,5 @@ docs/ # Dotenv file .env + +cache_forge diff --git a/cache_forge/solidity-files-cache.json b/cache_forge/solidity-files-cache.json deleted file mode 100644 index 250da09..0000000 --- a/cache_forge/solidity-files-cache.json +++ /dev/null @@ -1 +0,0 @@ -{"_format":"","paths":{"artifacts":"out","build_infos":"out/build-info","sources":"src","tests":"test","scripts":"script","libraries":["lib","node_modules"]},"files":{"lib/forge-std/src/Base.sol":{"lastModificationDate":1727168489864,"contentHash":"ee13c050b1914464f1d3f90cde90204b","sourceName":"lib/forge-std/src/Base.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/StdStorage.sol","lib/forge-std/src/Vm.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"CommonBase":{"0.8.26":{"path":"Base.sol/CommonBase.json","build_id":"06892858f2c156b61a3f778aed90d32a"}},"ScriptBase":{"0.8.26":{"path":"Base.sol/ScriptBase.json","build_id":"06892858f2c156b61a3f778aed90d32a"}},"TestBase":{"0.8.26":{"path":"Base.sol/TestBase.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/StdAssertions.sol":{"lastModificationDate":1727168489864,"contentHash":"25b77f9806b64d497b8a46aeb8e5f6f0","sourceName":"lib/forge-std/src/StdAssertions.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Vm.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"StdAssertions":{"0.8.26":{"path":"StdAssertions.sol/StdAssertions.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/StdChains.sol":{"lastModificationDate":1727168489864,"contentHash":"134a39a51ebf6702e9537d9b72fc4812","sourceName":"lib/forge-std/src/StdChains.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Vm.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"StdChains":{"0.8.26":{"path":"StdChains.sol/StdChains.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/StdCheats.sol":{"lastModificationDate":1727168489864,"contentHash":"7922ae0087a21ee3cdb97137be18c06c","sourceName":"lib/forge-std/src/StdCheats.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/StdStorage.sol","lib/forge-std/src/Vm.sol","lib/forge-std/src/console.sol","lib/forge-std/src/console2.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"StdCheats":{"0.8.26":{"path":"StdCheats.sol/StdCheats.json","build_id":"06892858f2c156b61a3f778aed90d32a"}},"StdCheatsSafe":{"0.8.26":{"path":"StdCheats.sol/StdCheatsSafe.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/StdError.sol":{"lastModificationDate":1727168489864,"contentHash":"64c896e1276a291776e5ea5aecb3870a","sourceName":"lib/forge-std/src/StdError.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"stdError":{"0.8.26":{"path":"StdError.sol/stdError.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/StdInvariant.sol":{"lastModificationDate":1727168489864,"contentHash":"f16837d0e7cb829544ae1f1319ea7643","sourceName":"lib/forge-std/src/StdInvariant.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"StdInvariant":{"0.8.26":{"path":"StdInvariant.sol/StdInvariant.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/StdJson.sol":{"lastModificationDate":1727168489864,"contentHash":"3339192c616789604138e2d8206c0702","sourceName":"lib/forge-std/src/StdJson.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Vm.sol"],"versionRequirement":">=0.6.0, <0.9.0","artifacts":{"stdJson":{"0.8.26":{"path":"StdJson.sol/stdJson.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/StdMath.sol":{"lastModificationDate":1727168489864,"contentHash":"9da8f453eba6bb98f3d75bc6822bfb29","sourceName":"lib/forge-std/src/StdMath.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"stdMath":{"0.8.26":{"path":"StdMath.sol/stdMath.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/StdStorage.sol":{"lastModificationDate":1727168489865,"contentHash":"ce68f6e336944f16d31351a47d0b19b8","sourceName":"lib/forge-std/src/StdStorage.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Vm.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"stdStorage":{"0.8.26":{"path":"StdStorage.sol/stdStorage.json","build_id":"06892858f2c156b61a3f778aed90d32a"}},"stdStorageSafe":{"0.8.26":{"path":"StdStorage.sol/stdStorageSafe.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/StdStyle.sol":{"lastModificationDate":1727168489865,"contentHash":"6281165a12aa639705c691fccefd855e","sourceName":"lib/forge-std/src/StdStyle.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Vm.sol"],"versionRequirement":">=0.4.22, <0.9.0","artifacts":{"StdStyle":{"0.8.26":{"path":"StdStyle.sol/StdStyle.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/StdToml.sol":{"lastModificationDate":1727168489865,"contentHash":"2bb543c13f276e5db311aa3b81ed1651","sourceName":"lib/forge-std/src/StdToml.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Vm.sol"],"versionRequirement":">=0.6.0, <0.9.0","artifacts":{"stdToml":{"0.8.26":{"path":"StdToml.sol/stdToml.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/StdUtils.sol":{"lastModificationDate":1727168489865,"contentHash":"b50717f17f251a2a96a5884c90add7bf","sourceName":"lib/forge-std/src/StdUtils.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Vm.sol","lib/forge-std/src/interfaces/IERC165.sol","lib/forge-std/src/interfaces/IERC20.sol","lib/forge-std/src/interfaces/IERC721.sol","lib/forge-std/src/interfaces/IMulticall3.sol","lib/forge-std/src/mocks/MockERC20.sol","lib/forge-std/src/mocks/MockERC721.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"StdUtils":{"0.8.26":{"path":"StdUtils.sol/StdUtils.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/Test.sol":{"lastModificationDate":1727168489865,"contentHash":"b6f15605355fc8c421fe42a90f94bf32","sourceName":"lib/forge-std/src/Test.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Base.sol","lib/forge-std/src/StdAssertions.sol","lib/forge-std/src/StdChains.sol","lib/forge-std/src/StdCheats.sol","lib/forge-std/src/StdError.sol","lib/forge-std/src/StdInvariant.sol","lib/forge-std/src/StdJson.sol","lib/forge-std/src/StdMath.sol","lib/forge-std/src/StdStorage.sol","lib/forge-std/src/StdStyle.sol","lib/forge-std/src/StdToml.sol","lib/forge-std/src/StdUtils.sol","lib/forge-std/src/Vm.sol","lib/forge-std/src/console.sol","lib/forge-std/src/console2.sol","lib/forge-std/src/interfaces/IERC165.sol","lib/forge-std/src/interfaces/IERC20.sol","lib/forge-std/src/interfaces/IERC721.sol","lib/forge-std/src/interfaces/IMulticall3.sol","lib/forge-std/src/mocks/MockERC20.sol","lib/forge-std/src/mocks/MockERC721.sol","lib/forge-std/src/safeconsole.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"Test":{"0.8.26":{"path":"Test.sol/Test.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/Vm.sol":{"lastModificationDate":1727168489865,"contentHash":"bd1ebd6d961246e45ffb60d5c3f68f82","sourceName":"lib/forge-std/src/Vm.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"Vm":{"0.8.26":{"path":"Vm.sol/Vm.json","build_id":"06892858f2c156b61a3f778aed90d32a"}},"VmSafe":{"0.8.26":{"path":"Vm.sol/VmSafe.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/console.sol":{"lastModificationDate":1727168489865,"contentHash":"19bc22856c14b56e4e55ab19c7a27c87","sourceName":"lib/forge-std/src/console.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.4.22, <0.9.0","artifacts":{"console":{"0.8.26":{"path":"console.sol/console.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/console2.sol":{"lastModificationDate":1727168489865,"contentHash":"f65ad21034b111e70fb5342d5771efcd","sourceName":"lib/forge-std/src/console2.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/console.sol"],"versionRequirement":">=0.4.22, <0.9.0","artifacts":{},"seenByCompiler":true},"lib/forge-std/src/interfaces/IERC165.sol":{"lastModificationDate":1727168489866,"contentHash":"90fe5e2e3ed432d6f3b408e7c9e8a739","sourceName":"lib/forge-std/src/interfaces/IERC165.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.6.2","artifacts":{"IERC165":{"0.8.26":{"path":"IERC165.sol/IERC165.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/interfaces/IERC20.sol":{"lastModificationDate":1727168489866,"contentHash":"8099161d518e5862a76750349d58e801","sourceName":"lib/forge-std/src/interfaces/IERC20.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.6.2","artifacts":{"IERC20":{"0.8.26":{"path":"IERC20.sol/IERC20.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/interfaces/IERC721.sol":{"lastModificationDate":1727168489866,"contentHash":"efc26e7f9a2f76b68088c8760ceae2dc","sourceName":"lib/forge-std/src/interfaces/IERC721.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/interfaces/IERC165.sol"],"versionRequirement":">=0.6.2","artifacts":{"IERC721":{"0.8.26":{"path":"IERC721.sol/IERC721.json","build_id":"06892858f2c156b61a3f778aed90d32a"}},"IERC721Enumerable":{"0.8.26":{"path":"IERC721.sol/IERC721Enumerable.json","build_id":"06892858f2c156b61a3f778aed90d32a"}},"IERC721Metadata":{"0.8.26":{"path":"IERC721.sol/IERC721Metadata.json","build_id":"06892858f2c156b61a3f778aed90d32a"}},"IERC721TokenReceiver":{"0.8.26":{"path":"IERC721.sol/IERC721TokenReceiver.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/interfaces/IMulticall3.sol":{"lastModificationDate":1727168489866,"contentHash":"7b131ca1ca32ef6378b7b9ad5488b901","sourceName":"lib/forge-std/src/interfaces/IMulticall3.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"IMulticall3":{"0.8.26":{"path":"IMulticall3.sol/IMulticall3.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/mocks/MockERC20.sol":{"lastModificationDate":1727168489866,"contentHash":"8e14d63e81e1d54dbc2d44df38ae9dec","sourceName":"lib/forge-std/src/mocks/MockERC20.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/interfaces/IERC20.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"MockERC20":{"0.8.26":{"path":"MockERC20.sol/MockERC20.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/mocks/MockERC721.sol":{"lastModificationDate":1727168489866,"contentHash":"e91cd9dba7f88f03710c56a347d89d1e","sourceName":"lib/forge-std/src/mocks/MockERC721.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/interfaces/IERC165.sol","lib/forge-std/src/interfaces/IERC721.sol"],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"MockERC721":{"0.8.26":{"path":"MockERC721.sol/MockERC721.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"lib/forge-std/src/safeconsole.sol":{"lastModificationDate":1727168489867,"contentHash":"1445aa2f47000e212173e0cefd6c7a77","sourceName":"lib/forge-std/src/safeconsole.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.6.2, <0.9.0","artifacts":{"safeconsole":{"0.8.26":{"path":"safeconsole.sol/safeconsole.json","build_id":"06892858f2c156b61a3f778aed90d32a"}}},"seenByCompiler":true},"src/AssociatedArrayLib.sol":{"lastModificationDate":1727168518560,"contentHash":"7bb869988fd1d8a337ce404df699980f","sourceName":"src/AssociatedArrayLib.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":"^0.8.20","artifacts":{"AssociatedArrayLib":{"0.8.26":{"path":"AssociatedArrayLib.sol/AssociatedArrayLib.json","build_id":"1f653b004925e7c8555fd0078ae5c06d"}}},"seenByCompiler":true},"src/EnumerableMap4337.sol":{"lastModificationDate":1727168518563,"contentHash":"4cd46438307d082ed47864adfc92536a","sourceName":"src/EnumerableMap4337.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["src/AssociatedArrayLib.sol","src/EnumerableSet4337.sol"],"versionRequirement":"^0.8.20","artifacts":{"EnumerableMap":{"0.8.26":{"path":"EnumerableMap4337.sol/EnumerableMap.json","build_id":"1f653b004925e7c8555fd0078ae5c06d"}}},"seenByCompiler":true},"src/EnumerableSet4337.sol":{"lastModificationDate":1727168518565,"contentHash":"83dbb8ae8d3f02aa0558bca4eb420f5b","sourceName":"src/EnumerableSet4337.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["src/AssociatedArrayLib.sol"],"versionRequirement":"^0.8.20","artifacts":{"EnumerableSet":{"0.8.26":{"path":"EnumerableSet4337.sol/EnumerableSet.json","build_id":"1f653b004925e7c8555fd0078ae5c06d"}}},"seenByCompiler":true},"test/EnumerableMap.t.sol":{"lastModificationDate":1727168555056,"contentHash":"05dbe5c6448aea23df9ff7a020bf1a73","sourceName":"test/EnumerableMap.t.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Base.sol","lib/forge-std/src/StdAssertions.sol","lib/forge-std/src/StdChains.sol","lib/forge-std/src/StdCheats.sol","lib/forge-std/src/StdError.sol","lib/forge-std/src/StdInvariant.sol","lib/forge-std/src/StdJson.sol","lib/forge-std/src/StdMath.sol","lib/forge-std/src/StdStorage.sol","lib/forge-std/src/StdStyle.sol","lib/forge-std/src/StdToml.sol","lib/forge-std/src/StdUtils.sol","lib/forge-std/src/Test.sol","lib/forge-std/src/Vm.sol","lib/forge-std/src/console.sol","lib/forge-std/src/console2.sol","lib/forge-std/src/interfaces/IERC165.sol","lib/forge-std/src/interfaces/IERC20.sol","lib/forge-std/src/interfaces/IERC721.sol","lib/forge-std/src/interfaces/IMulticall3.sol","lib/forge-std/src/mocks/MockERC20.sol","lib/forge-std/src/mocks/MockERC721.sol","lib/forge-std/src/safeconsole.sol","src/AssociatedArrayLib.sol","src/EnumerableMap4337.sol","src/EnumerableSet4337.sol"],"versionRequirement":"^0.8.20","artifacts":{"EnumerableMapTest":{"0.8.26":{"path":"EnumerableMap.t.sol/EnumerableMapTest.json","build_id":"1f653b004925e7c8555fd0078ae5c06d"}}},"seenByCompiler":true},"test/EnumerableSet.t.sol":{"lastModificationDate":1727168560937,"contentHash":"62e9b807bcb84fcf83af528b521cf6ac","sourceName":"test/EnumerableSet.t.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":1000000},"metadata":{"useLiteralContent":false,"bytecodeHash":"none","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/Base.sol","lib/forge-std/src/StdAssertions.sol","lib/forge-std/src/StdChains.sol","lib/forge-std/src/StdCheats.sol","lib/forge-std/src/StdError.sol","lib/forge-std/src/StdInvariant.sol","lib/forge-std/src/StdJson.sol","lib/forge-std/src/StdMath.sol","lib/forge-std/src/StdStorage.sol","lib/forge-std/src/StdStyle.sol","lib/forge-std/src/StdToml.sol","lib/forge-std/src/StdUtils.sol","lib/forge-std/src/Test.sol","lib/forge-std/src/Vm.sol","lib/forge-std/src/console.sol","lib/forge-std/src/console2.sol","lib/forge-std/src/interfaces/IERC165.sol","lib/forge-std/src/interfaces/IERC20.sol","lib/forge-std/src/interfaces/IERC721.sol","lib/forge-std/src/interfaces/IMulticall3.sol","lib/forge-std/src/mocks/MockERC20.sol","lib/forge-std/src/mocks/MockERC721.sol","lib/forge-std/src/safeconsole.sol","src/AssociatedArrayLib.sol","src/EnumerableSet4337.sol"],"versionRequirement":"^0.8.20","artifacts":{"EnumerableSetTest":{"0.8.26":{"path":"EnumerableSet.t.sol/EnumerableSetTest.json","build_id":"1f653b004925e7c8555fd0078ae5c06d"}}},"seenByCompiler":true}},"builds":["06892858f2c156b61a3f778aed90d32a","1f653b004925e7c8555fd0078ae5c06d"]} \ No newline at end of file