diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index 5d13886..b2832dc 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -1 +1 @@ -{"_format":"","paths":{"artifacts":"out","build_infos":"out/build-info","sources":"src","tests":"test","scripts":"script","libraries":["lib"]},"files":{"lib/forge-std/src/Base.sol":{"lastModificationDate":1727956088662,"contentHash":"ee13c050b1914464f1d3f90cde90204b","sourceName":"lib/forge-std/src/Base.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"Base.sol\\CommonBase.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}},"ScriptBase":{"0.8.27":{"path":"Base.sol\\ScriptBase.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}},"TestBase":{"0.8.27":{"path":"Base.sol\\TestBase.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/StdAssertions.sol":{"lastModificationDate":1727956088663,"contentHash":"25b77f9806b64d497b8a46aeb8e5f6f0","sourceName":"lib/forge-std/src/StdAssertions.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"StdAssertions.sol\\StdAssertions.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/StdChains.sol":{"lastModificationDate":1727956088663,"contentHash":"b039727c96bb3d5b9a59448fd16b1e0f","sourceName":"lib/forge-std/src/StdChains.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"StdChains.sol\\StdChains.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/StdCheats.sol":{"lastModificationDate":1727956088663,"contentHash":"96c712134b63f85d00461749d0c1611c","sourceName":"lib/forge-std/src/StdCheats.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"StdCheats.sol\\StdCheats.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}},"StdCheatsSafe":{"0.8.27":{"path":"StdCheats.sol\\StdCheatsSafe.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/StdError.sol":{"lastModificationDate":1727956088664,"contentHash":"64c896e1276a291776e5ea5aecb3870a","sourceName":"lib/forge-std/src/StdError.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"StdError.sol\\stdError.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/StdInvariant.sol":{"lastModificationDate":1727956088664,"contentHash":"f16837d0e7cb829544ae1f1319ea7643","sourceName":"lib/forge-std/src/StdInvariant.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"StdInvariant.sol\\StdInvariant.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/StdJson.sol":{"lastModificationDate":1727956088664,"contentHash":"02209da5708eaee03e24a9c24a687370","sourceName":"lib/forge-std/src/StdJson.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"StdJson.sol\\stdJson.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/StdMath.sol":{"lastModificationDate":1727956088664,"contentHash":"9da8f453eba6bb98f3d75bc6822bfb29","sourceName":"lib/forge-std/src/StdMath.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"StdMath.sol\\stdMath.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/StdStorage.sol":{"lastModificationDate":1727956088665,"contentHash":"ce68f6e336944f16d31351a47d0b19b8","sourceName":"lib/forge-std/src/StdStorage.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"StdStorage.sol\\stdStorage.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}},"stdStorageSafe":{"0.8.27":{"path":"StdStorage.sol\\stdStorageSafe.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/StdStyle.sol":{"lastModificationDate":1727956088665,"contentHash":"6281165a12aa639705c691fccefd855e","sourceName":"lib/forge-std/src/StdStyle.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"StdStyle.sol\\StdStyle.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/StdToml.sol":{"lastModificationDate":1727956088665,"contentHash":"4bce85a4c60f2c073e651ee8140bcb4d","sourceName":"lib/forge-std/src/StdToml.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"StdToml.sol\\stdToml.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/StdUtils.sol":{"lastModificationDate":1727956088666,"contentHash":"b50717f17f251a2a96a5884c90add7bf","sourceName":"lib/forge-std/src/StdUtils.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"StdUtils.sol\\StdUtils.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/Test.sol":{"lastModificationDate":1727956088666,"contentHash":"b6f15605355fc8c421fe42a90f94bf32","sourceName":"lib/forge-std/src/Test.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"Test.sol\\Test.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/Vm.sol":{"lastModificationDate":1727956088667,"contentHash":"5928f469b3646114f329b4129fcf2401","sourceName":"lib/forge-std/src/Vm.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"Vm.sol\\Vm.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}},"VmSafe":{"0.8.27":{"path":"Vm.sol\\VmSafe.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/console.sol":{"lastModificationDate":1727956088667,"contentHash":"ce19a9e49945b42118379ff99d853c05","sourceName":"lib/forge-std/src/console.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"console.sol\\console.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/console2.sol":{"lastModificationDate":1727956088668,"contentHash":"f65ad21034b111e70fb5342d5771efcd","sourceName":"lib/forge-std/src/console2.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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":1727956088668,"contentHash":"90fe5e2e3ed432d6f3b408e7c9e8a739","sourceName":"lib/forge-std/src/interfaces/IERC165.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"interfaces\\IERC165.sol\\IERC165.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/interfaces/IERC20.sol":{"lastModificationDate":1727956088668,"contentHash":"8099161d518e5862a76750349d58e801","sourceName":"lib/forge-std/src/interfaces/IERC20.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"IERC20.sol\\IERC20.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/interfaces/IERC721.sol":{"lastModificationDate":1727956088669,"contentHash":"efc26e7f9a2f76b68088c8760ceae2dc","sourceName":"lib/forge-std/src/interfaces/IERC721.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"IERC721.sol\\IERC721.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}},"IERC721Enumerable":{"0.8.27":{"path":"IERC721.sol\\IERC721Enumerable.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}},"IERC721Metadata":{"0.8.27":{"path":"IERC721.sol\\IERC721Metadata.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}},"IERC721TokenReceiver":{"0.8.27":{"path":"IERC721.sol\\IERC721TokenReceiver.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/interfaces/IMulticall3.sol":{"lastModificationDate":1727956088670,"contentHash":"7b131ca1ca32ef6378b7b9ad5488b901","sourceName":"lib/forge-std/src/interfaces/IMulticall3.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"IMulticall3.sol\\IMulticall3.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/mocks/MockERC20.sol":{"lastModificationDate":1727956088670,"contentHash":"8e14d63e81e1d54dbc2d44df38ae9dec","sourceName":"lib/forge-std/src/mocks/MockERC20.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"MockERC20.sol\\MockERC20.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/mocks/MockERC721.sol":{"lastModificationDate":1727956088670,"contentHash":"e91cd9dba7f88f03710c56a347d89d1e","sourceName":"lib/forge-std/src/mocks/MockERC721.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"MockERC721.sol\\MockERC721.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/safeconsole.sol":{"lastModificationDate":1727956088671,"contentHash":"1445aa2f47000e212173e0cefd6c7a77","sourceName":"lib/forge-std/src/safeconsole.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"safeconsole.sol\\safeconsole.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/light-account/lib/account-abstraction/contracts/core/BaseAccount.sol":{"lastModificationDate":1727956670143,"contentHash":"72f8c2b16f0bd40a373c86ecc12facb3","sourceName":"lib/light-account/lib/account-abstraction/contracts/core/BaseAccount.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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/light-account/lib/account-abstraction/contracts\\core/Helpers.sol","lib/light-account/lib/account-abstraction/contracts/core/UserOperationLib.sol","lib/light-account/lib/account-abstraction/contracts/interfaces/IAccount.sol","lib/light-account/lib/account-abstraction/contracts/interfaces/IAggregator.sol","lib/light-account/lib/account-abstraction/contracts\\interfaces/IEntryPoint.sol","lib/light-account/lib/account-abstraction/contracts/interfaces/INonceManager.sol","lib/light-account/lib/account-abstraction/contracts/interfaces/IStakeManager.sol","lib/light-account/lib/account-abstraction/contracts\\interfaces/PackedUserOperation.sol"],"versionRequirement":"^0.8.23","artifacts":{"BaseAccount":{"0.8.27":{"path":"BaseAccount.sol\\BaseAccount.json","build_id":"18e48785cf879a4c6695b26209e67d9d"}}},"seenByCompiler":true},"lib/light-account/lib/account-abstraction/contracts/core/EntryPoint.sol":{"lastModificationDate":1727956670144,"contentHash":"c4f2ff4a5a94a5813047f515beb7dc88","sourceName":"lib/light-account/lib/account-abstraction/contracts/core/EntryPoint.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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/light-account/lib/account-abstraction/contracts\\core/Helpers.sol","lib/light-account/lib/account-abstraction/contracts/core/NonceManager.sol","lib/light-account/lib/account-abstraction/contracts/core/SenderCreator.sol","lib/light-account/lib/account-abstraction/contracts/core/StakeManager.sol","lib/light-account/lib/account-abstraction/contracts/core/UserOperationLib.sol","lib/light-account/lib/account-abstraction/contracts/interfaces/IAccount.sol","lib/light-account/lib/account-abstraction/contracts/interfaces/IAccountExecute.sol","lib/light-account/lib/account-abstraction/contracts/interfaces/IAggregator.sol","lib/light-account/lib/account-abstraction/contracts\\interfaces/IEntryPoint.sol","lib/light-account/lib/account-abstraction/contracts/interfaces/INonceManager.sol","lib/light-account/lib/account-abstraction/contracts/interfaces/IPaymaster.sol","lib/light-account/lib/account-abstraction/contracts/interfaces/IStakeManager.sol","lib/light-account/lib/account-abstraction/contracts\\interfaces/PackedUserOperation.sol","lib/light-account/lib/account-abstraction/contracts/utils/Exec.sol","lib/light-account/lib/openzeppelin-contracts\\contracts/utils/ReentrancyGuard.sol","lib/light-account/lib/openzeppelin-contracts\\contracts/utils/introspection/ERC165.sol","lib/light-account/lib/openzeppelin-contracts\\contracts/utils/introspection/IERC165.sol"],"versionRequirement":"^0.8.23","artifacts":{"EntryPoint":{"0.8.27":{"path":"EntryPoint.sol\\EntryPoint.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/light-account/lib/account-abstraction/contracts/core/Helpers.sol":{"lastModificationDate":1727956670144,"contentHash":"d9a3c7fc04ae5f3fc8011d8792e8cb18","sourceName":"lib/light-account/lib/account-abstraction/contracts/core/Helpers.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.23","artifacts":{},"seenByCompiler":true},"lib/light-account/lib/account-abstraction/contracts/core/NonceManager.sol":{"lastModificationDate":1727956670144,"contentHash":"a127aeed000517349e4d579991cc1b5d","sourceName":"lib/light-account/lib/account-abstraction/contracts/core/NonceManager.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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/light-account/lib/account-abstraction/contracts/interfaces/INonceManager.sol"],"versionRequirement":"^0.8.23","artifacts":{"NonceManager":{"0.8.27":{"path":"NonceManager.sol\\NonceManager.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/light-account/lib/account-abstraction/contracts/core/SenderCreator.sol":{"lastModificationDate":1727956670145,"contentHash":"c4cda983dfb4422cd413360a23ed244a","sourceName":"lib/light-account/lib/account-abstraction/contracts/core/SenderCreator.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.23","artifacts":{"SenderCreator":{"0.8.27":{"path":"SenderCreator.sol\\SenderCreator.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/light-account/lib/account-abstraction/contracts/core/StakeManager.sol":{"lastModificationDate":1727956670145,"contentHash":"9857ed1921becf91ccf93ca0de9db0b5","sourceName":"lib/light-account/lib/account-abstraction/contracts/core/StakeManager.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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/light-account/lib/account-abstraction/contracts/interfaces/IStakeManager.sol"],"versionRequirement":"^0.8.23","artifacts":{"StakeManager":{"0.8.27":{"path":"StakeManager.sol\\StakeManager.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/light-account/lib/account-abstraction/contracts/core/UserOperationLib.sol":{"lastModificationDate":1727956670145,"contentHash":"49e8ce45c96e09cb83ff7d1d2e72e448","sourceName":"lib/light-account/lib/account-abstraction/contracts/core/UserOperationLib.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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/light-account/lib/account-abstraction/contracts\\core/Helpers.sol","lib/light-account/lib/account-abstraction/contracts\\interfaces/PackedUserOperation.sol"],"versionRequirement":"^0.8.23","artifacts":{"UserOperationLib":{"0.8.27":{"path":"UserOperationLib.sol\\UserOperationLib.json","build_id":"18e48785cf879a4c6695b26209e67d9d"}}},"seenByCompiler":true},"lib/light-account/lib/account-abstraction/contracts/interfaces/IAccount.sol":{"lastModificationDate":1727956670146,"contentHash":"1f8a384da0da6354fdd834d63b24dfd4","sourceName":"lib/light-account/lib/account-abstraction/contracts/interfaces/IAccount.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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/light-account/lib/account-abstraction/contracts\\interfaces/PackedUserOperation.sol"],"versionRequirement":">=0.7.5","artifacts":{"IAccount":{"0.8.27":{"path":"IAccount.sol\\IAccount.json","build_id":"18e48785cf879a4c6695b26209e67d9d"}}},"seenByCompiler":true},"lib/light-account/lib/account-abstraction/contracts/interfaces/IAccountExecute.sol":{"lastModificationDate":1727956670146,"contentHash":"29ded9a414cc72b0b85e3edaa357c9d8","sourceName":"lib/light-account/lib/account-abstraction/contracts/interfaces/IAccountExecute.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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/light-account/lib/account-abstraction/contracts\\interfaces/PackedUserOperation.sol"],"versionRequirement":">=0.7.5","artifacts":{"IAccountExecute":{"0.8.27":{"path":"IAccountExecute.sol\\IAccountExecute.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/light-account/lib/account-abstraction/contracts/interfaces/IAggregator.sol":{"lastModificationDate":1727956670146,"contentHash":"ea70aa8db36795540523cebf73f66469","sourceName":"lib/light-account/lib/account-abstraction/contracts/interfaces/IAggregator.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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/light-account/lib/account-abstraction/contracts\\interfaces/PackedUserOperation.sol"],"versionRequirement":">=0.7.5","artifacts":{"IAggregator":{"0.8.27":{"path":"IAggregator.sol\\IAggregator.json","build_id":"18e48785cf879a4c6695b26209e67d9d"}}},"seenByCompiler":true},"lib/light-account/lib/account-abstraction/contracts/interfaces/IEntryPoint.sol":{"lastModificationDate":1727956670147,"contentHash":"d201c25e2806de5038e53c646f93810c","sourceName":"lib/light-account/lib/account-abstraction/contracts/interfaces/IEntryPoint.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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/light-account/lib/account-abstraction/contracts/interfaces/IAggregator.sol","lib/light-account/lib/account-abstraction/contracts/interfaces/INonceManager.sol","lib/light-account/lib/account-abstraction/contracts/interfaces/IStakeManager.sol","lib/light-account/lib/account-abstraction/contracts\\interfaces/PackedUserOperation.sol"],"versionRequirement":">=0.7.5","artifacts":{"IEntryPoint":{"0.8.27":{"path":"IEntryPoint.sol\\IEntryPoint.json","build_id":"18e48785cf879a4c6695b26209e67d9d"}}},"seenByCompiler":true},"lib/light-account/lib/account-abstraction/contracts/interfaces/INonceManager.sol":{"lastModificationDate":1727962747847,"contentHash":"2865a605d4aece6b0d511f573003d167","sourceName":"lib/light-account/lib/account-abstraction/contracts/interfaces/INonceManager.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.7.5","artifacts":{"INonceManager":{"0.8.27":{"path":"INonceManager.sol\\INonceManager.json","build_id":"18e48785cf879a4c6695b26209e67d9d"}}},"seenByCompiler":true},"lib/light-account/lib/account-abstraction/contracts/interfaces/IPaymaster.sol":{"lastModificationDate":1727956670148,"contentHash":"0edfe2232b7eb455a17ebaacd0d09243","sourceName":"lib/light-account/lib/account-abstraction/contracts/interfaces/IPaymaster.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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/light-account/lib/account-abstraction/contracts\\interfaces/PackedUserOperation.sol"],"versionRequirement":">=0.7.5","artifacts":{"IPaymaster":{"0.8.27":{"path":"IPaymaster.sol\\IPaymaster.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/light-account/lib/account-abstraction/contracts/interfaces/IStakeManager.sol":{"lastModificationDate":1727956670148,"contentHash":"8a37b39cb2b2d53efcd76e8d6af616ff","sourceName":"lib/light-account/lib/account-abstraction/contracts/interfaces/IStakeManager.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.7.5","artifacts":{"IStakeManager":{"0.8.27":{"path":"IStakeManager.sol\\IStakeManager.json","build_id":"18e48785cf879a4c6695b26209e67d9d"}}},"seenByCompiler":true},"lib/light-account/lib/account-abstraction/contracts/interfaces/PackedUserOperation.sol":{"lastModificationDate":1727958836937,"contentHash":"6cdfe05be923cdc6051633ff1614e956","sourceName":"lib/light-account/lib/account-abstraction/contracts/interfaces/PackedUserOperation.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.7.5","artifacts":{},"seenByCompiler":true},"lib/light-account/lib/account-abstraction/contracts/samples/callback/TokenCallbackHandler.sol":{"lastModificationDate":1727956670155,"contentHash":"7c2d395a28e99da6bca5756ead9bbf8e","sourceName":"lib/light-account/lib/account-abstraction/contracts/samples/callback/TokenCallbackHandler.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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/light-account/lib/openzeppelin-contracts\\contracts/token/ERC1155/IERC1155Receiver.sol","lib/light-account/lib/openzeppelin-contracts\\contracts/token/ERC721/IERC721Receiver.sol","lib/light-account/lib/openzeppelin-contracts\\contracts/utils/introspection/IERC165.sol"],"versionRequirement":"^0.8.23","artifacts":{"TokenCallbackHandler":{"0.8.27":{"path":"TokenCallbackHandler.sol\\TokenCallbackHandler.json","build_id":"18e48785cf879a4c6695b26209e67d9d"}}},"seenByCompiler":true},"lib/light-account/lib/account-abstraction/contracts/utils/Exec.sol":{"lastModificationDate":1727956670162,"contentHash":"8156fbf5a7fe2e169f75483db6787860","sourceName":"lib/light-account/lib/account-abstraction/contracts/utils/Exec.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.23","artifacts":{"Exec":{"0.8.27":{"path":"Exec.sol\\Exec.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/light-account/lib/openzeppelin-contracts/contracts/interfaces/IERC1271.sol":{"lastModificationDate":1727956726452,"contentHash":"12a8c0358597a0dc191410b1259e61ee","sourceName":"lib/light-account/lib/openzeppelin-contracts/contracts/interfaces/IERC1271.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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":{"IERC1271":{"0.8.27":{"path":"IERC1271.sol\\IERC1271.json","build_id":"18e48785cf879a4c6695b26209e67d9d"}}},"seenByCompiler":true},"lib/light-account/lib/openzeppelin-contracts/contracts/token/ERC1155/IERC1155Receiver.sol":{"lastModificationDate":1727956726506,"contentHash":"d14616defa6d417fafa47e416e3cec73","sourceName":"lib/light-account/lib/openzeppelin-contracts/contracts/token/ERC1155/IERC1155Receiver.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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/light-account/lib/openzeppelin-contracts\\contracts/utils/introspection/IERC165.sol"],"versionRequirement":"^0.8.20","artifacts":{"IERC1155Receiver":{"0.8.27":{"path":"IERC1155Receiver.sol\\IERC1155Receiver.json","build_id":"18e48785cf879a4c6695b26209e67d9d"}}},"seenByCompiler":true},"lib/light-account/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol":{"lastModificationDate":1727956726517,"contentHash":"fc8a9841f4bdd6329c26a00d5e75f4b3","sourceName":"lib/light-account/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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":{"IERC721Receiver":{"0.8.27":{"path":"IERC721Receiver.sol\\IERC721Receiver.json","build_id":"18e48785cf879a4c6695b26209e67d9d"}}},"seenByCompiler":true},"lib/light-account/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol":{"lastModificationDate":1727956726528,"contentHash":"a92331adac11b453a4de0323fc948119","sourceName":"lib/light-account/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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":{"ReentrancyGuard":{"0.8.27":{"path":"ReentrancyGuard.sol\\ReentrancyGuard.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/light-account/lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"lastModificationDate":1727956726529,"contentHash":"ba57ff4ddf1d9cae9d2009792795b7f6","sourceName":"lib/light-account/lib/openzeppelin-contracts/contracts/utils/Strings.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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/light-account/lib/openzeppelin-contracts/contracts/utils/math/Math.sol","lib/light-account/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol"],"versionRequirement":"^0.8.20","artifacts":{"Strings":{"0.8.27":{"path":"Strings.sol\\Strings.json","build_id":"18e48785cf879a4c6695b26209e67d9d"}}},"seenByCompiler":true},"lib/light-account/lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"lastModificationDate":1727956726530,"contentHash":"b96e0d7a3c2b185342c7d083d765b61f","sourceName":"lib/light-account/lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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":{"ECDSA":{"0.8.27":{"path":"ECDSA.sol\\ECDSA.json","build_id":"18e48785cf879a4c6695b26209e67d9d"}}},"seenByCompiler":true},"lib/light-account/lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"lastModificationDate":1727956726531,"contentHash":"9e5eec59eaffa554d6cca561dcb914eb","sourceName":"lib/light-account/lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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/light-account/lib/openzeppelin-contracts/contracts/utils/Strings.sol","lib/light-account/lib/openzeppelin-contracts/contracts/utils/math/Math.sol","lib/light-account/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol"],"versionRequirement":"^0.8.20","artifacts":{"MessageHashUtils":{"0.8.27":{"path":"MessageHashUtils.sol\\MessageHashUtils.json","build_id":"18e48785cf879a4c6695b26209e67d9d"}}},"seenByCompiler":true},"lib/light-account/lib/openzeppelin-contracts/contracts/utils/cryptography/SignatureChecker.sol":{"lastModificationDate":1727956726531,"contentHash":"67e1b232791e1ea1cf6475bd4aaed191","sourceName":"lib/light-account/lib/openzeppelin-contracts/contracts/utils/cryptography/SignatureChecker.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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/light-account/lib/openzeppelin-contracts/contracts/interfaces/IERC1271.sol","lib/light-account/lib/openzeppelin-contracts\\contracts/utils/cryptography/ECDSA.sol"],"versionRequirement":"^0.8.20","artifacts":{"SignatureChecker":{"0.8.27":{"path":"SignatureChecker.sol\\SignatureChecker.json","build_id":"18e48785cf879a4c6695b26209e67d9d"}}},"seenByCompiler":true},"lib/light-account/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol":{"lastModificationDate":1727956726532,"contentHash":"6a55c353946e471d9792965d06208295","sourceName":"lib/light-account/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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/light-account/lib/openzeppelin-contracts\\contracts/utils/introspection/IERC165.sol"],"versionRequirement":"^0.8.20","artifacts":{"ERC165":{"0.8.27":{"path":"ERC165.sol\\ERC165.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/light-account/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"lastModificationDate":1727956726533,"contentHash":"de0163561b417b800d01749cbbe2147e","sourceName":"lib/light-account/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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":{"IERC165":{"0.8.27":{"path":"IERC165.sol\\IERC165.json","build_id":"18e48785cf879a4c6695b26209e67d9d"}}},"seenByCompiler":true},"lib/light-account/lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"lastModificationDate":1727956726534,"contentHash":"718fa8ba0ff269c92e364c1429d9de57","sourceName":"lib/light-account/lib/openzeppelin-contracts/contracts/utils/math/Math.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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":{"Math":{"0.8.27":{"path":"Math.sol\\Math.json","build_id":"18e48785cf879a4c6695b26209e67d9d"}}},"seenByCompiler":true},"lib/light-account/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"lastModificationDate":1727956726535,"contentHash":"b6c6bdc7aaca4fe5b680760a72e09d3e","sourceName":"lib/light-account/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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":{"SignedMath":{"0.8.27":{"path":"SignedMath.sol\\SignedMath.json","build_id":"18e48785cf879a4c6695b26209e67d9d"}}},"seenByCompiler":true},"lib/light-account/src/common/BaseLightAccount.sol":{"lastModificationDate":1727956616525,"contentHash":"10430e8b579896a36ad3e72786325afa","sourceName":"lib/light-account/src/common/BaseLightAccount.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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/light-account/lib/account-abstraction/contracts\\core/BaseAccount.sol","lib/light-account/lib/account-abstraction/contracts\\core/Helpers.sol","lib/light-account/lib/account-abstraction/contracts/core/UserOperationLib.sol","lib/light-account/lib/account-abstraction/contracts/interfaces/IAccount.sol","lib/light-account/lib/account-abstraction/contracts/interfaces/IAggregator.sol","lib/light-account/lib/account-abstraction/contracts\\interfaces/IEntryPoint.sol","lib/light-account/lib/account-abstraction/contracts/interfaces/INonceManager.sol","lib/light-account/lib/account-abstraction/contracts/interfaces/IStakeManager.sol","lib/light-account/lib/account-abstraction/contracts\\interfaces/PackedUserOperation.sol","lib/light-account/lib/account-abstraction/contracts\\samples/callback/TokenCallbackHandler.sol","lib/light-account/lib/openzeppelin-contracts\\contracts/token/ERC1155/IERC1155Receiver.sol","lib/light-account/lib/openzeppelin-contracts\\contracts/token/ERC721/IERC721Receiver.sol","lib/light-account/lib/openzeppelin-contracts\\contracts/utils/introspection/IERC165.sol","lib/light-account/src/common/ERC1271.sol","lib/light-account/src/external/solady/EIP712.sol","lib/light-account/src/external/solady/UUPSUpgradeable.sol"],"versionRequirement":"^0.8.23","artifacts":{"BaseLightAccount":{"0.8.27":{"path":"BaseLightAccount.sol\\BaseLightAccount.json","build_id":"18e48785cf879a4c6695b26209e67d9d"}}},"seenByCompiler":true},"lib/light-account/src/common/CustomSlotInitializable.sol":{"lastModificationDate":1727956616526,"contentHash":"8859a8695544b7172e42909247381af8","sourceName":"lib/light-account/src/common/CustomSlotInitializable.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.23","artifacts":{"CustomSlotInitializable":{"0.8.27":{"path":"CustomSlotInitializable.sol\\CustomSlotInitializable.json","build_id":"18e48785cf879a4c6695b26209e67d9d"}}},"seenByCompiler":true},"lib/light-account/src/common/ERC1271.sol":{"lastModificationDate":1727956616526,"contentHash":"828b969da0a7b81f890268426cb00aae","sourceName":"lib/light-account/src/common/ERC1271.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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/light-account/src/external/solady/EIP712.sol"],"versionRequirement":"^0.8.23","artifacts":{"ERC1271":{"0.8.27":{"path":"ERC1271.sol\\ERC1271.json","build_id":"18e48785cf879a4c6695b26209e67d9d"}}},"seenByCompiler":true},"lib/light-account/src/external/solady/EIP712.sol":{"lastModificationDate":1727956616527,"contentHash":"ee0cad211cd123b2053980c48786b9c6","sourceName":"lib/light-account/src/external/solady/EIP712.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.4","artifacts":{"EIP712":{"0.8.27":{"path":"EIP712.sol\\EIP712.json","build_id":"18e48785cf879a4c6695b26209e67d9d"}}},"seenByCompiler":true},"lib/light-account/src/external/solady/UUPSUpgradeable.sol":{"lastModificationDate":1727956616527,"contentHash":"6b4de3aa02b577c654ec91ca7520798b","sourceName":"lib/light-account/src/external/solady/UUPSUpgradeable.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.4","artifacts":{"UUPSUpgradeable":{"0.8.27":{"path":"UUPSUpgradeable.sol\\UUPSUpgradeable.json","build_id":"18e48785cf879a4c6695b26209e67d9d"}}},"seenByCompiler":true},"src/BLSLightAccount.sol":{"lastModificationDate":1728047370206,"contentHash":"00709b8b8a3d5619bdc46b330bf40ff2","sourceName":"src/BLSLightAccount.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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/light-account/lib/account-abstraction/contracts/interfaces/IAggregator.sol","lib/light-account/lib/account-abstraction/contracts\\interfaces/IEntryPoint.sol","lib/light-account/lib/account-abstraction/contracts/interfaces/INonceManager.sol","lib/light-account/lib/account-abstraction/contracts/interfaces/IStakeManager.sol","lib/light-account/lib/account-abstraction/contracts\\interfaces/PackedUserOperation.sol","src\\BLSOpen.sol","src\\hubble-contracts\\libs\\BLS.sol","src\\hubble-contracts\\libs\\BNPairingPrecompileCostEstimator.sol","src\\hubble-contracts\\libs\\ModExp.sol"],"versionRequirement":"^0.8.23","artifacts":{"BLSLightAccount":{"0.8.27":{"path":"BLSLightAccount.sol\\BLSLightAccount.json","build_id":"a75775704bc14aa049cccdf407ca2f76"}}},"seenByCompiler":true},"src/BLSOpen.sol":{"lastModificationDate":1728039372237,"contentHash":"62d2dbcff8f8bd4eca929460068ec35f","sourceName":"src/BLSOpen.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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\\hubble-contracts\\libs\\BLS.sol","src\\hubble-contracts\\libs\\BNPairingPrecompileCostEstimator.sol","src\\hubble-contracts\\libs\\ModExp.sol"],"versionRequirement":"^0.8.23","artifacts":{"BLSOpen":{"0.8.27":{"path":"BLSOpen.sol\\BLSOpen.json","build_id":"8ce20ca9851474206e20b9e8bc2dfa08"}}},"seenByCompiler":true},"src/hubble-contracts/libs/BLS.sol":{"lastModificationDate":1727956670154,"contentHash":"d92df49e4184b24da17413ab9ea31e4b","sourceName":"src/hubble-contracts/libs/BLS.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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\\hubble-contracts\\libs\\BNPairingPrecompileCostEstimator.sol","src\\hubble-contracts\\libs\\ModExp.sol"],"versionRequirement":null,"artifacts":{"BLS":{"0.8.27":{"path":"BLS.sol\\BLS.json","build_id":"8ce20ca9851474206e20b9e8bc2dfa08"}}},"seenByCompiler":true},"src/hubble-contracts/libs/BNPairingPrecompileCostEstimator.sol":{"lastModificationDate":1727956670154,"contentHash":"1e935d3450d1069c5b923f0dee20925e","sourceName":"src/hubble-contracts/libs/BNPairingPrecompileCostEstimator.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.12","artifacts":{"BNPairingPrecompileCostEstimator":{"0.8.27":{"path":"BNPairingPrecompileCostEstimator.sol\\BNPairingPrecompileCostEstimator.json","build_id":"8ce20ca9851474206e20b9e8bc2dfa08"}}},"seenByCompiler":true},"src/hubble-contracts/libs/ModExp.sol":{"lastModificationDate":1727956670154,"contentHash":"752f7f550d91a76ef82dc3b49654d6ce","sourceName":"src/hubble-contracts/libs/ModExp.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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":null,"artifacts":{"ModexpInverse":{"0.8.27":{"path":"ModExp.sol\\ModexpInverse.json","build_id":"8ce20ca9851474206e20b9e8bc2dfa08"}},"ModexpSqrt":{"0.8.27":{"path":"ModExp.sol\\ModexpSqrt.json","build_id":"8ce20ca9851474206e20b9e8bc2dfa08"}}},"seenByCompiler":true}},"builds":["18e48785cf879a4c6695b26209e67d9d","5860657d27e709293a6b4f4ff36a6b10","8ce20ca9851474206e20b9e8bc2dfa08","a75775704bc14aa049cccdf407ca2f76"]} \ No newline at end of file +{"_format":"","paths":{"artifacts":"out","build_infos":"out/build-info","sources":"src","tests":"test","scripts":"script","libraries":["lib"]},"files":{"lib/BLSOpen.sol":{"lastModificationDate":1728049167474,"contentHash":"13f41cc836a55a849538da9e9df90e27","sourceName":"lib/BLSOpen.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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/hubble-contracts/libs/BLS.sol","lib/hubble-contracts/libs/BNPairingPrecompileCostEstimator.sol","lib/hubble-contracts/libs/ModExp.sol"],"versionRequirement":"^0.8.23","artifacts":{"BLSOpen":{"0.8.27":{"path":"BLSOpen.sol\\BLSOpen.json","build_id":"51ed6abc221cfaae075c17ce791cb420"}}},"seenByCompiler":true},"lib/forge-std/src/Base.sol":{"lastModificationDate":1727956088662,"contentHash":"ee13c050b1914464f1d3f90cde90204b","sourceName":"lib/forge-std/src/Base.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"Base.sol\\CommonBase.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}},"ScriptBase":{"0.8.27":{"path":"Base.sol\\ScriptBase.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}},"TestBase":{"0.8.27":{"path":"Base.sol\\TestBase.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/StdAssertions.sol":{"lastModificationDate":1727956088663,"contentHash":"25b77f9806b64d497b8a46aeb8e5f6f0","sourceName":"lib/forge-std/src/StdAssertions.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"StdAssertions.sol\\StdAssertions.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/StdChains.sol":{"lastModificationDate":1727956088663,"contentHash":"b039727c96bb3d5b9a59448fd16b1e0f","sourceName":"lib/forge-std/src/StdChains.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"StdChains.sol\\StdChains.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/StdCheats.sol":{"lastModificationDate":1727956088663,"contentHash":"96c712134b63f85d00461749d0c1611c","sourceName":"lib/forge-std/src/StdCheats.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"StdCheats.sol\\StdCheats.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}},"StdCheatsSafe":{"0.8.27":{"path":"StdCheats.sol\\StdCheatsSafe.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/StdError.sol":{"lastModificationDate":1727956088664,"contentHash":"64c896e1276a291776e5ea5aecb3870a","sourceName":"lib/forge-std/src/StdError.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"StdError.sol\\stdError.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/StdInvariant.sol":{"lastModificationDate":1727956088664,"contentHash":"f16837d0e7cb829544ae1f1319ea7643","sourceName":"lib/forge-std/src/StdInvariant.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"StdInvariant.sol\\StdInvariant.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/StdJson.sol":{"lastModificationDate":1727956088664,"contentHash":"02209da5708eaee03e24a9c24a687370","sourceName":"lib/forge-std/src/StdJson.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"StdJson.sol\\stdJson.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/StdMath.sol":{"lastModificationDate":1727956088664,"contentHash":"9da8f453eba6bb98f3d75bc6822bfb29","sourceName":"lib/forge-std/src/StdMath.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"StdMath.sol\\stdMath.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/StdStorage.sol":{"lastModificationDate":1727956088665,"contentHash":"ce68f6e336944f16d31351a47d0b19b8","sourceName":"lib/forge-std/src/StdStorage.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"StdStorage.sol\\stdStorage.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}},"stdStorageSafe":{"0.8.27":{"path":"StdStorage.sol\\stdStorageSafe.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/StdStyle.sol":{"lastModificationDate":1727956088665,"contentHash":"6281165a12aa639705c691fccefd855e","sourceName":"lib/forge-std/src/StdStyle.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"StdStyle.sol\\StdStyle.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/StdToml.sol":{"lastModificationDate":1727956088665,"contentHash":"4bce85a4c60f2c073e651ee8140bcb4d","sourceName":"lib/forge-std/src/StdToml.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"StdToml.sol\\stdToml.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/StdUtils.sol":{"lastModificationDate":1727956088666,"contentHash":"b50717f17f251a2a96a5884c90add7bf","sourceName":"lib/forge-std/src/StdUtils.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"StdUtils.sol\\StdUtils.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/Test.sol":{"lastModificationDate":1727956088666,"contentHash":"b6f15605355fc8c421fe42a90f94bf32","sourceName":"lib/forge-std/src/Test.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"Test.sol\\Test.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/Vm.sol":{"lastModificationDate":1727956088667,"contentHash":"5928f469b3646114f329b4129fcf2401","sourceName":"lib/forge-std/src/Vm.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"Vm.sol\\Vm.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}},"VmSafe":{"0.8.27":{"path":"Vm.sol\\VmSafe.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/console.sol":{"lastModificationDate":1727956088667,"contentHash":"ce19a9e49945b42118379ff99d853c05","sourceName":"lib/forge-std/src/console.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"console.sol\\console.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/console2.sol":{"lastModificationDate":1727956088668,"contentHash":"f65ad21034b111e70fb5342d5771efcd","sourceName":"lib/forge-std/src/console2.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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":1727956088668,"contentHash":"90fe5e2e3ed432d6f3b408e7c9e8a739","sourceName":"lib/forge-std/src/interfaces/IERC165.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"interfaces\\IERC165.sol\\IERC165.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/interfaces/IERC20.sol":{"lastModificationDate":1727956088668,"contentHash":"8099161d518e5862a76750349d58e801","sourceName":"lib/forge-std/src/interfaces/IERC20.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"IERC20.sol\\IERC20.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/interfaces/IERC721.sol":{"lastModificationDate":1727956088669,"contentHash":"efc26e7f9a2f76b68088c8760ceae2dc","sourceName":"lib/forge-std/src/interfaces/IERC721.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"IERC721.sol\\IERC721.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}},"IERC721Enumerable":{"0.8.27":{"path":"IERC721.sol\\IERC721Enumerable.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}},"IERC721Metadata":{"0.8.27":{"path":"IERC721.sol\\IERC721Metadata.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}},"IERC721TokenReceiver":{"0.8.27":{"path":"IERC721.sol\\IERC721TokenReceiver.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/interfaces/IMulticall3.sol":{"lastModificationDate":1727956088670,"contentHash":"7b131ca1ca32ef6378b7b9ad5488b901","sourceName":"lib/forge-std/src/interfaces/IMulticall3.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"IMulticall3.sol\\IMulticall3.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/mocks/MockERC20.sol":{"lastModificationDate":1727956088670,"contentHash":"8e14d63e81e1d54dbc2d44df38ae9dec","sourceName":"lib/forge-std/src/mocks/MockERC20.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"MockERC20.sol\\MockERC20.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/mocks/MockERC721.sol":{"lastModificationDate":1727956088670,"contentHash":"e91cd9dba7f88f03710c56a347d89d1e","sourceName":"lib/forge-std/src/mocks/MockERC721.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"MockERC721.sol\\MockERC721.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/forge-std/src/safeconsole.sol":{"lastModificationDate":1727956088671,"contentHash":"1445aa2f47000e212173e0cefd6c7a77","sourceName":"lib/forge-std/src/safeconsole.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.27":{"path":"safeconsole.sol\\safeconsole.json","build_id":"5860657d27e709293a6b4f4ff36a6b10"}}},"seenByCompiler":true},"lib/hubble-contracts/libs/BLS.sol":{"lastModificationDate":1728049167482,"contentHash":"84eb66951893933bba4ac3536bc072bd","sourceName":"lib/hubble-contracts/libs/BLS.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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/hubble-contracts/libs/BNPairingPrecompileCostEstimator.sol","lib/hubble-contracts/libs/ModExp.sol"],"versionRequirement":"^0.8.23","artifacts":{"BLS":{"0.8.27":{"path":"BLS.sol\\BLS.json","build_id":"51ed6abc221cfaae075c17ce791cb420"}}},"seenByCompiler":true},"lib/hubble-contracts/libs/BNPairingPrecompileCostEstimator.sol":{"lastModificationDate":1728049167474,"contentHash":"f4a7c31aeb21418fb2970e3091e44987","sourceName":"lib/hubble-contracts/libs/BNPairingPrecompileCostEstimator.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.23","artifacts":{"BNPairingPrecompileCostEstimator":{"0.8.27":{"path":"BNPairingPrecompileCostEstimator.sol\\BNPairingPrecompileCostEstimator.json","build_id":"51ed6abc221cfaae075c17ce791cb420"}}},"seenByCompiler":true},"lib/hubble-contracts/libs/ModExp.sol":{"lastModificationDate":1728049167489,"contentHash":"3eea1465e569feae064b9ac8ad0632a2","sourceName":"lib/hubble-contracts/libs/ModExp.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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.23","artifacts":{"ModexpInverse":{"0.8.27":{"path":"ModExp.sol\\ModexpInverse.json","build_id":"51ed6abc221cfaae075c17ce791cb420"}},"ModexpSqrt":{"0.8.27":{"path":"ModExp.sol\\ModexpSqrt.json","build_id":"51ed6abc221cfaae075c17ce791cb420"}}},"seenByCompiler":true},"src/BLSLightAccount.sol":{"lastModificationDate":1728049598185,"contentHash":"fb26e58a9ca6dac3b175abf1b6797495","sourceName":"src/BLSLightAccount.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","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/BLSOpen.sol","lib/hubble-contracts/libs/BLS.sol","lib/hubble-contracts/libs/BNPairingPrecompileCostEstimator.sol","lib/hubble-contracts/libs/ModExp.sol"],"versionRequirement":"^0.8.23","artifacts":{"BLSLightAccount":{"0.8.27":{"path":"BLSLightAccount.sol\\BLSLightAccount.json","build_id":"51ed6abc221cfaae075c17ce791cb420"}}},"seenByCompiler":true}},"builds":["51ed6abc221cfaae075c17ce791cb420","5860657d27e709293a6b4f4ff36a6b10"]} \ No newline at end of file diff --git a/lib/BLSOpen.sol b/lib/BLSOpen.sol new file mode 100644 index 0000000..5c64222 --- /dev/null +++ b/lib/BLSOpen.sol @@ -0,0 +1,49 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.23; + +import {BLS} from "./hubble-contracts/libs/BLS.sol"; + +library BLSOpen { + function verifySingle(uint256[2] memory signature, uint256[4] memory pubkey, uint256[2] memory message) + external + view + returns (bool) + { + uint256[4][] memory pubkeys = new uint256[4][](1); + uint256[2][] memory messages = new uint256[2][](1); + pubkeys[0] = pubkey; + messages[0] = message; + + (bool verified, bool callSuccess) = BLS.verifyMultiple(signature, pubkeys, messages); + return callSuccess && verified; + + // // NB: (result, success) opposite of `call` convention (success, result). + // (bool verified, bool callSuccess) = BLS.verifySingle( + // signature, + // pubkey, + // message + // ); + // return callSuccess && verified; + } + + function verifyMultiple(uint256[2] memory signature, uint256[4][] memory pubkeys, uint256[2][] memory messages) + external + view + returns (bool) + { + (bool verified, bool callSuccess) = BLS.verifyMultiple(signature, pubkeys, messages); + return callSuccess && verified; + } + + function hashToPoint(bytes32 domain, bytes memory message) external view returns (uint256[2] memory) { + return BLS.hashToPoint(domain, message); + } + + function isZeroBLSKey(uint256[4] memory blsKey) public pure returns (bool) { + bool isZero = true; + for (uint256 i = 0; isZero && i < 4; i++) { + isZero = (blsKey[i] == 0); + } + return isZero; + } +} diff --git a/src/hubble-contracts/libs/BLS.sol b/lib/hubble-contracts/libs/BLS.sol similarity index 73% rename from src/hubble-contracts/libs/BLS.sol rename to lib/hubble-contracts/libs/BLS.sol index e02bc10..eae85dd 100644 --- a/src/hubble-contracts/libs/BLS.sol +++ b/lib/hubble-contracts/libs/BLS.sol @@ -1,15 +1,13 @@ // SPDX-License-Identifier: MIT -pragma solidity >= 0.6.12; +pragma solidity ^0.8.23; -import { ModexpInverse, ModexpSqrt } from "./ModExp.sol"; -import { - BNPairingPrecompileCostEstimator -} from "./BNPairingPrecompileCostEstimator.sol"; +import {ModexpInverse, ModexpSqrt} from "./ModExp.sol"; +import {BNPairingPrecompileCostEstimator} from "./BNPairingPrecompileCostEstimator.sol"; /** - @title Boneh–Lynn–Shacham (BLS) signature scheme on Barreto-Naehrig 254 bit curve (BN-254) - @notice We use BLS signature aggregation to reduce the size of signature data to store on chain. - @dev We use G1 points for signatures and messages, and G2 points for public keys + * @title Boneh–Lynn–Shacham (BLS) signature scheme on Barreto-Naehrig 254 bit curve (BN-254) + * @notice We use BLS signature aggregation to reduce the size of signature data to store on chain. + * @dev We use G1 points for signatures and messages, and G2 points for public keys */ library BLS { // Field order @@ -39,44 +37,36 @@ library BLS { uint256 private constant MASK24 = 0xffffffffffffffffffffffffffffffffffffffffffffffff; // estimator address -// address private constant COST_ESTIMATOR_ADDRESS = new 0x22E4a5251C1F02de8369Dd6f192033F6CB7531A4; - - function verifySingle( - uint256[2] memory signature, - uint256[4] memory pubkey, - uint256[2] memory message - ) internal view returns (bool, bool) { - uint256[12] memory input = - [ - signature[0], - signature[1], - N_G2_X1, - N_G2_X0, - N_G2_Y1, - N_G2_Y0, - message[0], - message[1], - pubkey[1], - pubkey[0], - pubkey[3], - pubkey[2] - ]; + // address private constant COST_ESTIMATOR_ADDRESS = new 0x22E4a5251C1F02de8369Dd6f192033F6CB7531A4; + + function verifySingle(uint256[2] memory signature, uint256[4] memory pubkey, uint256[2] memory message) + internal + view + returns (bool, bool) + { + uint256[12] memory input = [ + signature[0], + signature[1], + N_G2_X1, + N_G2_X0, + N_G2_Y1, + N_G2_Y0, + message[0], + message[1], + pubkey[1], + pubkey[0], + pubkey[3], + pubkey[2] + ]; uint256[1] memory out; uint256 precompileGasCost = gasleft(); -// BNPairingPrecompileCostEstimator(COST_ESTIMATOR_ADDRESS).getGasCost( -// 2 -// ); + // BNPairingPrecompileCostEstimator(COST_ESTIMATOR_ADDRESS).getGasCost( + // 2 + // ); bool callSuccess; // solium-disable-next-line security/no-inline-assembly assembly { - callSuccess := staticcall( - precompileGasCost, - 8, - input, - 384, - out, - 0x20 - ) + callSuccess := staticcall(precompileGasCost, 8, input, 384, out, 0x20) } if (!callSuccess) { return (false, false); @@ -84,17 +74,14 @@ library BLS { return (out[0] != 0, true); } - function verifyMultiple( - uint256[2] memory signature, - uint256[4][] memory pubkeys, - uint256[2][] memory messages - ) internal view returns (bool checkResult, bool callSuccess) { + function verifyMultiple(uint256[2] memory signature, uint256[4][] memory pubkeys, uint256[2][] memory messages) + internal + view + returns (bool checkResult, bool callSuccess) + { uint256 size = pubkeys.length; require(size > 0, "BLS: number of public key is zero"); - require( - size == messages.length, - "BLS: number of public keys and messages must be equal" - ); + require(size == messages.length, "BLS: number of public keys and messages must be equal"); uint256 inputSize = (size + 1) * 6; uint256[] memory input = new uint256[](inputSize); input[0] = signature[0]; @@ -115,17 +102,10 @@ library BLS { // prettier-ignore uint256 precompileGasCost = gasleft(); -// uint256 precompileGasCost = BNPairingPrecompileCostEstimator(COST_ESTIMATOR_ADDRESS).getGasCost(size + 1); + // uint256 precompileGasCost = BNPairingPrecompileCostEstimator(COST_ESTIMATOR_ADDRESS).getGasCost(size + 1); // solium-disable-next-line security/no-inline-assembly assembly { - callSuccess := staticcall( - precompileGasCost, - 8, - add(input, 0x20), - mul(inputSize, 0x20), - out, - 0x20 - ) + callSuccess := staticcall(precompileGasCost, 8, add(input, 0x20), mul(inputSize, 0x20), out, 0x20) } if (!callSuccess) { return (false, false); @@ -134,13 +114,9 @@ library BLS { } /** - @notice Fouque-Tibouchi Hash to Curve + * @notice Fouque-Tibouchi Hash to Curve */ - function hashToPoint(bytes32 domain, bytes memory message) - internal - view - returns (uint256[2] memory) - { + function hashToPoint(bytes32 domain, bytes memory message) internal view returns (uint256[2] memory) { uint256[2] memory u = hashToField(domain, message); uint256[2] memory p0 = mapToPoint(u[0]); uint256[2] memory p1 = mapToPoint(u[1]); @@ -154,19 +130,13 @@ library BLS { assembly { success := staticcall(sub(gas(), 2000), 6, bnAddInput, 128, p0, 64) switch success - case 0 { - invalid() - } + case 0 { invalid() } } require(success, "BLS: bn add call failed"); return p0; } - function mapToPoint(uint256 _x) - internal - pure - returns (uint256[2] memory p) - { + function mapToPoint(uint256 _x) internal pure returns (uint256[2] memory p) { require(_x < N, "mapToPointFT: invalid field element"); uint256 x = _x; @@ -228,11 +198,7 @@ library BLS { return [x, a1]; } - function isValidSignature(uint256[2] memory signature) - internal - pure - returns (bool) - { + function isValidSignature(uint256[2] memory signature) internal pure returns (bool) { if ((signature[0] >= N) || (signature[1] >= N)) { return false; } else { @@ -240,11 +206,7 @@ library BLS { } } - function isOnCurveG1(uint256[2] memory point) - internal - pure - returns (bool _isOnCurve) - { + function isOnCurveG1(uint256[2] memory point) internal pure returns (bool _isOnCurve) { // solium-disable-next-line security/no-inline-assembly assembly { let t0 := mload(point) @@ -257,11 +219,7 @@ library BLS { } } - function isOnCurveG2(uint256[4] memory point) - internal - pure - returns (bool _isOnCurve) - { + function isOnCurveG2(uint256[4] memory point) internal pure returns (bool _isOnCurve) { // solium-disable-next-line security/no-inline-assembly assembly { // x0, x1 @@ -281,16 +239,8 @@ library BLS { t3 := mulmod(add(t4, sub(N, t3)), t1, N) // x ^ 3 + b - t0 := addmod( - t2, - 0x2b149d40ceb8aaae81be18991be06ac3b5b4c5e559dbefa33267e6dc24a138e5, - N - ) - t1 := addmod( - t3, - 0x009713b03af0fed4cd2cafadeed8fdf4a74fa084e52d1852e4a2bd0685c315d2, - N - ) + t0 := addmod(t2, 0x2b149d40ceb8aaae81be18991be06ac3b5b4c5e559dbefa33267e6dc24a138e5, N) + t1 := addmod(t3, 0x009713b03af0fed4cd2cafadeed8fdf4a74fa084e52d1852e4a2bd0685c315d2, N) // y0, y1 t2 := mload(add(point, 64)) @@ -313,11 +263,7 @@ library BLS { return ModexpInverse.run(a); } - function hashToField(bytes32 domain, bytes memory messages) - internal - pure - returns (uint256[2] memory) - { + function hashToField(bytes32 domain, bytes memory messages) internal pure returns (uint256[2] memory) { bytes memory _msg = expandMsgTo96(domain, messages); uint256 u0; uint256 u1; @@ -339,11 +285,7 @@ library BLS { return [a0, a1]; } - function expandMsgTo96(bytes32 domain, bytes memory message) - internal - pure - returns (bytes memory) - { + function expandMsgTo96(bytes32 domain, bytes memory message) internal pure returns (bytes memory) { // zero<64>|msg|lib_str<2>|I2OSP(0, 1)<1>|dst|dst_len<1> uint256 t0 = message.length; bytes memory msg0 = new bytes(32 + t0 + 64 + 4); @@ -352,13 +294,7 @@ library BLS { // solium-disable-next-line security/no-inline-assembly assembly { let p := add(msg0, 96) - for { - let z := 0 - } lt(z, t0) { - z := add(z, 32) - } { - mstore(add(p, z), mload(add(message, add(z, 32)))) - } + for { let z := 0 } lt(z, t0) { z := add(z, 32) } { mstore(add(p, z), mload(add(message, add(z, 32)))) } p := add(p, t0) mstore8(p, 0) diff --git a/src/hubble-contracts/libs/BNPairingPrecompileCostEstimator.sol b/lib/hubble-contracts/libs/BNPairingPrecompileCostEstimator.sol similarity index 68% rename from src/hubble-contracts/libs/BNPairingPrecompileCostEstimator.sol rename to lib/hubble-contracts/libs/BNPairingPrecompileCostEstimator.sol index 30d04a4..17c633e 100644 --- a/src/hubble-contracts/libs/BNPairingPrecompileCostEstimator.sol +++ b/lib/hubble-contracts/libs/BNPairingPrecompileCostEstimator.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity >=0.6.12; +pragma solidity ^0.8.23; contract BNPairingPrecompileCostEstimator { uint256 public baseCost; @@ -45,64 +45,32 @@ contract BNPairingPrecompileCostEstimator { uint256[1] memory out; bool callSuccess; uint256 suppliedGas = gasleft() - 2000; - require( - gasleft() > 2000, - "BNPairingPrecompileCostEstimator: not enough gas, single pair" - ); + require(gasleft() > 2000, "BNPairingPrecompileCostEstimator: not enough gas, single pair"); uint256 gasT0 = gasleft(); // solium-disable-next-line security/no-inline-assembly assembly { callSuccess := staticcall(suppliedGas, 8, input, 192, out, 0x20) } uint256 gasCost = gasT0 - gasleft(); - require( - callSuccess, - "BNPairingPrecompileCostEstimator: single pair call is failed" - ); - require( - out[0] == 0, - "BNPairingPrecompileCostEstimator: single pair call result must be 0" - ); + require(callSuccess, "BNPairingPrecompileCostEstimator: single pair call is failed"); + require(out[0] == 0, "BNPairingPrecompileCostEstimator: single pair call result must be 0"); return gasCost; } function _gasCost2Pair() internal view returns (uint256) { - uint256[12] memory input = - [ - G1_X, - G1_Y, - G2_X1, - G2_X0, - G2_Y1, - G2_Y0, - G1_X, - G1_Y, - G2_X1, - G2_X0, - N_G2_Y1, - N_G2_Y0 - ]; + uint256[12] memory input = [G1_X, G1_Y, G2_X1, G2_X0, G2_Y1, G2_Y0, G1_X, G1_Y, G2_X1, G2_X0, N_G2_Y1, N_G2_Y0]; uint256[1] memory out; bool callSuccess; uint256 suppliedGas = gasleft() - 2000; - require( - gasleft() > 2000, - "BNPairingPrecompileCostEstimator: not enough gas, couple pair" - ); + require(gasleft() > 2000, "BNPairingPrecompileCostEstimator: not enough gas, couple pair"); uint256 gasT0 = gasleft(); // solium-disable-next-line security/no-inline-assembly assembly { callSuccess := staticcall(suppliedGas, 8, input, 384, out, 0x20) } uint256 gasCost = gasT0 - gasleft(); - require( - callSuccess, - "BNPairingPrecompileCostEstimator: couple pair call is failed" - ); - require( - out[0] == 1, - "BNPairingPrecompileCostEstimator: couple pair call result must be 1" - ); + require(callSuccess, "BNPairingPrecompileCostEstimator: couple pair call is failed"); + require(out[0] == 1, "BNPairingPrecompileCostEstimator: couple pair call result must be 1"); return gasCost; } } diff --git a/src/hubble-contracts/libs/ModExp.sol b/lib/hubble-contracts/libs/ModExp.sol similarity index 95% rename from src/hubble-contracts/libs/ModExp.sol rename to lib/hubble-contracts/libs/ModExp.sol index 6fd08f1..509d711 100644 --- a/src/hubble-contracts/libs/ModExp.sol +++ b/lib/hubble-contracts/libs/ModExp.sol @@ -1,21 +1,19 @@ // SPDX-License-Identifier: MIT -pragma solidity >= 0.6.12; +pragma solidity ^0.8.23; /** - @title Compute Inverse by Modular Exponentiation - @notice Compute $input^(N - 2) mod N$ using Addition Chain method. - Where N = 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47 - and N - 2 = 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45 - @dev the function body is generated with the modified addchain script - see https://github.com/kobigurk/addchain/commit/2c37a2ace567a9bdc680b4e929c94aaaa3ec700f + * @title Compute Inverse by Modular Exponentiation + * @notice Compute $input^(N - 2) mod N$ using Addition Chain method. + * Where N = 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47 + * and N - 2 = 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45 + * @dev the function body is generated with the modified addchain script + * see https://github.com/kobigurk/addchain/commit/2c37a2ace567a9bdc680b4e929c94aaaa3ec700f */ library ModexpInverse { function run(uint256 t2) internal pure returns (uint256 t0) { // solium-disable-next-line security/no-inline-assembly assembly { - let - n - := 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47 + let n := 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47 t0 := mulmod(t2, t2, n) let t5 := mulmod(t0, t2, n) let t1 := mulmod(t5, t0, n) @@ -329,18 +327,16 @@ library ModexpInverse { } /** - @title Compute Squre Root by Modular Exponentiation - @notice Compute $input^{(N + 1) / 4} mod N$ using Addition Chain method. - Where N = 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47 - and (N + 1) / 4 = 0xc19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52 + * @title Compute Squre Root by Modular Exponentiation + * @notice Compute $input^{(N + 1) / 4} mod N$ using Addition Chain method. + * Where N = 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47 + * and (N + 1) / 4 = 0xc19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52 */ library ModexpSqrt { function run(uint256 t6) internal pure returns (uint256 t0) { // solium-disable-next-line security/no-inline-assembly assembly { - let - n - := 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47 + let n := 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47 t0 := mulmod(t6, t6, n) let t4 := mulmod(t0, t6, n) diff --git a/src/BLSLightAccount.sol b/src/BLSLightAccount.sol index b7fe8d9..4d9d802 100644 --- a/src/BLSLightAccount.sol +++ b/src/BLSLightAccount.sol @@ -1,27 +1,38 @@ // SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.23; -import {BLSOpen} from "./BLSOpen.sol"; +import {BLSOpen} from "../lib/BLSOpen.sol"; contract BLSLightAccount { - uint256[4] private publicKey; address private owner; - - function validateUserOpSignature(uint256[] message, uint256[2] signature) - external view returns (bool) { - return BLSOpen.verifySingle(signature, publicKey, message); - } - function initialize(address owner_, uint256[4] memory aPublicKey) external { + constructor(address owner_) { if (owner_ == address(0)) { - revert InvalidOwner(address(0)); + revert("invalid owner"); } owner = owner_; + } + + modifier onlyOwner() { + require(msg.sender == owner, "Caller is not the owner"); + _; + } + + function validateUserOpSignature(uint256[2] memory message, uint256[2] memory signature) + external + view + returns (bool) + { + return BLSOpen.verifySingle(signature, publicKey, message); + } + + function initialize(address owner_, uint256[4] memory aPublicKey) external onlyOwner { + owner = owner_; publicKey = aPublicKey; } - function setBlsPublicKey(uint256[4] memory newPublicKey) public { + function setBlsPublicKey(uint256[4] memory newPublicKey) public onlyOwner { publicKey = newPublicKey; } } diff --git a/src/BLSOpen.sol b/src/BLSOpen.sol deleted file mode 100644 index b5e8ad9..0000000 --- a/src/BLSOpen.sol +++ /dev/null @@ -1,64 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.23; - -import { BLS } from "./hubble-contracts/libs/BLS.sol"; - -library BLSOpen { - function verifySingle( - uint256[2] memory signature, - uint256[4] memory pubkey, - uint256[2] memory message - ) external view returns (bool) { - uint256[4][] memory pubkeys = new uint256[4][](1); - uint256[2][] memory messages = new uint256[2][](1); - pubkeys[0] = pubkey; - messages[0] = message; - - (bool verified, bool callSuccess) = BLS.verifyMultiple( - signature, - pubkeys, - messages - ); - return callSuccess && verified; - - // // NB: (result, success) opposite of `call` convention (success, result). - // (bool verified, bool callSuccess) = BLS.verifySingle( - // signature, - // pubkey, - // message - // ); - // return callSuccess && verified; - } - - function verifyMultiple( - uint256[2] memory signature, - uint256[4][] memory pubkeys, - uint256[2][] memory messages - ) external view returns (bool) { - (bool verified, bool callSuccess) = BLS.verifyMultiple( - signature, - pubkeys, - messages - ); - return callSuccess && verified; - } - - function hashToPoint( - bytes32 domain, - bytes memory message - ) external view returns (uint256[2] memory) { - return BLS.hashToPoint( - domain, - message - ); - } - - function isZeroBLSKey(uint256[4] memory blsKey) public pure returns (bool) { - bool isZero = true; - for (uint256 i=0; isZero && i<4; i++) { - isZero = (blsKey[i] == 0); - } - return isZero; - } - -}