diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..a243a86 --- /dev/null +++ b/.env.example @@ -0,0 +1,20 @@ +REPORT_GAS=false + +# Tenderly +TENDERLY_ACCESS_KEY= + +# Mainnet +MAINNET_DEPLOYER= + +# Holesky +HOLESKY_DEPLOYER= + +# Arb One +ARBITRUM_ONE_DEPLOYER= +ARBITRUM_ONE_RPC_URL= + +# Arb Sepolia +ARBITRUM_SEPOLIA_ADMIN_KEY= +ARBITRUM_SEPOLIA_RPC_URL= +ARB_SEPOLIA_API_KEY= + diff --git a/.gitignore b/.gitignore index 0e58291..295b3f4 100644 --- a/.gitignore +++ b/.gitignore @@ -103,7 +103,6 @@ dist # vuepress v2.x temp and cache directory .temp -.cache # Docusaurus cache and generated files .docusaurus @@ -122,6 +121,7 @@ dist # Stores VSCode versions used for testing VSCode extensions .vscode-test +.vscode # yarn v2 .yarn/cache @@ -130,9 +130,6 @@ dist .yarn/install-state.gz .pnp.* -node_modules -.env -coverage coverage.json typechain typechain-types @@ -143,7 +140,15 @@ artifacts addresses/31337.json -*backup* +# Foundry +broadcast + +# Openzeppelin +.openzeppelin/ + +# MacOS +**/.DS_Store +# Python venv venv/* \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..50f0f03 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,12 @@ +[submodule "lib/forge-std"] + path = lib/forge-std + url = https://github.com/foundry/forge-std +[submodule "lib/openzeppelin-foundry-upgrades"] + path = lib/openzeppelin-foundry-upgrades + url = https://github.com/OpenZeppelin/openzeppelin-foundry-upgrades +[submodule "lib/openzeppelin-contracts"] + path = lib/openzeppelin-contracts + url = https://github.com/OpenZeppelin/openzeppelin-contracts +[submodule "lib/openzeppelin-contracts-upgradeable"] + path = lib/openzeppelin-contracts-upgradeable + url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable diff --git a/.openzeppelin/arbitrum-nova.json b/.openzeppelin/arbitrum-nova.json deleted file mode 100644 index 86779fc..0000000 --- a/.openzeppelin/arbitrum-nova.json +++ /dev/null @@ -1,703 +0,0 @@ -{ - "manifestVersion": "3.2", - "proxies": [ - { - "address": "0x5f23d4eC6607fb381759151B02795187815b0487", - "txHash": "0x8e9eaa84c436a7eee345801a6b7db2f347407712203c451cef3021360190eac9", - "kind": "uups" - }, - { - "address": "0x2F1A3149D2798cA9Dfd7445B3cb713B4CD416b7d", - "txHash": "0x900422b51af96312b2190cc31ec3a164adf0c0cd11f672ac5a38392d3a99ecaa", - "kind": "uups" - } - ], - "impls": { - "af90cee8a92b70faf66d2555bfb49db533be4be150d63d6ac075c262b7786f85": { - "address": "0xcB997e6C00F0a59ABA8fDF122Ced77729fF0BC26", - "txHash": "0x133dee2f0702c7df144a687f04a6309e16d1f323f7e0a9df4ec033637728f135", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_address,t_struct(Generator)8024_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:81" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_address,t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)8036_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:82" - }, - { - "label": "proofMarketPlace", - "offset": 0, - "slot": "303", - "type": "t_contract(IProofMarketPlace)8308", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:84" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IProofMarketPlace)8308": { - "label": "contract IProofMarketPlace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)8007": { - "label": "enum IGeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)8036_storage))": { - "label": "mapping(address => mapping(bytes32 => struct IGeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)8024_storage)": { - "label": "mapping(address => struct IGeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)8036_storage)": { - "label": "mapping(bytes32 => struct IGeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)8024_storage": { - "label": "struct IGeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "totalCompute", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketPlaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "7" - } - ], - "numberOfBytes": "256" - }, - "t_struct(GeneratorInfoPerMarket)8036_storage": { - "label": "struct IGeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)8007", - "offset": 0, - "slot": "0" - }, - { - "label": "computeAllocation", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "a1dace63675a3376e861e9584c92b5cd8770373b1b8c1829dbe8262c5f92c175": { - "address": "0xE09E6644Db3c964B89212BB2F43ec6b438d56fed", - "txHash": "0xb852af75e8c65d4d79371daedac43e6159b09b5c18afaf4fdc54578482aa9990", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "marketmetadata", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_bytes32,t_bytes_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:114" - }, - { - "label": "verifier", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_bytes32,t_address)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:115" - }, - { - "label": "slashingPenalty", - "offset": 0, - "slot": "303", - "type": "t_mapping(t_bytes32,t_uint256)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:116" - }, - { - "label": "askCounter", - "offset": 0, - "slot": "304", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:118" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "305", - "type": "t_mapping(t_uint256,t_struct(AskWithState)8205_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:119" - }, - { - "label": "taskCounter", - "offset": 0, - "slot": "306", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:121" - }, - { - "label": "listOfTask", - "offset": 0, - "slot": "307", - "type": "t_mapping(t_uint256,t_struct(Task)8210_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:122" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_enum(AskState)8177": { - "label": "enum IProofMarketPlace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_address)": { - "label": "mapping(bytes32 => address)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bytes_storage)": { - "label": "mapping(bytes32 => bytes)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(AskWithState)8205_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.AskWithState)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(Task)8210_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.Task)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)8196_storage": { - "label": "struct IProofMarketPlace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_bytes32", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)8205_storage": { - "label": "struct IProofMarketPlace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)8196_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)8177", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - } - ], - "numberOfBytes": "256" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Task)8210_storage": { - "label": "struct IProofMarketPlace.Task", - "members": [ - { - "label": "askId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - } - } -} diff --git a/.openzeppelin/arbitrum-one.json b/.openzeppelin/arbitrum-one.json deleted file mode 100644 index 47fc69d..0000000 --- a/.openzeppelin/arbitrum-one.json +++ /dev/null @@ -1,153 +0,0 @@ -{ - "manifestVersion": "3.2", - "proxies": [ - { - "address": "0xfcCD297E4FCce471f633BB1998cc7e058903cc53", - "txHash": "0x58409ba1bd647d5a9d1f52a6f9288025df61698f1413daa69115eea105957c81", - "kind": "uups" - } - ], - "impls": { - "efe727eaaeb9fbb3ee3d40d88d04a8335df99ffbf7a9ff3a579e7427fc934f4c": { - "address": "0x1d8A9f9bF8d8f55a09bcB3296dAA6a0cf562175d", - "txHash": "0x506c041e473c270febdb1364279e7dd3d3459d9a9dbccd402dd21330f71b4364", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "AttestationProofVerifier", - "src": "contracts/periphery/AttestationVerifierZKWithRisczeroRouter.sol:23" - }, - { - "label": "__gap_1", - "offset": 0, - "slot": "500", - "type": "t_array(t_uint256)50_storage", - "contract": "AttestationProofVerifier", - "src": "contracts/periphery/AttestationVerifierZKWithRisczeroRouter.sol:68" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)24_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)24_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)145_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)24_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)24_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - } - } -} diff --git a/.openzeppelin/sepolia.json b/.openzeppelin/sepolia.json deleted file mode 100644 index 097beda..0000000 --- a/.openzeppelin/sepolia.json +++ /dev/null @@ -1,2005 +0,0 @@ -{ - "manifestVersion": "3.2", - "proxies": [ - { - "address": "0xFC02897B76538F2897e48146453027fFF8338BaA", - "txHash": "0x6f04517408f170d4e545e833c5413886c068100d37bed292233a5be9b19fa509", - "kind": "uups" - }, - { - "address": "0x56d030Fe5D75211DB0Ca84fcC1ee19615FA19105", - "txHash": "0x36b811cd37d96886b70215099d457da88bdeee2fba04a57732aec55f63b2e875", - "kind": "uups" - }, - { - "address": "0x8221f510a3dAa5FAd802b9485AaE5d86C94dC2e9", - "txHash": "0x15467db09eca7c67dd218aad51254d94e30b776110f36cc05a3cfb1274f9f139", - "kind": "uups" - }, - { - "address": "0x57d8B74EB5c758C3D6809038E714A1c76c938076", - "txHash": "0xe51770618bf209d9ff28dac6f7f2c653abc6b59a1c6d89dece602e9a3feb1d54", - "kind": "uups" - }, - { - "address": "0x071CeB004B26041a9f66A350EACD4E0DAe619b75", - "txHash": "0x0c191cce4c0b98e055e486296d91f4afe5fdf21d3fa7e0ad62a27607fd06c5aa", - "kind": "uups" - }, - { - "address": "0xAE14BE31f3B0E2D24179412bE9CF70f52221824d", - "txHash": "0xbb5d2d120bf6d696d99bcd01eb1ec1db47c6d1bc78bedc93659b0da6066ce145", - "kind": "uups" - } - ], - "impls": { - "96168b3767fe1ea2bc536760e0fcc3ce82cd6fd5dff9157337ca4adc3c9f829a": { - "address": "0x8147e610aF918807C393d865F3C26A6d3f41ddAE", - "txHash": "0x40dbe0181c48ef504cb7949f87449152c2015da7e10d565c12e462f27782842a", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)3802_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_address,t_mapping(t_bytes32,t_struct(GeneratorWithState)5773_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:81" - }, - { - "label": "proofMarketPlace", - "offset": 0, - "slot": "302", - "type": "t_contract(IProofMarketPlace)5880", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:83" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IProofMarketPlace)5880": { - "label": "contract IProofMarketPlace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)5757": { - "label": "enum IGeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "LOW_STAKE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_bytes32,t_struct(GeneratorWithState)5773_storage))": { - "label": "mapping(address => mapping(bytes32 => struct IGeneratorRegistry.GeneratorWithState))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)3802_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(GeneratorWithState)5773_storage)": { - "label": "mapping(bytes32 => struct IGeneratorRegistry.GeneratorWithState)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)3802_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3487_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)5766_storage": { - "label": "struct IGeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "amountLocked", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "minReward", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "3" - } - ], - "numberOfBytes": "128" - }, - "t_struct(GeneratorWithState)5773_storage": { - "label": "struct IGeneratorRegistry.GeneratorWithState", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)5757", - "offset": 0, - "slot": "0" - }, - { - "label": "generator", - "type": "t_struct(Generator)5766_storage", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3487_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "f7e997a0a6bd5f3f03c8e472dd8b85f3d03d281cf7c5b6ae3f4f71267124a019": { - "address": "0xdC2E14cD44ed4797F5072c6A76DA6ac5a64B3806", - "txHash": "0xeeb8e0668d05f5a0b0900b6aac21e0ca4d4b9fa59dce7be8a8d384469cbba342", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)3802_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "paymentToken", - "offset": 0, - "slot": "301", - "type": "t_contract(IERC20Upgradeable)1326", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:76" - }, - { - "label": "marketCreationCost", - "offset": 0, - "slot": "302", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:77" - }, - { - "label": "treasury", - "offset": 0, - "slot": "303", - "type": "t_address", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:78" - }, - { - "label": "marketmetadata", - "offset": 0, - "slot": "304", - "type": "t_mapping(t_bytes32,t_bytes_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:80" - }, - { - "label": "verifier", - "offset": 0, - "slot": "305", - "type": "t_mapping(t_bytes32,t_address)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:81" - }, - { - "label": "askCounter", - "offset": 0, - "slot": "306", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:83" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "307", - "type": "t_mapping(t_uint256,t_struct(AskWithState)5073_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:84" - }, - { - "label": "taskCounter", - "offset": 0, - "slot": "308", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:86" - }, - { - "label": "listOfTask", - "offset": 0, - "slot": "309", - "type": "t_mapping(t_uint256,t_struct(Task)5078_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:87" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "310", - "type": "t_contract(IGeneratorRegistry)5041", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:89" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IERC20Upgradeable)1326": { - "label": "contract IERC20Upgradeable", - "numberOfBytes": "20" - }, - "t_contract(IGeneratorRegistry)5041": { - "label": "contract IGeneratorRegistry", - "numberOfBytes": "20" - }, - "t_enum(AskState)5051": { - "label": "enum IProofMarketPlace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_address)": { - "label": "mapping(bytes32 => address)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bytes_storage)": { - "label": "mapping(bytes32 => bytes)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)3802_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(AskWithState)5073_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.AskWithState)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(Task)5078_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.Task)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)3802_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3487_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)5066_storage": { - "label": "struct IProofMarketPlace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_bytes32", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "proverRefundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)5073_storage": { - "label": "struct IProofMarketPlace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)5066_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)5051", - "offset": 0, - "slot": "7" - } - ], - "numberOfBytes": "256" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3487_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Task)5078_storage": { - "label": "struct IProofMarketPlace.Task", - "members": [ - { - "label": "askId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "6f7e50d8b3c06b8df7e9f19e54bc454510d184afa98ddd593a6171f724e11bc2": { - "address": "0x23fc59b6732448701F73D2bf222D62f036Af54Ac", - "txHash": "0xa507c7d2869273913d206361ea22f70165565baec6cd81bd6bae1095000bc1c1", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)3802_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_address,t_mapping(t_bytes32,t_struct(GeneratorWithState)5790_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:81" - }, - { - "label": "proofMarketPlace", - "offset": 0, - "slot": "302", - "type": "t_contract(IProofMarketPlace)5908", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:83" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IProofMarketPlace)5908": { - "label": "contract IProofMarketPlace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)5774": { - "label": "enum IGeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "LOW_STAKE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_bytes32,t_struct(GeneratorWithState)5790_storage))": { - "label": "mapping(address => mapping(bytes32 => struct IGeneratorRegistry.GeneratorWithState))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)3802_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(GeneratorWithState)5790_storage)": { - "label": "mapping(bytes32 => struct IGeneratorRegistry.GeneratorWithState)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)3802_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3487_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)5783_storage": { - "label": "struct IGeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "amountLocked", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "minReward", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "3" - } - ], - "numberOfBytes": "128" - }, - "t_struct(GeneratorWithState)5790_storage": { - "label": "struct IGeneratorRegistry.GeneratorWithState", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)5774", - "offset": 0, - "slot": "0" - }, - { - "label": "generator", - "type": "t_struct(Generator)5783_storage", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3487_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "9495b3b32bcb3590279cb67da206af98aabf776a47e72d67412f410070ff472c": { - "address": "0x71121D08762a5157277A6A8039E9a3853735a10c", - "txHash": "0xfda8cb6817cd6787d8b5c16f7d31b4070ce7d1600a25944b8adc8ad6eab6951d", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)3802_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "marketmetadata", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_bytes32,t_bytes_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:94" - }, - { - "label": "verifier", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_bytes32,t_address)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:95" - }, - { - "label": "askCounter", - "offset": 0, - "slot": "303", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:97" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "304", - "type": "t_mapping(t_uint256,t_struct(AskWithState)5829_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:98" - }, - { - "label": "taskCounter", - "offset": 0, - "slot": "305", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:100" - }, - { - "label": "listOfTask", - "offset": 0, - "slot": "306", - "type": "t_mapping(t_uint256,t_struct(Task)5834_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:101" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_enum(AskState)5801": { - "label": "enum IProofMarketPlace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_address)": { - "label": "mapping(bytes32 => address)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bytes_storage)": { - "label": "mapping(bytes32 => bytes)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)3802_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(AskWithState)5829_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.AskWithState)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(Task)5834_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.Task)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)3802_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3487_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)5820_storage": { - "label": "struct IProofMarketPlace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_bytes32", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)5829_storage": { - "label": "struct IProofMarketPlace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)5820_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)5801", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - } - ], - "numberOfBytes": "256" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3487_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Task)5834_storage": { - "label": "struct IProofMarketPlace.Task", - "members": [ - { - "label": "askId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "4da5cff467b3ff30e18761cdc82685c6695b248ce8c3028534855ec3b355ad4a": { - "address": "0xC5E57D85A5940Ba74E229D1792C0318Fc28871B9", - "txHash": "0xf60bc5817110545e01f63cd0206971a17db0fbc59360ae40714cba3d1f056117", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_address,t_struct(Generator)7916_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:81" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_address,t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)7928_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:82" - }, - { - "label": "proofMarketPlace", - "offset": 0, - "slot": "303", - "type": "t_contract(IProofMarketPlace)8194", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:84" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IProofMarketPlace)8194": { - "label": "contract IProofMarketPlace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)7899": { - "label": "enum IGeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)7928_storage))": { - "label": "mapping(address => mapping(bytes32 => struct IGeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)7916_storage)": { - "label": "mapping(address => struct IGeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)7928_storage)": { - "label": "mapping(bytes32 => struct IGeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)7916_storage": { - "label": "struct IGeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "totalCompute", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketPlaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "7" - } - ], - "numberOfBytes": "256" - }, - "t_struct(GeneratorInfoPerMarket)7928_storage": { - "label": "struct IGeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)7899", - "offset": 0, - "slot": "0" - }, - { - "label": "computeAllocation", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "ec1bcae29dcac48ad3c50d00e020fccfcd70379ff47bf578789f17205e48db51": { - "address": "0x676a668C878100EdADcE806C9eed24b283331587", - "txHash": "0x0bd6c773c22b8b2393991228ff9b2bfde2fdc65a7ba3e8b1592e9f0d4bd88a00", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "marketmetadata", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_bytes32,t_bytes_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:114" - }, - { - "label": "verifier", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_bytes32,t_address)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:115" - }, - { - "label": "slashingPenalty", - "offset": 0, - "slot": "303", - "type": "t_mapping(t_bytes32,t_uint256)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:116" - }, - { - "label": "askCounter", - "offset": 0, - "slot": "304", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:118" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "305", - "type": "t_mapping(t_uint256,t_struct(AskWithState)8108_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:119" - }, - { - "label": "taskCounter", - "offset": 0, - "slot": "306", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:121" - }, - { - "label": "listOfTask", - "offset": 0, - "slot": "307", - "type": "t_mapping(t_uint256,t_struct(Task)8113_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:122" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_enum(AskState)8080": { - "label": "enum IProofMarketPlace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_address)": { - "label": "mapping(bytes32 => address)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bytes_storage)": { - "label": "mapping(bytes32 => bytes)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(AskWithState)8108_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.AskWithState)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(Task)8113_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.Task)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)8099_storage": { - "label": "struct IProofMarketPlace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_bytes32", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)8108_storage": { - "label": "struct IProofMarketPlace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)8099_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)8080", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - } - ], - "numberOfBytes": "256" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Task)8113_storage": { - "label": "struct IProofMarketPlace.Task", - "members": [ - { - "label": "askId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - } - } -} diff --git a/.openzeppelin/unknown-421614.json b/.openzeppelin/unknown-421614.json deleted file mode 100644 index bcef4ce..0000000 --- a/.openzeppelin/unknown-421614.json +++ /dev/null @@ -1,28386 +0,0 @@ -{ - "manifestVersion": "3.2", - "proxies": [ - { - "address": "0x56d030Fe5D75211DB0Ca84fcC1ee19615FA19105", - "txHash": "0xad20d33dd6d0121e01da1c2048a4013277488f840320063b60a2120f1b1d7408", - "kind": "uups" - }, - { - "address": "0x6595525c6E7036d015dEfa3eD74Fa05065d15205", - "txHash": "0x8e75ff25fc3051a118464e1a4e7559243d8ee9bba7cbd7619302d66d73fa3503", - "kind": "uups" - }, - { - "address": "0x3A97a6dF767620fB89e79070Fe6c1E7d90c2d923", - "txHash": "0xd414ad6a11e70677f41e86753d63a199794d7b303a33e2b86097b7f2b25d6813", - "kind": "uups" - }, - { - "address": "0x3f18C0cE048aD0531070e56192387bb5f38C5cb9", - "txHash": "0xf91f4dee87b5b6eb1733be4d83aae91c22edf10a25a948161f4f74934e556109", - "kind": "uups" - }, - { - "address": "0xE31295fba524Bb012A13B56F885A5dbd77A6d647", - "txHash": "0xb4b5f6a84ad882b9f39beb2c2daabbf608dd465dfcb358dadc150af3b10479bf", - "kind": "uups" - }, - { - "address": "0xDcF952396f63f2fd6cd762A9582db3f2B50716E7", - "txHash": "0xa7a1f87246bdadccabedc59fbc076565920a2b2e6a25811368af9c24bbaf85a9", - "kind": "uups" - }, - { - "address": "0xcF77D80EE659C58A88950573B7948617c4307B73", - "txHash": "0x58e49b4080a7951445f7d3cd0f2fb89749858b4479e2ca10c37303dda36c0724", - "kind": "uups" - }, - { - "address": "0x6cBF19e3A947f29FAd3bb3A8787938cc6415e405", - "txHash": "0xb33ed91b866bfd12c963a8d38ecd08a054b35165a9312bd541148d3da545730f", - "kind": "uups" - }, - { - "address": "0x77716073aB8D14bb7470021daeb33567Dc5c1BF7", - "txHash": "0x361afa30d0d08690502de81ceed5e1f5f3a5566d9299b8540e9d7e155928f037", - "kind": "uups" - }, - { - "address": "0xf747B2a788b453eE4d00BE24Cd7D7A8532dCD3Cc", - "txHash": "0xefbafebbc47dac3a1d958d762f3b4b550db7c9734b739c63ee5f34b95f5ea849", - "kind": "uups" - }, - { - "address": "0x6b23bA5825d6f1886e0EDBC46A5eCe846b79AEc8", - "txHash": "0x7df2981097c959ea03c5d9c83e7974add0f706fabe8c7583b85cf1a48e801077", - "kind": "uups" - }, - { - "address": "0xD4B9D03fF2205DAC4F1fE3382934EcCe9dF174b1", - "txHash": "0xd4f77c73e8c349c76dade9cfd2db5cfcf1495a6fcf4e500aac5e5b890c3cb7b1", - "kind": "uups" - }, - { - "address": "0x5063dC8f8C375EeB31E774d1e93217c0e97fAf0c", - "txHash": "0x051c66c64abee5c4eb31818a65ef0dbebdd8c58caee13c92856e398d1b80994a", - "kind": "uups" - }, - { - "address": "0x53FdBed694201f9bF073dAD205740787A0e8Ba88", - "txHash": "0x48087273d8f280b9215f5895e3ac75e1127587524522cf55e9199e54f0ab458e", - "kind": "uups" - }, - { - "address": "0x2FC9c4BD3695ae676d12a94E3Db1dC3044716B33", - "txHash": "0xf3a36dc474aa8887dea8763635a12e94dc8fb1a38d1ff4fec96f6ad9efd3a85b", - "kind": "uups" - }, - { - "address": "0xFc3d65c9F14D28618F8Ba48a36f545FE1ec4354a", - "txHash": "0x9f96dfbd612f4421f5271babe4dbec91b3812e5748c6d85239607960938ccfdb", - "kind": "uups" - }, - { - "address": "0xaBF050D513D88f696F00e56bBa293A4C5Ca7512b", - "txHash": "0x2e99dc1caa983bd6f1e96fa4d02033e133e27968cc9b81e8ae6fd00618c13bd3", - "kind": "uups" - }, - { - "address": "0xEa71BF1119031E37C05197D57Be674bD01f3e323", - "txHash": "0xfe71b75df12e59d9c2955e007c951d604d0458d3b5d366d72b0dc89211fd931e", - "kind": "uups" - }, - { - "address": "0xBb80d7aAcCC58beC295DaF5F5c54543f98fB2e08", - "txHash": "0x06a4040ae2d460105f1c7731be41d6e440b2949f421b3ea371ff69f0296e1a76", - "kind": "uups" - }, - { - "address": "0x82CeA7f50819e488C8D5C6D5D142d8a5e0A7b056", - "txHash": "0x048a414c1846e9bf93570cdca21f3627cefd173e07e8f874361e6e66b4a998aa", - "kind": "uups" - }, - { - "address": "0x83D452dD497c4Fd01a8e5531F336D084663Df0B1", - "txHash": "0xe6f3910b76033b2cac780a41bc064d370f6768ea71304a11f2f10003bd4e5ae1", - "kind": "uups" - }, - { - "address": "0x9932521Ee5001bcf3e24C9097381b215E02baD57", - "txHash": "0x79492d5a2619c7b733901953e969c758aaea4d6a716575325263493d1dc4b890", - "kind": "uups" - }, - { - "address": "0xB8970D6fFb5aFD014A5714487EEde9786427A489", - "txHash": "0x0510d1a9b9de671e53df874defbdc3c5b68fe33598af6662dddc679df08d821e", - "kind": "uups" - }, - { - "address": "0x9c4E6e4B1D1b5A7d5cD59c4D3738D4A51C2b41a5", - "txHash": "0x9e050fb7ccaa637440a892fb507276e29623cee06ae911ed6c81be753dfc611d", - "kind": "uups" - }, - { - "address": "0x35d212138C748D233D1162De39c054f7da9d2b5E", - "txHash": "0x3ec9ea7f14c1a118d720ebcc99f110e0f9e98fda4e7fde68c8be0cdbb69a1cef", - "kind": "uups" - }, - { - "address": "0x7BDd0Ae08CdB59036b4D6a1DD50A9caC2A394536", - "txHash": "0x65160a6b9d4e45b47f2286fab7ed57295286ae9528a54aa1422d3e9548206fda", - "kind": "uups" - }, - { - "address": "0x8704249DA9eec06dC1D56750e70E84AC980d5032", - "txHash": "0xc71a6ec5c509ec8d0f0db06db2255bdff37562dbbc2cb77a2be61f74807bb8f8", - "kind": "uups" - }, - { - "address": "0x9269211eE427C02Bfd74Fb1275C9c4C2c8797D5b", - "txHash": "0x6b6f48200a5997b462f0af9315e885586f6a2471145a3cec2284f7a2cc383638", - "kind": "uups" - }, - { - "address": "0x3a64855cCC6b806904A37389940b37844A30d80F", - "txHash": "0xce5dbeab84380a96f4a49253880eca2ba8441908ac2602f9877b3735eddd0a4b", - "kind": "uups" - }, - { - "address": "0xC5b83a8d5543f64eb016990F49C85D629D54ddA7", - "txHash": "0x535170de3ea0e3d6611030e25e664f79309a749a16de4bb57558d17d58652350", - "kind": "uups" - }, - { - "address": "0xfDcD5a366687d7F1e8E6BA34ed16832c805E0846", - "txHash": "0x669ba0165d8991de54d7701a36f7d24c4947ad6ca407a03cf0286b774bccb405", - "kind": "uups" - }, - { - "address": "0x407DAD0cBec1CA37FD4c537A31c6B3500b4f1e9D", - "txHash": "0x203c0075db2216fe7bdc3f6991d199eb06bae86040004077c0d9ce9fddb5ca0b", - "kind": "uups" - }, - { - "address": "0x530670d15c39D99B538C054Df895fd9007A6e93f", - "txHash": "0x247231e349b80767c7f9315c696f17f5459d35e8cb0018a73bfbcce4835b3ff0", - "kind": "uups" - }, - { - "address": "0xAA98C160AA62AeCa29b036095e72693a7EbAD0f8", - "txHash": "0x7212754472c5aebf62c66c05127d3598bc11b03b6894edd7a69c922b43dbed91", - "kind": "uups" - }, - { - "address": "0x10d76E0E52Ad9574bF5CB3ad7aCce82e781B6A9e", - "txHash": "0xe56c9b45e0ad5cf705ab30c702641918d8d9d096d0f9edbdcaef3ccf98507ec7", - "kind": "uups" - }, - { - "address": "0xc5EEA598F47CAbDa1b7D9E10fa19487c8a6C0753", - "txHash": "0x7fff6c472d7da45cddd1c6d49f46f13e8b640465c086ea3b1c03415f23c9651f", - "kind": "uups" - }, - { - "address": "0x0A3647fA8fa1fa572E3eC51CEF1688bf1Cb36Adf", - "txHash": "0x4ae5c28fb9a62067be824069006e0b1b5606e0886f48749b6944a595c68a2352", - "kind": "uups" - }, - { - "address": "0xf1475Ff747D5D106DaE0E73329EA721C9a71aC85", - "txHash": "0x7c9758852397a4d49d7296d648d7a2e383f0ead64c73c46e081cc57c48dbe271", - "kind": "uups" - }, - { - "address": "0x8DAed69516846Bd1644633B079C0AE34e37c1A17", - "txHash": "0x71681c21f144dffb176b1e8b0e8c0fbb9dedff4d66c2441badeb963c88ba362f", - "kind": "uups" - }, - { - "address": "0x10f3d198414eC1AB186c6679e734B7872AF27bcB", - "txHash": "0x2ee90a9b55882ef9d2eb03f3698f4d8c66527df715ef69840bb786bc39091734", - "kind": "uups" - }, - { - "address": "0x22ccc99801a010b52922c78f65B00008a6260eEd", - "txHash": "0xc1756926fed7476dc2354cb25811fca6bddd51c06695eba4f1a714d503d3da7e", - "kind": "uups" - }, - { - "address": "0x651Ea4ffd309Ae47D840205f28D35c2A380c6185", - "txHash": "0x8b53b7575d195834f1f53c7c6e71cc67f20ff044b9cef05ed52b2302ead46dd5", - "kind": "uups" - }, - { - "address": "0x6ABBeB7120Bfbe0dbD98A28033ABdBB755408946", - "txHash": "0xf95a4df8aeddedb53bdc2e659c63e6b066206f5ba7d8f68a0fb69a41cd09e5c8", - "kind": "uups" - }, - { - "address": "0x6E23Cc34015E15bC0E1ad9278F0237a923439d4B", - "txHash": "0x00840333c13fbc23ad9a52fa8b338851928b55c8b550a4a6023634eadff8925b", - "kind": "uups" - }, - { - "address": "0x11D238a6b6A5B5094086dE35ED719CCAF9CD52b7", - "txHash": "0x56b86af06063844bbf16842ab5719bc4cad28033d8b23c416ffc2f54842b1502", - "kind": "uups" - }, - { - "address": "0xAfCe301F553B1C0982ee849f6bfDF1173FbFB4AD", - "txHash": "0x061c314c26eeaca5c3d78b0eaa843324a4bf7e8ad7b2a3f334604fabd09e93b7", - "kind": "uups" - }, - { - "address": "0xDC933888A0f1872d5373B97C1A2A3D4cb885cCfe", - "txHash": "0x75111323ab718c498bf6ae5c2ee67b3259d84aac2ea1865d6236e3339945af78", - "kind": "uups" - }, - { - "address": "0x365Df031F8A0eAbF379C0bE281F9222469132bb0", - "txHash": "0x87b1cb99f53541ba8a8c708e4ed38886371d00fe94a4d7452d3db98734edd710", - "kind": "uups" - }, - { - "address": "0xCeFE8a44D2dbaD8B9a50EcFc5FB2336C3EAa83D1", - "txHash": "0x73c55ea5f9e8a8dd61421f6662668222eda7eb9d47807fc8efd9bdf58c2642b2", - "kind": "uups" - }, - { - "address": "0x503bb0f5b30241c93eF930C6BB8e4Ba88455b801", - "txHash": "0xcf6d931ad478c3891364e38f6430ef47d3b32b6f55f21afd799ae5eecdbff186", - "kind": "uups" - }, - { - "address": "0xC68C0997EE7f524b5bC7c446a09a9670083d8c30", - "txHash": "0x9fb8a6bc9c81f01fc450cb375d5d28ab74d6c653ed91a4c98aad2104216514ac", - "kind": "uups" - }, - { - "address": "0x1bECb8E7B93a5AF4132cf332b2d388C927227509", - "txHash": "0x9f5307332caf7488cab69164f480b9fbc8b79e830368738981f5bb117ab31346", - "kind": "uups" - }, - { - "address": "0x3D116255C2b06D7672a9512958d9a3FFD7Aea50c", - "txHash": "0xe29e5af656be49be28ced75911004c3a79cd8873799054631f39ce281bf627cc", - "kind": "uups" - }, - { - "address": "0x008d842cA209690D9Da5431a94e193A7B93aC105", - "txHash": "0x01b84f809354b04f12548b8d2d27882345cabbe5f4621a09908eff8f7ae8c6d9", - "kind": "uups" - }, - { - "address": "0x27FDcb086Cdb0bCFa40638376CD3CbF5B8c69197", - "txHash": "0x0a6d88196f9b9c64b07356b5656750db14ebebc408af72890d383ae7ad0d1c81", - "kind": "uups" - }, - { - "address": "0xDDfeac626f82556c15237729E4E6F7181fAc4d8D", - "txHash": "0x0179ff397d795d2c97708cffd1f2ddb16357201b8259bc2f229bcd4b75215e3a", - "kind": "uups" - }, - { - "address": "0xDa7a2cBe0a23bb6bF4B3a6cFF0Fba7D0159967A1", - "txHash": "0xf2c06d01e471cbc26b7ccfdd8ad09f4da4ce70ae5771ef90ed8b8d259a6aee06", - "kind": "uups" - }, - { - "address": "0x7376a8729dEEa9BF57e46123A5b74c8419a6Ab62", - "txHash": "0x2aef4cdd2b0678a6af0eabce002b3ab44bd248fec5f5d6f58bc948cc4255c2d7", - "kind": "uups" - }, - { - "address": "0x41345DA0907ef0633ef420ae8c9D88444622cf81", - "txHash": "0xf21ed81d5823fa45eb4bc638f852fc891c945c6ac5b735c478ddb5e5e0224b59", - "kind": "uups" - }, - { - "address": "0x6F45cb6F85A7fc2C36b18eFA524DE23263Dc2D24", - "txHash": "0x2196a253844e34aa8cc9e466f96a68115f07c6dd0a8a123c6b89a2844dae290f", - "kind": "uups" - }, - { - "address": "0x3aB3487269206d5f6a10725d4e477BaA3611adcA", - "txHash": "0x19980bb4ff6160ff3cd87daf8bc7752ae319e21716f3fe282944153c1868c46a", - "kind": "uups" - }, - { - "address": "0xc54F0B48727902472e077Ae56b6321c4f2d77aD6", - "txHash": "0xa8d884a5fa623ac1c766b1c17286a6dd03a867afad6f5876cdb26d5ee8fd8a8a", - "kind": "uups" - }, - { - "address": "0x6FD6ED78f6D8a04bC9DF9480B4CD4A7E37e885a4", - "txHash": "0x1a10092e4c272df9b18790266d26be6b5d851d72b9f74b833c707929c1734c44", - "kind": "uups" - }, - { - "address": "0x9db3AF484D362765064854f73d90312e662dB65a", - "txHash": "0xdeb0c30a06a77e35896e697e23edf4d55ea4e5d72112f09a0595f84daad957cf", - "kind": "uups" - }, - { - "address": "0xBf6AfC0dB112e1e330Ea3fF4640Bac5fBA3e4B65", - "txHash": "0xb0ec3dded45dd52042e58f1ff727269cdd295d382bfabeafa7e73783629a7543", - "kind": "uups" - }, - { - "address": "0x2CcCb1ac0fa40922bc800619E09fc3bD821ea4F8", - "txHash": "0x555d0c8d85a6acb03303572fd055680da4fa7599cc54129ee5c23e0066e4c233", - "kind": "uups" - }, - { - "address": "0x81C80965f4E1b073858cc9D55d7D9A517C9fF258", - "txHash": "0x3eba93078a75a1267a5d566e52bb8acb4d723f6280f581a4cd03229fbe7382c1", - "kind": "uups" - }, - { - "address": "0x03F29e4E0F39F2EA64C6938a664770696C6d9609", - "txHash": "0x33a3cd90fba6978d573b179bd84e4cde4f287b0b664354f25bc8ae785f6944ac", - "kind": "uups" - }, - { - "address": "0x6eAfDf4493580959635135E949370DA674f09465", - "txHash": "0xdfe097b6a07b6557ba43d885c44258d8eaba5bed3ff3f0181f08ffe6cbfafe5b", - "kind": "uups" - }, - { - "address": "0x285cd239e5d0D8FD69bAa7C3D6592cb8430B75cC", - "txHash": "0x54eed439baf24ae039054f69f6ab867ca96fee78ee5de37fcc7c7cb9ab4a3f7e", - "kind": "uups" - }, - { - "address": "0xCFF469299eBD1D24a20d7BC10f00180bB89c6089", - "txHash": "0xf704059dabf03d5199c17febb4633f1d3837b96e5f03653465b1b31ecd948186", - "kind": "uups" - }, - { - "address": "0x444B85D5810d8C39D6766b3a4744722FDb14efa0", - "txHash": "0xaf0376819d0e18a75f0f38de7b48e37050185f675a25545defe13556763c8254", - "kind": "uups" - }, - { - "address": "0xF45734607F3093A9b6c7e436cccA968B304856da", - "txHash": "0x2c03975e499528535b0d5c0bf884606990cc2c7b21244a4981010246dcccb44f", - "kind": "uups" - }, - { - "address": "0x9d550bB177C329931A8B4974c99324BeFe9a7990", - "txHash": "0x2798f5c9bed8698771b19905072a8bdfdcf8b6ad985ed9ef6d54892c44b3aaba", - "kind": "uups" - }, - { - "address": "0x7999eEeb95DBC586e172A09d945f1eBc8d230603", - "txHash": "0x490aa256db54b29428538b59ffd2a59eb67aac37c434c3f0fe80cf7de47dab6c", - "kind": "uups" - }, - { - "address": "0xC1d1610968Cc893bb46304c70ba020710E989Bdf", - "txHash": "0xf01c4918ee38cfd6f5b2b1d6a269fa2651b0def37d6fe0585235c98119f8acad", - "kind": "uups" - }, - { - "address": "0x80e97Ab2d0b0889ced2DF8368cCa744C7bca3a30", - "txHash": "0xc19ac747c0ffb6c64f37402eb3cb36423bbd599015b118aea668775c03d5bf48", - "kind": "uups" - }, - { - "address": "0xb758b72D1a357e98Bb8cc094491a5717fC87c6fB", - "txHash": "0x6fb8ae46a89623edf19ca7457b1b2b29d16b1e3b8e8d2496dfa014251afab4b9", - "kind": "uups" - }, - { - "address": "0xAdfF6239a21A037035a68619f2E17f0ca5179960", - "txHash": "0xb85ad1077fde3f5531c1b33d2b9c3e18012ec18226bbd6f50c36bb0174c815b1", - "kind": "uups" - }, - { - "address": "0x0D4898CaB2bdb3d3b897169939CE6Eff0D0C17E5", - "txHash": "0xc11da83ddcd29faea73d5d078253e52c4a5d840b7dcd67d2033846a16e53ba78", - "kind": "uups" - }, - { - "address": "0xfdeC7eD3BA91C335C8dEc0C0740474F3177ECeAa", - "txHash": "0xbd3f69f35979f475515d33f965b0b340cae102d692a073737e2a3738bab97ed4", - "kind": "uups" - }, - { - "address": "0x62aD0E44Fd3E307e5d8C6D218d0c6CDa9d6A4C9c", - "txHash": "0xd145d24e5babe37d65709de26bb036823afba290bc19e9c93d6a6c6043ff193c", - "kind": "uups" - }, - { - "address": "0x8f1c627683A13Fdf2E24073C49C029652e20D820", - "txHash": "0x690b1f4b2bee95365f0d93eb1058bf6c0d875c0bf5c18f886d5585040d5a4cf6", - "kind": "uups" - }, - { - "address": "0x32ec9d00244efC64dE78F9B9059AD8c555bE3927", - "txHash": "0x81c9964f970c8abe1e20fa35c265342db726216671b51840fde666a19b9a8fb4", - "kind": "uups" - }, - { - "address": "0xA223F151c300d3F8cfE9597cfCD1BFFF844c2099", - "txHash": "0xd2a3aedf19014e607e4cbcc1c7e1872ec9d0e6628d872543e8a5b64a534ff5bc", - "kind": "uups" - }, - { - "address": "0x2E75011Bd25Fc40A6cc88BAa4b19020B9A0C120F", - "txHash": "0x1ee31b1a83baebc357d17112e52b55b5ed5b983fc4c6addb03ee720c41f00b10", - "kind": "uups" - }, - { - "address": "0xDB26Ff91F9aaD967bC406642233b69bE539f3d1F", - "txHash": "0xce8492120cfd48dbe754122ac718bd9ecede1d68405be575edf0c00b89482b79", - "kind": "uups" - }, - { - "address": "0x6Db494dC0EE6e43B96381B20B64Fce9e9C80985e", - "txHash": "0xbd1f71c47574d4c7a3f9388731c68ceb7396f66e13d0aa06c3cb7b684cff739c", - "kind": "uups" - }, - { - "address": "0xFFf22f221B9dB47a43cA5c8f48f7915c7957539c", - "txHash": "0xc91697981d428c6996e8c72a3ed9d8e48b3d8fa1303206d29bd62da01a371015", - "kind": "uups" - }, - { - "address": "0xCf30295AfC4F12FfAC6EE96Da3607e7749881BA7", - "txHash": "0xa4d740e3c8bfe61156d434d013314b913f975c89625d1d3984a1ae6a240be9d8", - "kind": "uups" - }, - { - "address": "0xBD3700b9e4292C4842e6CB87205192Fa96e8Ed05", - "txHash": "0xa30a5022f5b6825639a00438db2f47b45cdd0c48e8482ab02ff1a12fcc320ce5", - "kind": "uups" - }, - { - "address": "0x002064F4d224EA4F90e9A74B5fE3f3812886c6DF", - "txHash": "0xbd0bb9838bcb3fc9f38e31f81e9926c2a8a094c15306c13f1c78a8deead94fec", - "kind": "uups" - }, - { - "address": "0x5ce3e1010028C4F5687356D721e3e2B6DcEA7C25", - "txHash": "0xa98a1bd6a6bbe79c6b83db77e4510befefcc96f9a8931fd340bd638b6396fbdd", - "kind": "uups" - }, - { - "address": "0x0b6340a893B944BDc3B4F012e934b724c83abF97", - "txHash": "0xdabf03de72b7a5229916fb082b7b4b166ffd9ee75dae7c8b290c6d2425f24dd4", - "kind": "uups" - }, - { - "address": "0x37bEFDEEc24F06b3C46c9061f7B16617A57639Bf", - "txHash": "0xe038790aa2e66ce00c181bcc730987ddecc6f131db614afbaa87510fd9309556", - "kind": "uups" - }, - { - "address": "0x8d05E31F3201d09290A3bC684AE15C22419d350b", - "txHash": "0x49a62830f113d749cf5ca1082e37dc4bcf7c60e5094d2c735f2672430fdcfa3d", - "kind": "uups" - }, - { - "address": "0x8975288764260b1877C60a87314b1eC20a85Dc79", - "txHash": "0xf8f70a5f7b93c5cabe153dd35ec2cd20a42d307ebd52d2cef4380974b05a2cc9", - "kind": "uups" - } - ], - "impls": { - "5a290c873330a485202fae86db6181b0617cdaf00785ecbd68693b5b051aa091": { - "address": "0xdC2E14cD44ed4797F5072c6A76DA6ac5a64B3806", - "txHash": "0x76e5e20ab5fbc247bd21835e0da8d035ea98218625443238ca8e749d10f7f66e", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)3802_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_address,t_mapping(t_bytes32,t_struct(GeneratorWithState)6694_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:81" - }, - { - "label": "proofMarketPlace", - "offset": 0, - "slot": "302", - "type": "t_contract(IProofMarketPlace)6842", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:83" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IProofMarketPlace)6842": { - "label": "contract IProofMarketPlace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)6678": { - "label": "enum IGeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "LOW_STAKE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_bytes32,t_struct(GeneratorWithState)6694_storage))": { - "label": "mapping(address => mapping(bytes32 => struct IGeneratorRegistry.GeneratorWithState))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)3802_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(GeneratorWithState)6694_storage)": { - "label": "mapping(bytes32 => struct IGeneratorRegistry.GeneratorWithState)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)3802_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3487_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)6687_storage": { - "label": "struct IGeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "amountLocked", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "minReward", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "3" - } - ], - "numberOfBytes": "128" - }, - "t_struct(GeneratorWithState)6694_storage": { - "label": "struct IGeneratorRegistry.GeneratorWithState", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)6678", - "offset": 0, - "slot": "0" - }, - { - "label": "generator", - "type": "t_struct(Generator)6687_storage", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3487_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "7197846cc1798250f78d9c55cb00dffd1ac1af85249023de787c6a40952230bf": { - "address": "0x48aE47856628Dc7f46CA6716D882793d37B55114", - "txHash": "0x2b03e3bea719f1dd2493595f69577d408c4efb84a3f3fef99a315c5dd99bca87", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)3802_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "marketmetadata", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_bytes32,t_bytes_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:94" - }, - { - "label": "verifier", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_bytes32,t_address)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:95" - }, - { - "label": "askCounter", - "offset": 0, - "slot": "303", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:97" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "304", - "type": "t_mapping(t_uint256,t_struct(AskWithState)6755_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:98" - }, - { - "label": "taskCounter", - "offset": 0, - "slot": "305", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:100" - }, - { - "label": "listOfTask", - "offset": 0, - "slot": "306", - "type": "t_mapping(t_uint256,t_struct(Task)6760_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:101" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_enum(AskState)6727": { - "label": "enum IProofMarketPlace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_address)": { - "label": "mapping(bytes32 => address)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bytes_storage)": { - "label": "mapping(bytes32 => bytes)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)3802_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(AskWithState)6755_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.AskWithState)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(Task)6760_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.Task)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)3802_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3487_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)6746_storage": { - "label": "struct IProofMarketPlace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_bytes32", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)6755_storage": { - "label": "struct IProofMarketPlace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)6746_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)6727", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - } - ], - "numberOfBytes": "256" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3487_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Task)6760_storage": { - "label": "struct IProofMarketPlace.Task", - "members": [ - { - "label": "askId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "cbe75c6b5dc57961ddf8bf4de52379052d6e698610bef7d47714bbd13b3063bf": { - "address": "0x4a7006516159161E7D8B73802237D29d231a51D4", - "txHash": "0xe42b0914269b55a7c8eb305eb478475c23e1b3d5536e7a60760d5a35b5765dbf", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)3802_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_address,t_struct(Generator)5126_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:85" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_address,t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)5138_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:86" - }, - { - "label": "proofMarketPlace", - "offset": 0, - "slot": "303", - "type": "t_contract(IProofMarketPlace)5346", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:88" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IProofMarketPlace)5346": { - "label": "contract IProofMarketPlace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)5117": { - "label": "enum IGeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "LOW_STAKE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)5138_storage))": { - "label": "mapping(address => mapping(bytes32 => struct IGeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)5126_storage)": { - "label": "mapping(address => struct IGeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)3802_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)5138_storage)": { - "label": "mapping(bytes32 => struct IGeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)3802_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3487_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)5126_storage": { - "label": "struct IGeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "numberOfSupportedMarkets", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "3" - } - ], - "numberOfBytes": "128" - }, - "t_struct(GeneratorInfoPerMarket)5138_storage": { - "label": "struct IGeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)5117", - "offset": 0, - "slot": "0" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "maxParallelRequestsSupported", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "currentActiveRequest", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3487_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "417489dbe15e67b16d8b2d46c6afee45f82ad3fbf1a73273bacf07823528ff14": { - "address": "0xB3A85AdFcdE7BdA5a4CAa91F467D391800E48f2d", - "txHash": "0xb77c51e10d80b23536ad04f838adbefb39e57cbab83250fd25f8f5d974f26e2b", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)3802_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "marketmetadata", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_bytes32,t_bytes_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:94" - }, - { - "label": "verifier", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_bytes32,t_address)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:95" - }, - { - "label": "askCounter", - "offset": 0, - "slot": "303", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:97" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "304", - "type": "t_mapping(t_uint256,t_struct(AskWithState)7136_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:98" - }, - { - "label": "taskCounter", - "offset": 0, - "slot": "305", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:100" - }, - { - "label": "listOfTask", - "offset": 0, - "slot": "306", - "type": "t_mapping(t_uint256,t_struct(Task)7141_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:101" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_enum(AskState)7108": { - "label": "enum IProofMarketPlace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_address)": { - "label": "mapping(bytes32 => address)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bytes_storage)": { - "label": "mapping(bytes32 => bytes)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)3802_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(AskWithState)7136_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.AskWithState)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(Task)7141_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.Task)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)3802_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3487_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)7127_storage": { - "label": "struct IProofMarketPlace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_bytes32", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)7136_storage": { - "label": "struct IProofMarketPlace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)7127_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)7108", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - } - ], - "numberOfBytes": "256" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3487_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Task)7141_storage": { - "label": "struct IProofMarketPlace.Task", - "members": [ - { - "label": "askId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "b36c8f98881d6347901a75652daf07264dad5ec83033e077a47ef103a83e2dc5": { - "address": "0x0eDF7418aaB77e69DEF80785e7e88d5d27435136", - "txHash": "0x8bf769700ae24e134f6ce41e6056efa585c4666aa2fdc909bf2424ee0d4390bc", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_address,t_struct(Generator)6900_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:82" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_address,t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)6912_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:83" - }, - { - "label": "proofMarketPlace", - "offset": 0, - "slot": "303", - "type": "t_contract(IProofMarketPlace)7160", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:85" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IProofMarketPlace)7160": { - "label": "contract IProofMarketPlace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)6891": { - "label": "enum IGeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "LOW_STAKE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)6912_storage))": { - "label": "mapping(address => mapping(bytes32 => struct IGeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)6900_storage)": { - "label": "mapping(address => struct IGeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)6912_storage)": { - "label": "mapping(bytes32 => struct IGeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)6900_storage": { - "label": "struct IGeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "numberOfSupportedMarkets", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "3" - } - ], - "numberOfBytes": "128" - }, - "t_struct(GeneratorInfoPerMarket)6912_storage": { - "label": "struct IGeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)6891", - "offset": 0, - "slot": "0" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "maxParallelRequestsSupported", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "currentActiveRequest", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "1680d2d6b15c3ec4b32b1e1c5c5c80a82744037a2f529d0af1e8d00252beaf1e": { - "address": "0x0d0eC938A4A2709065F9c9215F1773A14c5CB3AE", - "txHash": "0x18c46c6ecfec9c985e3a727a213db8347781aa3918c0ce396a65954d346bc258", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "marketmetadata", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_bytes32,t_bytes_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:118" - }, - { - "label": "verifier", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_bytes32,t_address)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:119" - }, - { - "label": "minStakeToJoin", - "offset": 0, - "slot": "303", - "type": "t_mapping(t_bytes32,t_uint256)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:120" - }, - { - "label": "slashingPenalty", - "offset": 0, - "slot": "304", - "type": "t_mapping(t_bytes32,t_uint256)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:121" - }, - { - "label": "askCounter", - "offset": 0, - "slot": "305", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:123" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "306", - "type": "t_mapping(t_uint256,t_struct(AskWithState)7067_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:124" - }, - { - "label": "taskCounter", - "offset": 0, - "slot": "307", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:126" - }, - { - "label": "listOfTask", - "offset": 0, - "slot": "308", - "type": "t_mapping(t_uint256,t_struct(Task)7072_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:127" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_enum(AskState)7039": { - "label": "enum IProofMarketPlace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_address)": { - "label": "mapping(bytes32 => address)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bytes_storage)": { - "label": "mapping(bytes32 => bytes)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(AskWithState)7067_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.AskWithState)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(Task)7072_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.Task)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)7058_storage": { - "label": "struct IProofMarketPlace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_bytes32", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)7067_storage": { - "label": "struct IProofMarketPlace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)7058_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)7039", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - } - ], - "numberOfBytes": "256" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Task)7072_storage": { - "label": "struct IProofMarketPlace.Task", - "members": [ - { - "label": "askId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "f31129b9baa143b4978c028116f037c8a8a841f8308beb96a7b5d5a6eaeac774": { - "address": "0x8870BF2F4A7E408A86218F28dd284dA490b09BD3", - "txHash": "0x5d6d41bd5b5e58f6b45f18c9744e16f6a07a2226078cf50eba4c767854973327", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)3802_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_address,t_struct(Generator)5207_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:82" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_address,t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)5219_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:83" - }, - { - "label": "proofMarketPlace", - "offset": 0, - "slot": "303", - "type": "t_contract(IProofMarketPlace)5451", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:85" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IProofMarketPlace)5451": { - "label": "contract IProofMarketPlace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)5198": { - "label": "enum IGeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "LOW_STAKE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)5219_storage))": { - "label": "mapping(address => mapping(bytes32 => struct IGeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)5207_storage)": { - "label": "mapping(address => struct IGeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)3802_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)5219_storage)": { - "label": "mapping(bytes32 => struct IGeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)3802_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3487_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)5207_storage": { - "label": "struct IGeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "numberOfSupportedMarkets", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "3" - } - ], - "numberOfBytes": "128" - }, - "t_struct(GeneratorInfoPerMarket)5219_storage": { - "label": "struct IGeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)5198", - "offset": 0, - "slot": "0" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "maxParallelRequestsSupported", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "currentActiveRequest", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3487_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "5d1bea927c2465b3846e42b3bd4a7b8035206e7ccd3a182e298f77805a109460": { - "address": "0xC40E318c54550e6204041A228B18e71A79dC2E15", - "txHash": "0x8bd1bf3c8da2aaf6e8712d65044c954e3e037370989e9cf5fbb357e49b70cc8d", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "marketmetadata", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_bytes32,t_bytes_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:118" - }, - { - "label": "verifier", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_bytes32,t_address)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:119" - }, - { - "label": "minStakeToJoin", - "offset": 0, - "slot": "303", - "type": "t_mapping(t_bytes32,t_uint256)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:120" - }, - { - "label": "slashingPenalty", - "offset": 0, - "slot": "304", - "type": "t_mapping(t_bytes32,t_uint256)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:121" - }, - { - "label": "askCounter", - "offset": 0, - "slot": "305", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:123" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "306", - "type": "t_mapping(t_uint256,t_struct(AskWithState)7130_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:124" - }, - { - "label": "taskCounter", - "offset": 0, - "slot": "307", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:126" - }, - { - "label": "listOfTask", - "offset": 0, - "slot": "308", - "type": "t_mapping(t_uint256,t_struct(Task)7135_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:127" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_enum(AskState)7102": { - "label": "enum IProofMarketPlace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_address)": { - "label": "mapping(bytes32 => address)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bytes_storage)": { - "label": "mapping(bytes32 => bytes)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(AskWithState)7130_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.AskWithState)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(Task)7135_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.Task)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)7121_storage": { - "label": "struct IProofMarketPlace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_bytes32", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)7130_storage": { - "label": "struct IProofMarketPlace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)7121_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)7102", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - } - ], - "numberOfBytes": "256" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Task)7135_storage": { - "label": "struct IProofMarketPlace.Task", - "members": [ - { - "label": "askId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "a972e22e1c474bc1c51a3f2547eaca7f7ddd881b8572a426a773d3855da245cc": { - "address": "0xA06b7344F5009bdd4aCC019D5A1bFB09d296Be21", - "txHash": "0xc63705d6ccdea4db7cfa0ca729b0708be449206aef166b8d62ee496c7fffdb41", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_address,t_struct(Generator)6910_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:82" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_address,t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)6922_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:83" - }, - { - "label": "proofMarketPlace", - "offset": 0, - "slot": "303", - "type": "t_contract(IProofMarketPlace)7156", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:85" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IProofMarketPlace)7156": { - "label": "contract IProofMarketPlace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)6901": { - "label": "enum IGeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "LOW_STAKE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)6922_storage))": { - "label": "mapping(address => mapping(bytes32 => struct IGeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)6910_storage)": { - "label": "mapping(address => struct IGeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)6922_storage)": { - "label": "mapping(bytes32 => struct IGeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)6910_storage": { - "label": "struct IGeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "numberOfSupportedMarkets", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "3" - } - ], - "numberOfBytes": "128" - }, - "t_struct(GeneratorInfoPerMarket)6922_storage": { - "label": "struct IGeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)6901", - "offset": 0, - "slot": "0" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "maxParallelRequestsSupported", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "currentActiveRequest", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "a7acfbf51a29610e074b8b3b6fb5e5a87a7679c310222c0c44df99c037648edd": { - "address": "0xFF9ae8c2faB1aBC002613fBd68B0591eeE5f6a7E", - "txHash": "0x85bfc3a65d49e2c2bf1aeafcc8af3d9149f6da6e0bde6c61ea31bf581ffac7e5", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "marketmetadata", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_bytes32,t_bytes_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:118" - }, - { - "label": "verifier", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_bytes32,t_address)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:119" - }, - { - "label": "minStakeToJoin", - "offset": 0, - "slot": "303", - "type": "t_mapping(t_bytes32,t_uint256)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:120" - }, - { - "label": "slashingPenalty", - "offset": 0, - "slot": "304", - "type": "t_mapping(t_bytes32,t_uint256)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:121" - }, - { - "label": "askCounter", - "offset": 0, - "slot": "305", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:123" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "306", - "type": "t_mapping(t_uint256,t_struct(AskWithState)7061_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:124" - }, - { - "label": "taskCounter", - "offset": 0, - "slot": "307", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:126" - }, - { - "label": "listOfTask", - "offset": 0, - "slot": "308", - "type": "t_mapping(t_uint256,t_struct(Task)7066_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:127" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_enum(AskState)7033": { - "label": "enum IProofMarketPlace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_address)": { - "label": "mapping(bytes32 => address)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bytes_storage)": { - "label": "mapping(bytes32 => bytes)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(AskWithState)7061_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.AskWithState)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(Task)7066_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.Task)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)7052_storage": { - "label": "struct IProofMarketPlace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_bytes32", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)7061_storage": { - "label": "struct IProofMarketPlace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)7052_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)7033", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - } - ], - "numberOfBytes": "256" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Task)7066_storage": { - "label": "struct IProofMarketPlace.Task", - "members": [ - { - "label": "askId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "8656e08472be18f383b50378daefbf750e35e540c68fd929e0ce710a551d28b8": { - "address": "0x9C8842d1469B3ae170b275319106d06Eb2EcEf81", - "txHash": "0x85dc504b6f2594766e60b07bc01bac9d177d7d56cbc93cfc82f113b00af048a9", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_address,t_struct(Generator)7916_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:81" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_address,t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)7928_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:82" - }, - { - "label": "proofMarketPlace", - "offset": 0, - "slot": "303", - "type": "t_contract(IProofMarketPlace)8194", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:84" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IProofMarketPlace)8194": { - "label": "contract IProofMarketPlace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)7899": { - "label": "enum IGeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)7928_storage))": { - "label": "mapping(address => mapping(bytes32 => struct IGeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)7916_storage)": { - "label": "mapping(address => struct IGeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)7928_storage)": { - "label": "mapping(bytes32 => struct IGeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)7916_storage": { - "label": "struct IGeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "totalCompute", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketPlaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "7" - } - ], - "numberOfBytes": "256" - }, - "t_struct(GeneratorInfoPerMarket)7928_storage": { - "label": "struct IGeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)7899", - "offset": 0, - "slot": "0" - }, - { - "label": "computeAllocation", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "c5e10663b9670f83f6a22c9255c025024326fe7dfbb8720b013a3d8e901fcfc8": { - "address": "0xE9e5d4830a9126D9b2b9f60F0cA1d5Adbafda6EE", - "txHash": "0xd3ddb3f44127c6293e26479072d8f680f7b6e8f95d8254add6fdcf64c2e89299", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "marketmetadata", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_bytes32,t_bytes_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:114" - }, - { - "label": "verifier", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_bytes32,t_address)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:115" - }, - { - "label": "slashingPenalty", - "offset": 0, - "slot": "303", - "type": "t_mapping(t_bytes32,t_uint256)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:116" - }, - { - "label": "askCounter", - "offset": 0, - "slot": "304", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:118" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "305", - "type": "t_mapping(t_uint256,t_struct(AskWithState)6033_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:119" - }, - { - "label": "taskCounter", - "offset": 0, - "slot": "306", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:121" - }, - { - "label": "listOfTask", - "offset": 0, - "slot": "307", - "type": "t_mapping(t_uint256,t_struct(Task)6038_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:122" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_enum(AskState)6005": { - "label": "enum IProofMarketPlace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_address)": { - "label": "mapping(bytes32 => address)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bytes_storage)": { - "label": "mapping(bytes32 => bytes)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(AskWithState)6033_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.AskWithState)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(Task)6038_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.Task)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)6024_storage": { - "label": "struct IProofMarketPlace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_bytes32", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)6033_storage": { - "label": "struct IProofMarketPlace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)6024_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)6005", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - } - ], - "numberOfBytes": "256" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Task)6038_storage": { - "label": "struct IProofMarketPlace.Task", - "members": [ - { - "label": "askId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "2b0537cdeec865a927bac577d72d902584ca61709c07ddba92feed44e47ee69c": { - "address": "0x942F07fB02d5Ed0A8272873454c68AE4c2aa4FfE", - "txHash": "0x3467b8cfac9026a10271f47b91fefa7012ea85c4e4cad1298adda1790464344b", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "marketmetadata", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_bytes32,t_bytes_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:114" - }, - { - "label": "verifier", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_bytes32,t_address)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:115" - }, - { - "label": "slashingPenalty", - "offset": 0, - "slot": "303", - "type": "t_mapping(t_bytes32,t_uint256)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:116" - }, - { - "label": "askCounter", - "offset": 0, - "slot": "304", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:118" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "305", - "type": "t_mapping(t_uint256,t_struct(AskWithState)8108_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:119" - }, - { - "label": "taskCounter", - "offset": 0, - "slot": "306", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:121" - }, - { - "label": "listOfTask", - "offset": 0, - "slot": "307", - "type": "t_mapping(t_uint256,t_struct(Task)8113_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:122" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_enum(AskState)8080": { - "label": "enum IProofMarketPlace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_address)": { - "label": "mapping(bytes32 => address)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bytes_storage)": { - "label": "mapping(bytes32 => bytes)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(AskWithState)8108_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.AskWithState)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(Task)8113_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.Task)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)8099_storage": { - "label": "struct IProofMarketPlace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_bytes32", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)8108_storage": { - "label": "struct IProofMarketPlace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)8099_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)8080", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - } - ], - "numberOfBytes": "256" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Task)8113_storage": { - "label": "struct IProofMarketPlace.Task", - "members": [ - { - "label": "askId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "3d3422a25eaeece1f09f168cc88bf86b625beaf958c773fc3842b246cfd4f6ec": { - "address": "0x1A8BE5A61456e0BAC769bdC009f89CA21F12B664", - "txHash": "0x0ee4f042c502f262b6f56ca8c8512996a3dd523f782529ed8974f8a1b8b42bd5", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_address,t_struct(Generator)7916_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:81" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_address,t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)7928_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:82" - }, - { - "label": "proofMarketPlace", - "offset": 0, - "slot": "303", - "type": "t_contract(IProofMarketPlace)8194", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:84" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IProofMarketPlace)8194": { - "label": "contract IProofMarketPlace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)7899": { - "label": "enum IGeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)7928_storage))": { - "label": "mapping(address => mapping(bytes32 => struct IGeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)7916_storage)": { - "label": "mapping(address => struct IGeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)7928_storage)": { - "label": "mapping(bytes32 => struct IGeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)7916_storage": { - "label": "struct IGeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "totalCompute", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketPlaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "7" - } - ], - "numberOfBytes": "256" - }, - "t_struct(GeneratorInfoPerMarket)7928_storage": { - "label": "struct IGeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)7899", - "offset": 0, - "slot": "0" - }, - { - "label": "computeAllocation", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "6703ba2ca6f5b4972b59aba65b7d4bb8d0051226dd6f307155ea823697f7cfb8": { - "address": "0x2CaFAF95bdC5929639B3e7480Eb4cd41C0ddd4F2", - "txHash": "0x471489227ad0797f676686affbea8b7dc19655e56ba56da9c9226bf0eb3a651b", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "marketmetadata", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_bytes32,t_bytes_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:114" - }, - { - "label": "verifier", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_bytes32,t_address)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:115" - }, - { - "label": "slashingPenalty", - "offset": 0, - "slot": "303", - "type": "t_mapping(t_bytes32,t_uint256)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:116" - }, - { - "label": "askCounter", - "offset": 0, - "slot": "304", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:118" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "305", - "type": "t_mapping(t_uint256,t_struct(AskWithState)8108_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:119" - }, - { - "label": "taskCounter", - "offset": 0, - "slot": "306", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:121" - }, - { - "label": "listOfTask", - "offset": 0, - "slot": "307", - "type": "t_mapping(t_uint256,t_struct(Task)8113_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:122" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_enum(AskState)8080": { - "label": "enum IProofMarketPlace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_address)": { - "label": "mapping(bytes32 => address)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bytes_storage)": { - "label": "mapping(bytes32 => bytes)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(AskWithState)8108_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.AskWithState)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(Task)8113_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.Task)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)8099_storage": { - "label": "struct IProofMarketPlace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_bytes32", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)8108_storage": { - "label": "struct IProofMarketPlace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)8099_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)8080", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - } - ], - "numberOfBytes": "256" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Task)8113_storage": { - "label": "struct IProofMarketPlace.Task", - "members": [ - { - "label": "askId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "5c3e500bbe2b33683ce1eab0732f863a50287a66f338f6bc95823c9f708bb598": { - "address": "0x8b4e461fC0dF3342C5C6e2eE7Adb95BcA95030d9", - "txHash": "0xe6d7ada220de8e8fe6e368aa20e831026ec009dfaa3266b5eb4d7a291bd63267", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_address,t_struct(Generator)7916_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:81" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_address,t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)7928_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:82" - }, - { - "label": "proofMarketPlace", - "offset": 0, - "slot": "303", - "type": "t_contract(IProofMarketPlace)8194", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:84" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IProofMarketPlace)8194": { - "label": "contract IProofMarketPlace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)7899": { - "label": "enum IGeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)7928_storage))": { - "label": "mapping(address => mapping(bytes32 => struct IGeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)7916_storage)": { - "label": "mapping(address => struct IGeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)7928_storage)": { - "label": "mapping(bytes32 => struct IGeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)7916_storage": { - "label": "struct IGeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "totalCompute", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketPlaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "7" - } - ], - "numberOfBytes": "256" - }, - "t_struct(GeneratorInfoPerMarket)7928_storage": { - "label": "struct IGeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)7899", - "offset": 0, - "slot": "0" - }, - { - "label": "computeAllocation", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "bdf45c0b42779acabf15b0854796ca596b8b8a6a8a99b6349c094c89c5955a7c": { - "address": "0xc3BFa75f8980B0f919fe5621C2B40Ec8702E7440", - "txHash": "0xccccec750039f4b2283e0038a59c4ca3c2416810cfa01682223c30a97f229fa3", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "marketmetadata", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_bytes32,t_bytes_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:114" - }, - { - "label": "verifier", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_bytes32,t_address)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:115" - }, - { - "label": "slashingPenalty", - "offset": 0, - "slot": "303", - "type": "t_mapping(t_bytes32,t_uint256)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:116" - }, - { - "label": "askCounter", - "offset": 0, - "slot": "304", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:118" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "305", - "type": "t_mapping(t_uint256,t_struct(AskWithState)8108_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:119" - }, - { - "label": "taskCounter", - "offset": 0, - "slot": "306", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:121" - }, - { - "label": "listOfTask", - "offset": 0, - "slot": "307", - "type": "t_mapping(t_uint256,t_struct(Task)8113_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:122" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_enum(AskState)8080": { - "label": "enum IProofMarketPlace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_address)": { - "label": "mapping(bytes32 => address)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bytes_storage)": { - "label": "mapping(bytes32 => bytes)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(AskWithState)8108_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.AskWithState)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(Task)8113_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.Task)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)8099_storage": { - "label": "struct IProofMarketPlace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_bytes32", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)8108_storage": { - "label": "struct IProofMarketPlace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)8099_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)8080", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - } - ], - "numberOfBytes": "256" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Task)8113_storage": { - "label": "struct IProofMarketPlace.Task", - "members": [ - { - "label": "askId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "fc4e71fd4fa6fe5195e21b99d45cafc63725feab245bb6df418c931211c670ce": { - "address": "0x92423F606C703Cd986F2F11f0F006F8787090e4b", - "txHash": "0x588539cff4c00d3a0cc1fb4ca21cf397f0a170631d1e0534fe3a942ae062b877", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)3802_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_address,t_struct(Generator)5313_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:81" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_address,t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)5325_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:82" - }, - { - "label": "proofMarketPlace", - "offset": 0, - "slot": "303", - "type": "t_contract(IProofMarketPlace)5569", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:84" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IProofMarketPlace)5569": { - "label": "contract IProofMarketPlace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)5296": { - "label": "enum IGeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)5325_storage))": { - "label": "mapping(address => mapping(bytes32 => struct IGeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)5313_storage)": { - "label": "mapping(address => struct IGeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)3802_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(GeneratorInfoPerMarket)5325_storage)": { - "label": "mapping(bytes32 => struct IGeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)3802_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3487_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)5313_storage": { - "label": "struct IGeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "totalCompute", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketPlaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "7" - } - ], - "numberOfBytes": "256" - }, - "t_struct(GeneratorInfoPerMarket)5325_storage": { - "label": "struct IGeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)5296", - "offset": 0, - "slot": "0" - }, - { - "label": "computeAllocation", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3487_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "484bac75061f8755e626f36c91ea34fa0af585fcc759739b1373f2374d5df3b2": { - "address": "0xe31cC080fc15922e52716B73a83d11a2cc035bd5", - "txHash": "0x84d911ddf9b239ee83c66ba156cc994b02cefd670c1e742134d34a91b9a9c763", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "marketmetadata", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_bytes32,t_bytes_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:114" - }, - { - "label": "verifier", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_bytes32,t_address)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:115" - }, - { - "label": "slashingPenalty", - "offset": 0, - "slot": "303", - "type": "t_mapping(t_bytes32,t_uint256)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:116" - }, - { - "label": "askCounter", - "offset": 0, - "slot": "304", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:118" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "305", - "type": "t_mapping(t_uint256,t_struct(AskWithState)8108_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:119" - }, - { - "label": "taskCounter", - "offset": 0, - "slot": "306", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:121" - }, - { - "label": "listOfTask", - "offset": 0, - "slot": "307", - "type": "t_mapping(t_uint256,t_struct(Task)8113_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:122" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_enum(AskState)8080": { - "label": "enum IProofMarketPlace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_address)": { - "label": "mapping(bytes32 => address)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bytes_storage)": { - "label": "mapping(bytes32 => bytes)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(AskWithState)8108_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.AskWithState)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(Task)8113_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.Task)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)8099_storage": { - "label": "struct IProofMarketPlace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_bytes32", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)8108_storage": { - "label": "struct IProofMarketPlace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)8099_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)8080", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - } - ], - "numberOfBytes": "256" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Task)8113_storage": { - "label": "struct IProofMarketPlace.Task", - "members": [ - { - "label": "askId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "4482334d90f4aac735080034d3e6354c6e8954f46b698486fe297badfcc7ab8f": { - "address": "0x02581270290BD18B2E9DD160F6B3FaE111436077", - "txHash": "0x73b518174f5d4703f1ada3acaf64b8b3041afcc17c3c8a56d5b45f56d3846f4e", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "marketmetadata", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_bytes32,t_bytes_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:114" - }, - { - "label": "verifier", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_bytes32,t_address)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:115" - }, - { - "label": "slashingPenalty", - "offset": 0, - "slot": "303", - "type": "t_mapping(t_bytes32,t_uint256)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:116" - }, - { - "label": "askCounter", - "offset": 0, - "slot": "304", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:118" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "305", - "type": "t_mapping(t_uint256,t_struct(AskWithState)7324_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:119" - }, - { - "label": "taskCounter", - "offset": 0, - "slot": "306", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:121" - }, - { - "label": "listOfTask", - "offset": 0, - "slot": "307", - "type": "t_mapping(t_uint256,t_struct(Task)7329_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:122" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_enum(AskState)7296": { - "label": "enum IProofMarketPlace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_address)": { - "label": "mapping(bytes32 => address)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bytes_storage)": { - "label": "mapping(bytes32 => bytes)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(AskWithState)7324_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.AskWithState)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(Task)7329_storage)": { - "label": "mapping(uint256 => struct IProofMarketPlace.Task)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)7315_storage": { - "label": "struct IProofMarketPlace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_bytes32", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)7324_storage": { - "label": "struct IProofMarketPlace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)7315_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)7296", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - } - ], - "numberOfBytes": "256" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Task)7329_storage": { - "label": "struct IProofMarketPlace.Task", - "members": [ - { - "label": "askId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "1b66d8f588f39463775467cf8415f92ceb2f569700a534d1cc9c6bd4e185aa94": { - "address": "0xBf7E73fE87df9E45474635176fd76521A1FA7B48", - "txHash": "0xecac5b231b41f17bf95bfe529daef9371a28469568e03046a2d5aee60eac4622", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_address,t_struct(Generator)4774_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:86" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4786_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:87" - }, - { - "label": "proofMarketPlace", - "offset": 0, - "slot": "303", - "type": "t_contract(ProofMarketPlace)8100", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:89" - }, - { - "label": "__gap_0", - "offset": 0, - "slot": "304", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:92" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketPlace)8100": { - "label": "contract ProofMarketPlace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)4753": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4786_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)4774_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4786_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)4774_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketPlaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)4786_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)4753", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "fe44dee78940b94653a32c23e390787c2db480a96a2da18b091f204bdc4025c4": { - "address": "0x2694C0DBADf66a1E9994D52873Ce54c25B9d13Ab", - "txHash": "0xf881074ea5532158cfa4adc8e56ad56607c0641f37381fbb621e2becf32d0e56", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "marketCounter", - "offset": 0, - "slot": "301", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:121" - }, - { - "label": "marketData", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_uint256,t_struct(Market)6649_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:122" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "303", - "type": "t_array(t_struct(AskWithState)6686_storage)dyn_storage", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:124" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "304", - "type": "t_mapping(t_enum(SecretType)6660,t_uint256)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:126" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(AskWithState)6686_storage)dyn_storage": { - "label": "struct ProofMarketPlace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_enum(AskState)6656": { - "label": "enum ProofMarketPlace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)6660": { - "label": "enum ProofMarketPlace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)6660,t_uint256)": { - "label": "mapping(enum ProofMarketPlace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(Market)6649_storage)": { - "label": "mapping(uint256 => struct ProofMarketPlace.Market)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)6675_storage": { - "label": "struct ProofMarketPlace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)6686_storage": { - "label": "struct ProofMarketPlace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)6675_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)6656", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)6649_storage": { - "label": "struct ProofMarketPlace.Market", - "members": [ - { - "label": "verifier", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "isEnclaveRequired", - "type": "t_bool", - "offset": 20, - "slot": "0" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "ivsSigner", - "type": "t_address", - "offset": 0, - "slot": "3" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "69303ce26d408cea8d9b34a1a31eaaa93bf159d18ef1a697c55225c075b2cfdf": { - "address": "0xE37d06DF11133B4726673e2E43Ff0406ABf19E0E", - "txHash": "0x66fa5aabad2d1b36052cea8d566b9ae3c4fa168e78ad09fd903f21bd23f60647", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_address,t_struct(Generator)4774_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:86" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4786_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:87" - }, - { - "label": "proofMarketPlace", - "offset": 0, - "slot": "303", - "type": "t_contract(ProofMarketPlace)8099", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:89" - }, - { - "label": "__gap_0", - "offset": 0, - "slot": "304", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:92" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketPlace)8099": { - "label": "contract ProofMarketPlace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)4753": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4786_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)4774_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4786_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)4774_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketPlaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)4786_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)4753", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "a77a632be59d8bcea38f1cfb2c605d49a8afbe0c231c0c0ebe16dea967a874db": { - "address": "0x4c7629c0807d64C32B4768Dfa5adcf9CCfE5934d", - "txHash": "0x717ed01d09128cd5d6e2e45e3d2cac4ed82b652bf1b9dadc046b46d2ee37d6c0", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "marketCounter", - "offset": 0, - "slot": "301", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:121" - }, - { - "label": "marketData", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_uint256,t_struct(Market)6648_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:122" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "303", - "type": "t_array(t_struct(AskWithState)6685_storage)dyn_storage", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:124" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "304", - "type": "t_mapping(t_enum(SecretType)6659,t_uint256)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:126" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(AskWithState)6685_storage)dyn_storage": { - "label": "struct ProofMarketPlace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_enum(AskState)6655": { - "label": "enum ProofMarketPlace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)6659": { - "label": "enum ProofMarketPlace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)6659,t_uint256)": { - "label": "mapping(enum ProofMarketPlace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(Market)6648_storage)": { - "label": "mapping(uint256 => struct ProofMarketPlace.Market)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)6674_storage": { - "label": "struct ProofMarketPlace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)6685_storage": { - "label": "struct ProofMarketPlace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)6674_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)6655", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)6648_storage": { - "label": "struct ProofMarketPlace.Market", - "members": [ - { - "label": "verifier", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "isEnclaveRequired", - "type": "t_bool", - "offset": 20, - "slot": "0" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "ivsSigner", - "type": "t_address", - "offset": 0, - "slot": "3" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "5478c4fa272c88f9b997731972915e2b12812334ae5c1360f58f009f69c18495": { - "address": "0x64dAEbAE64cB368fA3518fB72007F846788f7C6b", - "txHash": "0x836912da088928fceb8ce8c7b383ea7fc53879ea3f188f6e38ad6b8718da44bc", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_address,t_struct(Generator)4774_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:86" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4786_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:87" - }, - { - "label": "proofMarketPlace", - "offset": 0, - "slot": "303", - "type": "t_contract(ProofMarketPlace)8109", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:89" - }, - { - "label": "__gap_0", - "offset": 0, - "slot": "304", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:92" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketPlace)8109": { - "label": "contract ProofMarketPlace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)4753": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4786_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)4774_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4786_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)4774_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketPlaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)4786_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)4753", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "e2e12ad2ac7645cd455e14a502133345512ed351a082c3080cc7d439c80e12d8": { - "address": "0xF5C9CAd34d802dE100d3919dD16da7696b789546", - "txHash": "0xb92b51cfbcd18583c184dadac427c06f3e92bfd1ece5b746dd1821062ec4513f", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "marketCounter", - "offset": 0, - "slot": "301", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:121" - }, - { - "label": "marketData", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_uint256,t_struct(Market)6650_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:122" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "303", - "type": "t_array(t_struct(AskWithState)6687_storage)dyn_storage", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:124" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "304", - "type": "t_mapping(t_enum(SecretType)6661,t_uint256)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:126" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(AskWithState)6687_storage)dyn_storage": { - "label": "struct ProofMarketPlace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_enum(AskState)6657": { - "label": "enum ProofMarketPlace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)6661": { - "label": "enum ProofMarketPlace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)6661,t_uint256)": { - "label": "mapping(enum ProofMarketPlace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(Market)6650_storage)": { - "label": "mapping(uint256 => struct ProofMarketPlace.Market)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)6676_storage": { - "label": "struct ProofMarketPlace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)6687_storage": { - "label": "struct ProofMarketPlace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)6676_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)6657", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)6650_storage": { - "label": "struct ProofMarketPlace.Market", - "members": [ - { - "label": "verifier", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "isEnclaveRequired", - "type": "t_bool", - "offset": 20, - "slot": "0" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "ivsSigner", - "type": "t_address", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsUrl", - "type": "t_bytes_storage", - "offset": 0, - "slot": "4" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "5" - } - ], - "numberOfBytes": "192" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "e8fb4b9a3b76158eb9fc7bc4d6feead65968b13869c18d3123c7a0eb56db1198": { - "address": "0x203Bc63a2a983983564646Daa1a2C56fF239aF64", - "txHash": "0x3220e623d1c62c79cc0ef23c0cfb46045c8c67f96fb745ec5776a69408612555", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "__gap_0", - "offset": 0, - "slot": "301", - "type": "t_array(t_uint256)500_storage", - "contract": "AttestationVerifier", - "src": "contracts/AttestationVerifier.sol:25" - }, - { - "label": "whitelistedImages", - "offset": 0, - "slot": "801", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)4676_storage)", - "contract": "AttestationVerifier", - "src": "contracts/AttestationVerifier.sol:112" - }, - { - "label": "isVerified", - "offset": 0, - "slot": "802", - "type": "t_mapping(t_address,t_bytes32)", - "contract": "AttestationVerifier", - "src": "contracts/AttestationVerifier.sol:113" - }, - { - "label": "__gap_1", - "offset": 0, - "slot": "803", - "type": "t_array(t_uint256)48_storage", - "contract": "AttestationVerifier", - "src": "contracts/AttestationVerifier.sol:115" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)48_storage": { - "label": "uint256[48]", - "numberOfBytes": "1536" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)4676_storage)": { - "label": "mapping(bytes32 => struct AttestationVerifier.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(EnclaveImage)4676_storage": { - "label": "struct AttestationVerifier.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "15c7c5ef473c22dc33282bdb5899b9d2432add54c31bd7ea014ea5d9678301e8": { - "address": "0x4B3992Dcec53d11266bf1B1F1Df78C2b001f533b", - "txHash": "0x0e10b1c4e134bef140c0c0ba95a237760b493c3d78e5416fd75bae663dac751a", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_address,t_struct(Generator)4850_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:86" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4862_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:87" - }, - { - "label": "proofMarketPlace", - "offset": 0, - "slot": "303", - "type": "t_contract(ProofMarketPlace)8281", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:89" - }, - { - "label": "__gap_0", - "offset": 0, - "slot": "304", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:92" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketPlace)8281": { - "label": "contract ProofMarketPlace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)4829": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4862_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)4850_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4862_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)4850_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketPlaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)4862_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)4829", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "9238fe605e55bf94a5d4441dcd1ea40093921f967453e3b63c011ab8cf3a60ef": { - "address": "0x57105a98FE650E0607cBb1AbA013E16E97dAC484", - "txHash": "0xab8d67be91c00d556bc7a1399ae9cce83ecaea3c3d525adfdace9ef7546a109e", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "marketCounter", - "offset": 0, - "slot": "301", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:119" - }, - { - "label": "marketData", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_uint256,t_struct(Market)6807_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:120" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "303", - "type": "t_array(t_struct(AskWithState)6844_storage)dyn_storage", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:122" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "304", - "type": "t_mapping(t_enum(SecretType)6818,t_uint256)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:124" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(AskWithState)6844_storage)dyn_storage": { - "label": "struct ProofMarketPlace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_enum(AskState)6814": { - "label": "enum ProofMarketPlace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)6818": { - "label": "enum ProofMarketPlace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)6818,t_uint256)": { - "label": "mapping(enum ProofMarketPlace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(Market)6807_storage)": { - "label": "mapping(uint256 => struct ProofMarketPlace.Market)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)6833_storage": { - "label": "struct ProofMarketPlace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)6844_storage": { - "label": "struct ProofMarketPlace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)6833_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)6814", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)6807_storage": { - "label": "struct ProofMarketPlace.Market", - "members": [ - { - "label": "verifier", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "isEnclaveRequired", - "type": "t_bool", - "offset": 20, - "slot": "0" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "ivsSigner", - "type": "t_address", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsUrl", - "type": "t_bytes_storage", - "offset": 0, - "slot": "4" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "5" - } - ], - "numberOfBytes": "192" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "d96863d6c60b8a855fa12de833a080eaf6a3bb5534ed226f3d9800ed014fbab8": { - "address": "0x2c8D4b7f0a64041E735B0D31c6DF201Ab5BFc87E", - "txHash": "0x2b2159bc8aeb8f13f89aa2660d8d8944da34acd232fb32fe8ff85387d3434436", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_address,t_struct(Generator)4861_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:86" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4873_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:87" - }, - { - "label": "proofMarketPlace", - "offset": 0, - "slot": "303", - "type": "t_contract(ProofMarketPlace)8274", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:89" - }, - { - "label": "__gap_0", - "offset": 0, - "slot": "304", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:92" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketPlace)8274": { - "label": "contract ProofMarketPlace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)4840": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4873_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)4861_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4873_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)4861_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketPlaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)4873_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)4840", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "ecd54dad4c0d21305346fd7a98a4e954bbccffdcc85367460c6efe5289eb5fb1": { - "address": "0x4BcF2e4618772B2b2E744816888789dC84B44bAe", - "txHash": "0x9d7782b3613a26389694ab8ec9ceef6f4c300675dbe4b241fd5d6f8cbacf1240", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "marketCounter", - "offset": 0, - "slot": "301", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:114" - }, - { - "label": "marketData", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_uint256,t_struct(Market)6800_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:115" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "303", - "type": "t_array(t_struct(AskWithState)6837_storage)dyn_storage", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:117" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "304", - "type": "t_mapping(t_enum(SecretType)6811,t_uint256)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:119" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(AskWithState)6837_storage)dyn_storage": { - "label": "struct ProofMarketPlace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_enum(AskState)6807": { - "label": "enum ProofMarketPlace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)6811": { - "label": "enum ProofMarketPlace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)6811,t_uint256)": { - "label": "mapping(enum ProofMarketPlace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(Market)6800_storage)": { - "label": "mapping(uint256 => struct ProofMarketPlace.Market)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)6826_storage": { - "label": "struct ProofMarketPlace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)6837_storage": { - "label": "struct ProofMarketPlace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)6826_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)6807", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)6800_storage": { - "label": "struct ProofMarketPlace.Market", - "members": [ - { - "label": "verifier", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "isEnclaveRequired", - "type": "t_bool", - "offset": 20, - "slot": "0" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "ivsSigner", - "type": "t_address", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsUrl", - "type": "t_bytes_storage", - "offset": 0, - "slot": "4" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "5" - } - ], - "numberOfBytes": "192" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "6fff8b1079de53c5aeaabb91bd03eec11e7edefc7247034e13eae30a3914e28a": { - "address": "0xD06FA8eD691088f348DFf8Af3A3Bf57D19F613c7", - "txHash": "0x13f35e8faf2bd66ad131f0bbe2271e3bbfffb5fa3cec2e3305014620426c678a", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_address,t_struct(Generator)6398_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:86" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)6410_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:87" - }, - { - "label": "proofMarketPlace", - "offset": 0, - "slot": "303", - "type": "t_contract(ProofMarketPlace)9937", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:89" - }, - { - "label": "__gap_0", - "offset": 0, - "slot": "304", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:92" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketPlace)9937": { - "label": "contract ProofMarketPlace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)6377": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)6410_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)6398_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)6410_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)6398_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketPlaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)6410_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)6377", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "1b67cb99361bb646d3d526c01594ea449f2a26d64c87311cb02e65d5344dfeca": { - "address": "0x68e6c5E8E5B7E7158ed3cb1e2E04EdFF2815066f", - "txHash": "0x3923ad5b3f24224ddd89f589ff554be0915cef7cf8a93ea7e9a1d9985e81028f", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "marketCounter", - "offset": 0, - "slot": "301", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:114" - }, - { - "label": "marketData", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_uint256,t_struct(Market)8463_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:115" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "303", - "type": "t_array(t_struct(AskWithState)8500_storage)dyn_storage", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:117" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "304", - "type": "t_mapping(t_enum(SecretType)8474,t_uint256)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:119" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(AskWithState)8500_storage)dyn_storage": { - "label": "struct ProofMarketPlace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_enum(AskState)8470": { - "label": "enum ProofMarketPlace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)8474": { - "label": "enum ProofMarketPlace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)8474,t_uint256)": { - "label": "mapping(enum ProofMarketPlace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(Market)8463_storage)": { - "label": "mapping(uint256 => struct ProofMarketPlace.Market)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)8489_storage": { - "label": "struct ProofMarketPlace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)8500_storage": { - "label": "struct ProofMarketPlace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)8489_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)8470", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)8463_storage": { - "label": "struct ProofMarketPlace.Market", - "members": [ - { - "label": "verifier", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "isEnclaveRequired", - "type": "t_bool", - "offset": 20, - "slot": "0" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "ivsSigner", - "type": "t_address", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsUrl", - "type": "t_bytes_storage", - "offset": 0, - "slot": "4" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "5" - } - ], - "numberOfBytes": "192" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "087134156d60b4070c0169d725f0473bed363c486de8ea8437fb87d0d41bdebb": { - "address": "0xbF6F34B3AFB7a763a73295Cf2558ab9413ad7892", - "txHash": "0x0d93e342f0bf0dd832b1a28931927f46d9c1d956340371b7a20d457d0f5da030", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "301", - "type": "t_mapping(t_address,t_struct(Generator)4822_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:86" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4834_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:87" - }, - { - "label": "proofMarketPlace", - "offset": 0, - "slot": "303", - "type": "t_contract(ProofMarketPlace)8408", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:89" - }, - { - "label": "__gap_0", - "offset": 0, - "slot": "304", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:92" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketPlace)8408": { - "label": "contract ProofMarketPlace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)4801": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4834_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)4822_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4834_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)4822_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketPlaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)4834_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)4801", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "4df09304e56ac963a659f2d78171b3ace105dbc161b274eed507f1f54f9566a7": { - "address": "0xb5b3960f8654Cf09AFE284155ED415942bF5BB3a", - "txHash": "0x9f884e264d95948edf104a3f8858146b8e73be8104b8f912d3ccc16457191d51", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "marketCounter", - "offset": 0, - "slot": "301", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:122" - }, - { - "label": "marketData", - "offset": 0, - "slot": "302", - "type": "t_mapping(t_uint256,t_struct(Market)6862_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:123" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "303", - "type": "t_array(t_struct(AskWithState)6899_storage)dyn_storage", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:125" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "304", - "type": "t_mapping(t_enum(SecretType)6873,t_uint256)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:127" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(AskWithState)6899_storage)dyn_storage": { - "label": "struct ProofMarketPlace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_enum(AskState)6869": { - "label": "enum ProofMarketPlace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)6873": { - "label": "enum ProofMarketPlace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4168_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)6873,t_uint256)": { - "label": "mapping(enum ProofMarketPlace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(Market)6862_storage)": { - "label": "mapping(uint256 => struct ProofMarketPlace.Market)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4168_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3853_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)6888_storage": { - "label": "struct ProofMarketPlace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)6899_storage": { - "label": "struct ProofMarketPlace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)6888_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)6869", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)6862_storage": { - "label": "struct ProofMarketPlace.Market", - "members": [ - { - "label": "verifier", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "isEnclaveRequired", - "type": "t_bool", - "offset": 20, - "slot": "0" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "ivsSigner", - "type": "t_address", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsUrl", - "type": "t_bytes_storage", - "offset": 0, - "slot": "4" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "5" - } - ], - "numberOfBytes": "192" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3853_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "4868df3335539f778055536e1c78ddb1fce7eacb014b5f33aa2a8f806441309e": { - "address": "0x4156887325937427b4d26466B603DA50F7cde682", - "txHash": "0x09bbd3ff9f341b1cf333b448f4511a6921e5ecc12565385d7d3cb9dda317362a", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4252_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "_status", - "offset": 0, - "slot": "301", - "type": "t_uint256", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" - }, - { - "label": "__gap", - "offset": 0, - "slot": "302", - "type": "t_array(t_uint256)49_storage", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "351", - "type": "t_mapping(t_address,t_struct(Generator)7151_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:86" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "352", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)7163_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:87" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "353", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:89" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "354", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:90" - }, - { - "label": "proofMarketPlace", - "offset": 0, - "slot": "355", - "type": "t_contract(ProofMarketPlace)11087", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:92" - }, - { - "label": "__gap_0", - "offset": 0, - "slot": "356", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:95" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketPlace)11087": { - "label": "contract ProofMarketPlace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)7130": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)7163_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)7151_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4252_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)7163_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4252_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3937_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)7151_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketPlaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)7163_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)7130", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3937_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "64c997179ee22fd3df2ff406937b33188ab188c6056b156c3968916fa9f69ca6": { - "address": "0xa0e5735bAb9DdD31b167852384F3D8824431D8Cf", - "txHash": "0xbf696ffe3aa7f5db64b3e891d760896c07c967e4a78b0a5e0939b2fb12f6f9ba", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4252_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "_status", - "offset": 0, - "slot": "301", - "type": "t_uint256", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" - }, - { - "label": "__gap", - "offset": 0, - "slot": "302", - "type": "t_array(t_uint256)49_storage", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" - }, - { - "label": "dispute", - "offset": 0, - "slot": "351", - "type": "t_contract(Dispute)6746", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:116" - }, - { - "label": "marketCounter", - "offset": 0, - "slot": "352", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:123" - }, - { - "label": "marketData", - "offset": 0, - "slot": "353", - "type": "t_mapping(t_uint256,t_struct(Market)9449_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:124" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "354", - "type": "t_array(t_struct(AskWithState)9486_storage)dyn_storage", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:126" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "355", - "type": "t_mapping(t_enum(SecretType)9460,t_uint256)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:128" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(AskWithState)9486_storage)dyn_storage": { - "label": "struct ProofMarketPlace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(Dispute)6746": { - "label": "contract Dispute", - "numberOfBytes": "20" - }, - "t_enum(AskState)9456": { - "label": "enum ProofMarketPlace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)9460": { - "label": "enum ProofMarketPlace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4252_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)9460,t_uint256)": { - "label": "mapping(enum ProofMarketPlace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(Market)9449_storage)": { - "label": "mapping(uint256 => struct ProofMarketPlace.Market)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4252_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3937_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)9475_storage": { - "label": "struct ProofMarketPlace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)9486_storage": { - "label": "struct ProofMarketPlace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)9475_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)9456", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)9449_storage": { - "label": "struct ProofMarketPlace.Market", - "members": [ - { - "label": "verifier", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsSigner", - "type": "t_address", - "offset": 0, - "slot": "4" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "5" - }, - { - "label": "ivsUrl", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "7" - } - ], - "numberOfBytes": "256" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3937_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "6b674afc32043bbecdda0cb8ef9a56e60e399efffa5497de839d46ec53ae6f0b": { - "address": "0xD5Df063ABbd57A1C378A89FB2b978745EE15c002", - "txHash": "0x46ca2f223797af3c4a7230254ba4b5f3d7b166060a38b2d5e12a56104d331f31", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4252_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "__gap_0", - "offset": 0, - "slot": "301", - "type": "t_array(t_uint256)500_storage", - "contract": "AttestationVerifier", - "src": "contracts/periphery/AttestationVerifier.sol:25" - }, - { - "label": "whitelistedImages", - "offset": 0, - "slot": "801", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)12640_storage)", - "contract": "AttestationVerifier", - "src": "contracts/periphery/AttestationVerifier.sol:115" - }, - { - "label": "isVerified", - "offset": 0, - "slot": "802", - "type": "t_mapping(t_address,t_bytes32)", - "contract": "AttestationVerifier", - "src": "contracts/periphery/AttestationVerifier.sol:117" - }, - { - "label": "__gap_1", - "offset": 0, - "slot": "803", - "type": "t_array(t_uint256)48_storage", - "contract": "AttestationVerifier", - "src": "contracts/periphery/AttestationVerifier.sol:119" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)48_storage": { - "label": "uint256[48]", - "numberOfBytes": "1536" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4252_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)12640_storage)": { - "label": "mapping(bytes32 => struct AttestationVerifier.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4252_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3937_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(EnclaveImage)12640_storage": { - "label": "struct AttestationVerifier.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3937_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "752b196185ba2b7f11b63879646f97624e779dd2c40826f651278c42d50f1a26": { - "address": "0xae7B5095D6e5Ce1dD1Df37F3cE589De6f6270100", - "txHash": "0x55131a35108ef9d2361c58d48a5d4ac946685d80b312c0ce8545f0e3ff3dc67c", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4252_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "_status", - "offset": 0, - "slot": "301", - "type": "t_uint256", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" - }, - { - "label": "__gap", - "offset": 0, - "slot": "302", - "type": "t_array(t_uint256)49_storage", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "351", - "type": "t_mapping(t_address,t_struct(Generator)7199_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:86" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "352", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)7211_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:87" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "353", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:89" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "354", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:90" - }, - { - "label": "proofMarketPlace", - "offset": 0, - "slot": "355", - "type": "t_contract(ProofMarketPlace)11145", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:92" - }, - { - "label": "__gap_0", - "offset": 0, - "slot": "356", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:95" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketPlace)11145": { - "label": "contract ProofMarketPlace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)7178": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)7211_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)7199_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4252_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)7211_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4252_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3937_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)7199_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketPlaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)7211_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)7178", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3937_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "34929a820a18882b3fa439fbcedf61589cc8737df8f4abb83e34205534f646b3": { - "address": "0x156C5CEB89faaa7fe850c6EEe857005d70E66a13", - "txHash": "0x8ba09103dc1453990a62c72f2c51c0afeebfd3f7fdce5a04a713c11535d4ae4f", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4252_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "_status", - "offset": 0, - "slot": "301", - "type": "t_uint256", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" - }, - { - "label": "__gap", - "offset": 0, - "slot": "302", - "type": "t_array(t_uint256)49_storage", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" - }, - { - "label": "dispute", - "offset": 0, - "slot": "351", - "type": "t_contract(Dispute)6782", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:120" - }, - { - "label": "marketCounter", - "offset": 0, - "slot": "352", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:127" - }, - { - "label": "marketData", - "offset": 0, - "slot": "353", - "type": "t_mapping(t_uint256,t_struct(Market)9544_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:128" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "354", - "type": "t_array(t_struct(AskWithState)9581_storage)dyn_storage", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:130" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "355", - "type": "t_mapping(t_enum(SecretType)9555,t_uint256)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:132" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(AskWithState)9581_storage)dyn_storage": { - "label": "struct ProofMarketPlace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(Dispute)6782": { - "label": "contract Dispute", - "numberOfBytes": "20" - }, - "t_enum(AskState)9551": { - "label": "enum ProofMarketPlace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)9555": { - "label": "enum ProofMarketPlace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4252_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)9555,t_uint256)": { - "label": "mapping(enum ProofMarketPlace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(Market)9544_storage)": { - "label": "mapping(uint256 => struct ProofMarketPlace.Market)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4252_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3937_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)9570_storage": { - "label": "struct ProofMarketPlace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)9581_storage": { - "label": "struct ProofMarketPlace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)9570_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)9551", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)9544_storage": { - "label": "struct ProofMarketPlace.Market", - "members": [ - { - "label": "verifier", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsSigner", - "type": "t_address", - "offset": 0, - "slot": "4" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "5" - }, - { - "label": "ivsUrl", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "7" - } - ], - "numberOfBytes": "256" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3937_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "834b566327cf280724913f97b60a13c99057f073924ee182e762c393b2b0c1f0": { - "address": "0x485676D4f408C455b6C2e5e878A4bcFD9d0d1639", - "txHash": "0x2e83417edd0e576e5d958292dbd7a14ea6bf47efac6e20145a45fa282f6cfa85", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4252_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "_status", - "offset": 0, - "slot": "301", - "type": "t_uint256", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" - }, - { - "label": "__gap", - "offset": 0, - "slot": "302", - "type": "t_array(t_uint256)49_storage", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "351", - "type": "t_mapping(t_address,t_struct(Generator)7199_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:86" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "352", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)7211_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:87" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "353", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:89" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "354", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:90" - }, - { - "label": "proofMarketPlace", - "offset": 0, - "slot": "355", - "type": "t_contract(ProofMarketPlace)11145", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:92" - }, - { - "label": "__gap_0", - "offset": 0, - "slot": "356", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:95" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketPlace)11145": { - "label": "contract ProofMarketPlace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)7178": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)7211_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)7199_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4252_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)7211_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4252_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3937_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)7199_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketPlaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)7211_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)7178", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3937_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "10eff690410dae15649c43b094c79e0afd48d9f6b95cd165d03c7ab6cb44d8d0": { - "address": "0x03f846700854Fc40e36437ef356A3EdEbF3C42e1", - "txHash": "0x104816137fababd4b2ff57d80eacabd98579a20a4e17ded1038f32a9836adc1a", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4252_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "_status", - "offset": 0, - "slot": "301", - "type": "t_uint256", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" - }, - { - "label": "__gap", - "offset": 0, - "slot": "302", - "type": "t_array(t_uint256)49_storage", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" - }, - { - "label": "dispute", - "offset": 0, - "slot": "351", - "type": "t_contract(Dispute)6782", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:120" - }, - { - "label": "marketCounter", - "offset": 0, - "slot": "352", - "type": "t_uint256", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:127" - }, - { - "label": "marketData", - "offset": 0, - "slot": "353", - "type": "t_mapping(t_uint256,t_struct(Market)9544_storage)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:128" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "354", - "type": "t_array(t_struct(AskWithState)9581_storage)dyn_storage", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:130" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "355", - "type": "t_mapping(t_enum(SecretType)9555,t_uint256)", - "contract": "ProofMarketPlace", - "src": "contracts/ProofMarketPlace.sol:132" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(AskWithState)9581_storage)dyn_storage": { - "label": "struct ProofMarketPlace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(Dispute)6782": { - "label": "contract Dispute", - "numberOfBytes": "20" - }, - "t_enum(AskState)9551": { - "label": "enum ProofMarketPlace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)9555": { - "label": "enum ProofMarketPlace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4252_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)9555,t_uint256)": { - "label": "mapping(enum ProofMarketPlace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(Market)9544_storage)": { - "label": "mapping(uint256 => struct ProofMarketPlace.Market)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4252_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)3937_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)9570_storage": { - "label": "struct ProofMarketPlace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)9581_storage": { - "label": "struct ProofMarketPlace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)9570_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)9551", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)9544_storage": { - "label": "struct ProofMarketPlace.Market", - "members": [ - { - "label": "verifier", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsSigner", - "type": "t_address", - "offset": 0, - "slot": "4" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "5" - }, - { - "label": "ivsUrl", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "7" - } - ], - "numberOfBytes": "256" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)3937_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "b428b2a46b9d0f17fa5d6523e5d154e53c09fc23b07854cd2374cbb57b5f2bb8": { - "address": "0x45A0Cf5c7D91F72fa662fF1b5f6B949067cf2412", - "txHash": "0xc4f61f4431f0fbc04148e97120755f66df7c447849581669473d70127cb54462", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "__gap_0", - "offset": 0, - "slot": "301", - "type": "t_array(t_uint256)500_storage", - "contract": "AttestationVerifier", - "src": "contracts/periphery/AttestationVerifier.sol:25" - }, - { - "label": "whitelistedImages", - "offset": 0, - "slot": "801", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)13357_storage)", - "contract": "AttestationVerifier", - "src": "contracts/periphery/AttestationVerifier.sol:115" - }, - { - "label": "isVerified", - "offset": 0, - "slot": "802", - "type": "t_mapping(t_address,t_bytes32)", - "contract": "AttestationVerifier", - "src": "contracts/periphery/AttestationVerifier.sol:117" - }, - { - "label": "__gap_1", - "offset": 0, - "slot": "803", - "type": "t_array(t_uint256)48_storage", - "contract": "AttestationVerifier", - "src": "contracts/periphery/AttestationVerifier.sol:119" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)48_storage": { - "label": "uint256[48]", - "numberOfBytes": "1536" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)13357_storage)": { - "label": "mapping(bytes32 => struct AttestationVerifier.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4379_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)4064_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(EnclaveImage)13357_storage": { - "label": "struct AttestationVerifier.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)4064_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "6605dc5ab22577c2198ebf0719d4c219d4527cb8584a7c3354cd1a6d14fbe1be": { - "address": "0xD90a7bf5FB385A8Ae76CFFEeCDA71f8ceC3aC36B", - "txHash": "0xfb23540abc3b24e6bf14844b546a59b1b80f2a66530af5a193e12435821197c0", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "_status", - "offset": 0, - "slot": "301", - "type": "t_uint256", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" - }, - { - "label": "__gap", - "offset": 0, - "slot": "302", - "type": "t_array(t_uint256)49_storage", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" - }, - { - "label": "whitelistedImages", - "offset": 0, - "slot": "351", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)12624_storage)", - "contract": "AttestationAutherUpgradeable", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:35" - }, - { - "label": "verifiedKeys", - "offset": 0, - "slot": "352", - "type": "t_mapping(t_address,t_bytes32)", - "contract": "AttestationAutherUpgradeable", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "353", - "type": "t_array(t_uint256)48_storage", - "contract": "AttestationAutherUpgradeable", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:38" - }, - { - "label": "__gap_0", - "offset": 0, - "slot": "401", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:32" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "901", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:77" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "902", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:178" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)48_storage": { - "label": "uint256[48]", - "numberOfBytes": "1536" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)12624_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4379_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)4064_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(EnclaveImage)12624_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)4064_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "ccaaff5e25839f0ebdd275d17076470347a7eebae8179812fe8189269b7b5afa": { - "address": "0xA8E2149B6eee3996FbDaF65C7198701354d803B7", - "txHash": "0xbc8f2b14fb9a032c43f9272139ca9f0f8ace96e62793c6bc14d0fe4bc5d25e84", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "_status", - "offset": 0, - "slot": "301", - "type": "t_uint256", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" - }, - { - "label": "__gap", - "offset": 0, - "slot": "302", - "type": "t_array(t_uint256)49_storage", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" - }, - { - "label": "__gap_0", - "offset": 0, - "slot": "351", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:31" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "851", - "type": "t_mapping(t_address,t_struct(Generator)7603_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:96" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "852", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)7615_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:97" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "853", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:99" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "854", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:100" - }, - { - "label": "proofMarketplace", - "offset": 0, - "slot": "855", - "type": "t_contract(ProofMarketplace)11480", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:102" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "856", - "type": "t_array(t_uint256)50_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:756" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketplace)11480": { - "label": "contract ProofMarketplace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)7582": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)7615_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)7603_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)7615_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4379_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)4064_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)7603_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketplaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)7615_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)7582", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)4064_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "40cc6ebd35ac65034ab9f8f80aa4ef7488d02efa890576cfde71819a47244e76": { - "address": "0x5787d8fd6127bd94a319882E1Af5605cBB8CC049", - "txHash": "0x62951589f17aba0f069b925e34297b5b14c21805674e34f0ef740f482e809c9f", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "_status", - "offset": 0, - "slot": "251", - "type": "t_uint256", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" - }, - { - "label": "__gap", - "offset": 0, - "slot": "252", - "type": "t_array(t_uint256)49_storage", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" - }, - { - "label": "_paused", - "offset": 0, - "slot": "301", - "type": "t_bool", - "contract": "PausableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" - }, - { - "label": "__gap", - "offset": 0, - "slot": "302", - "type": "t_array(t_uint256)49_storage", - "contract": "PausableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" - }, - { - "label": "__gap", - "offset": 0, - "slot": "351", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "__gap_0", - "offset": 0, - "slot": "401", - "type": "t_array(t_uint256)500_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:35" - }, - { - "label": "marketData", - "offset": 0, - "slot": "901", - "type": "t_array(t_struct(Market)9955_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:139" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "902", - "type": "t_array(t_struct(AskWithState)9992_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:141" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "903", - "type": "t_mapping(t_enum(SecretType)9966,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:143" - }, - { - "label": "treasuryCollection", - "offset": 0, - "slot": "904", - "type": "t_uint256", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:145" - }, - { - "label": "matchingEngineImageId", - "offset": 0, - "slot": "905", - "type": "t_bytes32", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:147" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "906", - "type": "t_array(t_uint256)50_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:658" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(AskWithState)9992_storage)dyn_storage": { - "label": "struct ProofMarketplace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Market)9955_storage)dyn_storage": { - "label": "struct ProofMarketplace.Market[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IVerifier)11581": { - "label": "contract IVerifier", - "numberOfBytes": "20" - }, - "t_enum(AskState)9962": { - "label": "enum ProofMarketplace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)9966": { - "label": "enum ProofMarketplace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)9966,t_uint256)": { - "label": "mapping(enum ProofMarketplace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4379_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)4064_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)9981_storage": { - "label": "struct ProofMarketplace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)9992_storage": { - "label": "struct ProofMarketplace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)9981_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)9962", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)9955_storage": { - "label": "struct ProofMarketplace.Market", - "members": [ - { - "label": "verifier", - "type": "t_contract(IVerifier)11581", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "4" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "5" - } - ], - "numberOfBytes": "192" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)4064_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "18926ff5e5cb713d1ca64efc883cff6adca18d644785fbf3ae5f6de499fdfc9c": { - "address": "0xA1c8e3c2ed3947a426Eb10a43a0f5e1cAeACe45e", - "txHash": "0x4cd81bf2ee8864dc3272cafb868dc264296b678b67ae0f6b892901f926c301e6", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "_status", - "offset": 0, - "slot": "301", - "type": "t_uint256", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" - }, - { - "label": "__gap", - "offset": 0, - "slot": "302", - "type": "t_array(t_uint256)49_storage", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" - }, - { - "label": "whitelistedImages", - "offset": 0, - "slot": "351", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)9898_storage)", - "contract": "AttestationAutherUpgradeable", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:35" - }, - { - "label": "verifiedKeys", - "offset": 0, - "slot": "352", - "type": "t_mapping(t_address,t_bytes32)", - "contract": "AttestationAutherUpgradeable", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "353", - "type": "t_array(t_uint256)48_storage", - "contract": "AttestationAutherUpgradeable", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:38" - }, - { - "label": "__gap_0", - "offset": 0, - "slot": "401", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:32" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "901", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:77" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "902", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:178" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)48_storage": { - "label": "uint256[48]", - "numberOfBytes": "1536" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)9898_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4379_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)4064_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(EnclaveImage)9898_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)4064_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "71e0b88a9aef3de8d36c9aa6fcc8fbab040cda37c6df59e160053ddede87e470": { - "address": "0xBEb49F114f735186463bC0D2a8836Ed009F280e9", - "txHash": "0x1192c6d0e3d4fe9cff36380a3645f4c6ce76e5e0303c28ce3c1a19aaf49c9c3f", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "_status", - "offset": 0, - "slot": "301", - "type": "t_uint256", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" - }, - { - "label": "__gap", - "offset": 0, - "slot": "302", - "type": "t_array(t_uint256)49_storage", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" - }, - { - "label": "__gap_0", - "offset": 0, - "slot": "351", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:31" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "851", - "type": "t_mapping(t_address,t_struct(Generator)5325_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:96" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "852", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)5337_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:97" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "853", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:99" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "854", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:100" - }, - { - "label": "proofMarketplace", - "offset": 0, - "slot": "855", - "type": "t_contract(ProofMarketplace)9177", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:102" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "856", - "type": "t_array(t_uint256)50_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:753" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketplace)9177": { - "label": "contract ProofMarketplace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)5304": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)5337_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)5325_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)5337_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4379_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)4064_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)5325_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketplaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)5337_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)5304", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)4064_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "05f43f734acb33680c99d01963e87952d65c328e9b172dc6049929af202d6912": { - "address": "0x88A5eae4A7C4A68f55e8946396c865Fd5730Fb30", - "txHash": "0x90ca97ded4f45471fe86626238af933d75b5a303fd6743a8cd1a6411dfe3147b", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "_status", - "offset": 0, - "slot": "251", - "type": "t_uint256", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" - }, - { - "label": "__gap", - "offset": 0, - "slot": "252", - "type": "t_array(t_uint256)49_storage", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" - }, - { - "label": "_paused", - "offset": 0, - "slot": "301", - "type": "t_bool", - "contract": "PausableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" - }, - { - "label": "__gap", - "offset": 0, - "slot": "302", - "type": "t_array(t_uint256)49_storage", - "contract": "PausableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" - }, - { - "label": "__gap", - "offset": 0, - "slot": "351", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "__gap_0", - "offset": 0, - "slot": "401", - "type": "t_array(t_uint256)500_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:35" - }, - { - "label": "marketData", - "offset": 0, - "slot": "901", - "type": "t_array(t_struct(Market)7652_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:139" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "902", - "type": "t_array(t_struct(AskWithState)7689_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:141" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "903", - "type": "t_mapping(t_enum(SecretType)7663,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:143" - }, - { - "label": "treasuryCollection", - "offset": 0, - "slot": "904", - "type": "t_uint256", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:145" - }, - { - "label": "matchingEngineImageId", - "offset": 0, - "slot": "905", - "type": "t_bytes32", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:147" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "906", - "type": "t_array(t_uint256)50_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:658" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(AskWithState)7689_storage)dyn_storage": { - "label": "struct ProofMarketplace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Market)7652_storage)dyn_storage": { - "label": "struct ProofMarketplace.Market[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IVerifier)9278": { - "label": "contract IVerifier", - "numberOfBytes": "20" - }, - "t_enum(AskState)7659": { - "label": "enum ProofMarketplace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)7663": { - "label": "enum ProofMarketplace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)7663,t_uint256)": { - "label": "mapping(enum ProofMarketplace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4379_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)4064_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)7678_storage": { - "label": "struct ProofMarketplace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)7689_storage": { - "label": "struct ProofMarketplace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)7678_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)7659", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)7652_storage": { - "label": "struct ProofMarketplace.Market", - "members": [ - { - "label": "verifier", - "type": "t_contract(IVerifier)9278", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "4" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "5" - } - ], - "numberOfBytes": "192" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)4064_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "d696f2c9023a19e6f9af6224ce15cf38c282aea62ad42ec283786b164a407e68": { - "address": "0x331BC8070e94c37625723D6E02844c7D674fFfFd", - "txHash": "0x4b4bdb518326271b698a64d540b7f25f96d4861747f50b534114fb712f5a2ff6", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "_status", - "offset": 0, - "slot": "301", - "type": "t_uint256", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" - }, - { - "label": "__gap", - "offset": 0, - "slot": "302", - "type": "t_array(t_uint256)49_storage", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" - }, - { - "label": "__gap_0", - "offset": 0, - "slot": "351", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:31" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "851", - "type": "t_mapping(t_address,t_struct(Generator)5325_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:96" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "852", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)5337_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:97" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "853", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:99" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "854", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:100" - }, - { - "label": "proofMarketplace", - "offset": 0, - "slot": "855", - "type": "t_contract(ProofMarketplace)9159", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:102" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "856", - "type": "t_array(t_uint256)50_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:753" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketplace)9159": { - "label": "contract ProofMarketplace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)5304": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)5337_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)5325_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)5337_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4379_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)4064_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)5325_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketplaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)5337_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)5304", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)4064_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "7039b0a7f7a3d03dba644c5a8169b2492d0dfe0027ee767316b391ed785b1069": { - "address": "0x0bC3c82E12edcae6139e77Ad8F7afF55Ab0cF6C0", - "txHash": "0x4693c1c24668c6006a71bd08b61c25044173a67396270fbeb58c19075fa6db54", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "_status", - "offset": 0, - "slot": "251", - "type": "t_uint256", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" - }, - { - "label": "__gap", - "offset": 0, - "slot": "252", - "type": "t_array(t_uint256)49_storage", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" - }, - { - "label": "_paused", - "offset": 0, - "slot": "301", - "type": "t_bool", - "contract": "PausableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" - }, - { - "label": "__gap", - "offset": 0, - "slot": "302", - "type": "t_array(t_uint256)49_storage", - "contract": "PausableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" - }, - { - "label": "__gap", - "offset": 0, - "slot": "351", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "__gap_0", - "offset": 0, - "slot": "401", - "type": "t_array(t_uint256)500_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:35" - }, - { - "label": "marketData", - "offset": 0, - "slot": "901", - "type": "t_array(t_struct(Market)7652_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:139" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "902", - "type": "t_array(t_struct(AskWithState)7689_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:141" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "903", - "type": "t_mapping(t_enum(SecretType)7663,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:143" - }, - { - "label": "treasuryCollection", - "offset": 0, - "slot": "904", - "type": "t_uint256", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:145" - }, - { - "label": "matchingEngineImageId", - "offset": 0, - "slot": "905", - "type": "t_bytes32", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:147" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "906", - "type": "t_array(t_uint256)50_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:651" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(AskWithState)7689_storage)dyn_storage": { - "label": "struct ProofMarketplace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Market)7652_storage)dyn_storage": { - "label": "struct ProofMarketplace.Market[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IVerifier)9260": { - "label": "contract IVerifier", - "numberOfBytes": "20" - }, - "t_enum(AskState)7659": { - "label": "enum ProofMarketplace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)7663": { - "label": "enum ProofMarketplace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)7663,t_uint256)": { - "label": "mapping(enum ProofMarketplace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4379_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)4064_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)7678_storage": { - "label": "struct ProofMarketplace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)7689_storage": { - "label": "struct ProofMarketplace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)7678_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)7659", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)7652_storage": { - "label": "struct ProofMarketplace.Market", - "members": [ - { - "label": "verifier", - "type": "t_contract(IVerifier)9260", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "4" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "5" - } - ], - "numberOfBytes": "192" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)4064_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "b7726ec9d4194263aef561dfb1a7a1584fee77c4e2bd94708b323a2f02acff38": { - "address": "0x16BD29553f159a7A5Dd115C2E29F8092A8119933", - "txHash": "0xc8bf40c72a156be7c6a9766ebf399c4408403d5e79b8351fad799def09b0aeb2", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "_status", - "offset": 0, - "slot": "301", - "type": "t_uint256", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" - }, - { - "label": "__gap", - "offset": 0, - "slot": "302", - "type": "t_array(t_uint256)49_storage", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" - }, - { - "label": "__gap_0", - "offset": 0, - "slot": "351", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:31" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "851", - "type": "t_mapping(t_address,t_struct(Generator)5325_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:96" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "852", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)5337_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:97" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "853", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:99" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "854", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:100" - }, - { - "label": "proofMarketplace", - "offset": 0, - "slot": "855", - "type": "t_contract(ProofMarketplace)9159", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:102" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "856", - "type": "t_array(t_uint256)50_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:753" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketplace)9159": { - "label": "contract ProofMarketplace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)5304": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)5337_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)5325_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)5337_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4379_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)4064_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)5325_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketplaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)5337_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)5304", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)4064_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "d315cbacd0273d061032ab617e87b454edfe69104f072de845ce7880829115e8": { - "address": "0x82C4838bbe7aa788A4ab8173793815B0b6831689", - "txHash": "0x079cb3082cc589159e616ac81e980ba049398d66c57180dba9d4ef1001e50cc9", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "_status", - "offset": 0, - "slot": "251", - "type": "t_uint256", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" - }, - { - "label": "__gap", - "offset": 0, - "slot": "252", - "type": "t_array(t_uint256)49_storage", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" - }, - { - "label": "_paused", - "offset": 0, - "slot": "301", - "type": "t_bool", - "contract": "PausableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" - }, - { - "label": "__gap", - "offset": 0, - "slot": "302", - "type": "t_array(t_uint256)49_storage", - "contract": "PausableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" - }, - { - "label": "__gap", - "offset": 0, - "slot": "351", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "__gap_0", - "offset": 0, - "slot": "401", - "type": "t_array(t_uint256)500_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:35" - }, - { - "label": "marketData", - "offset": 0, - "slot": "901", - "type": "t_array(t_struct(Market)7652_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:139" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "902", - "type": "t_array(t_struct(AskWithState)7689_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:141" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "903", - "type": "t_mapping(t_enum(SecretType)7663,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:143" - }, - { - "label": "treasuryCollection", - "offset": 0, - "slot": "904", - "type": "t_uint256", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:145" - }, - { - "label": "matchingEngineImageId", - "offset": 0, - "slot": "905", - "type": "t_bytes32", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:147" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "906", - "type": "t_array(t_uint256)50_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:650" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(AskWithState)7689_storage)dyn_storage": { - "label": "struct ProofMarketplace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Market)7652_storage)dyn_storage": { - "label": "struct ProofMarketplace.Market[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IVerifier)9260": { - "label": "contract IVerifier", - "numberOfBytes": "20" - }, - "t_enum(AskState)7659": { - "label": "enum ProofMarketplace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)7663": { - "label": "enum ProofMarketplace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)7663,t_uint256)": { - "label": "mapping(enum ProofMarketplace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4379_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)4064_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)7678_storage": { - "label": "struct ProofMarketplace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)7689_storage": { - "label": "struct ProofMarketplace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)7678_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)7659", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)7652_storage": { - "label": "struct ProofMarketplace.Market", - "members": [ - { - "label": "verifier", - "type": "t_contract(IVerifier)9260", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "4" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "5" - } - ], - "numberOfBytes": "192" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)4064_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "a3508032594a400aa9012b5233e250b076b1e7e1bc1f08336469a31efea6ace2": { - "address": "0xce9aBD7a0a161A1DcD9c4a564cE2C097Cfcf128b", - "txHash": "0xedd8b7a65edefcfd2b80f11fdb94ebd928e45d503fafa5ed8519148ccfed3f5c", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "_status", - "offset": 0, - "slot": "301", - "type": "t_uint256", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" - }, - { - "label": "__gap", - "offset": 0, - "slot": "302", - "type": "t_array(t_uint256)49_storage", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" - }, - { - "label": "__gap_0", - "offset": 0, - "slot": "351", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:32" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "851", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:81" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "852", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:83" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "853", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:188" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4379_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)4064_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)4064_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "c16f10d77764c6d00c1e0365e889b225a60ffe961ab2aec7cb2c558fa9c0ea8d": { - "address": "0x5F4AA5158a1d680CD5A3F4df34C974DdEdD0Bd49", - "txHash": "0xd23507b3195cfb7de1a4ecf89aa6b9017c673217cb3b073022cad766ad907baf", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "251", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "_status", - "offset": 0, - "slot": "301", - "type": "t_uint256", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" - }, - { - "label": "__gap", - "offset": 0, - "slot": "302", - "type": "t_array(t_uint256)49_storage", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" - }, - { - "label": "__gap_0", - "offset": 0, - "slot": "351", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:31" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "851", - "type": "t_mapping(t_address,t_struct(Generator)5371_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:98" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "852", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)5383_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:99" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "853", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:101" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "854", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:102" - }, - { - "label": "proofMarketplace", - "offset": 0, - "slot": "855", - "type": "t_contract(ProofMarketplace)9327", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:104" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "856", - "type": "t_array(t_uint256)50_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:823" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketplace)9327": { - "label": "contract ProofMarketplace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)5350": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)5383_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)5371_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)5383_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4379_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)4064_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Generator)5371_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketplaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)5383_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)5350", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)4064_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "4f89a761aba309652e15709bb6d52100a8c134a3bfca4fdf88954dfd39ec7982": { - "address": "0x31066093856bE0b512039881bB5Df21bA7240B6a", - "txHash": "0xba9ecd6b9c7034623492e0aa0cb88f3f44af129a88d2d003823e55bf47f4772d", - "layout": { - "solcVersion": "0.8.19", - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_roles", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" - }, - { - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" - }, - { - "label": "_roleMembers", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "AccessControlEnumerableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" - }, - { - "label": "__gap", - "offset": 0, - "slot": "201", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "_status", - "offset": 0, - "slot": "251", - "type": "t_uint256", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" - }, - { - "label": "__gap", - "offset": 0, - "slot": "252", - "type": "t_array(t_uint256)49_storage", - "contract": "ReentrancyGuardUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" - }, - { - "label": "_paused", - "offset": 0, - "slot": "301", - "type": "t_bool", - "contract": "PausableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" - }, - { - "label": "__gap", - "offset": 0, - "slot": "302", - "type": "t_array(t_uint256)49_storage", - "contract": "PausableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" - }, - { - "label": "__gap", - "offset": 0, - "slot": "351", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "__gap_0", - "offset": 0, - "slot": "401", - "type": "t_array(t_uint256)500_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:35" - }, - { - "label": "marketData", - "offset": 0, - "slot": "901", - "type": "t_array(t_struct(Market)7763_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:143" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "902", - "type": "t_array(t_struct(AskWithState)7800_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:145" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "903", - "type": "t_mapping(t_enum(SecretType)7774,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:147" - }, - { - "label": "claimableAmount", - "offset": 0, - "slot": "904", - "type": "t_mapping(t_address,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:149" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "905", - "type": "t_array(t_uint256)50_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:700" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(AskWithState)7800_storage)dyn_storage": { - "label": "struct ProofMarketplace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Market)7763_storage)dyn_storage": { - "label": "struct ProofMarketplace.Market[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IVerifier)9394": { - "label": "contract IVerifier", - "numberOfBytes": "20" - }, - "t_enum(AskState)7770": { - "label": "enum ProofMarketplace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)7774": { - "label": "enum ProofMarketplace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(AddressSet)4379_storage)": { - "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)7774,t_uint256)": { - "label": "mapping(enum ProofMarketplace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_struct(AddressSet)4379_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)4064_storage", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Ask)7789_storage": { - "label": "struct ProofMarketplace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)7800_storage": { - "label": "struct ProofMarketplace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)7789_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)7770", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)7763_storage": { - "label": "struct ProofMarketplace.Market", - "members": [ - { - "label": "verifier", - "type": "t_contract(IVerifier)9394", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "4" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "5" - } - ], - "numberOfBytes": "192" - }, - "t_struct(RoleData)179_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)4064_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "bad1ba0f2be696faf8d72a4809502aa578265217e580bd0f91196a60dc268125": { - "address": "0x2d26A9AEEb3Aa204EaE692FE36a792B4AC6aEc40", - "txHash": "0x190ca8859185d2eef149c91293dad374e20d2e697deb679575285ccb01829a1b", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:29" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:51" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:53" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:172" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))": { - "label": "mapping(bytes32 => mapping(bytes32 => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)1718_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(AttestationAutherStorage)1735_storage": { - "label": "struct AttestationAutherUpgradeable.AttestationAutherStorage", - "members": [ - { - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1718_storage)", - "offset": 0, - "slot": "0" - }, - { - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "offset": 0, - "slot": "1" - }, - { - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(EnclaveImage)1718_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:marlin.oyster.storage.AttestationAuther": [ - { - "contract": "AttestationAutherUpgradeable", - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1718_storage)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:31", - "offset": 0, - "slot": "0" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:32", - "offset": 0, - "slot": "1" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:33", - "offset": 0, - "slot": "2" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "91191854442ae9e64002f553b87a520a890b7351823e1d7a9216086b1a067fd5": { - "address": "0xfEc658CE6Dd065ca1C1B944cC5884265Dc8C69f4", - "txHash": "0xa1c3ea8da088152e496b1d5b2bd14fee8bfd16c7a2901aff148e298cca10d576", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:27" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_struct(Generator)4068_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:70" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4080_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:71" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:73" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:74" - }, - { - "label": "proofMarketplace", - "offset": 0, - "slot": "504", - "type": "t_contract(ProofMarketplace)8278", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:76" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:774" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketplace)8278": { - "label": "contract ProofMarketplace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)4047": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4080_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)4068_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4080_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(Generator)4068_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketplaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)4080_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)4047", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "3036dccf174738070cb73e7374ec84257947d9dbf4c2614e9030544c769e9ae0": { - "address": "0xb1bCFFEB262F612488cc411Ca0ce0D1FD8194961", - "txHash": "0xafae7a1afaf166fbed58348031cc95faa12aa2532df81e15d39f4d46b4047623", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:31" - }, - { - "label": "marketData", - "offset": 0, - "slot": "500", - "type": "t_array(t_struct(Market)6406_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:111" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "501", - "type": "t_array(t_struct(AskWithState)6443_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:113" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_enum(SecretType)6417,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:115" - }, - { - "label": "claimableAmount", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:117" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "504", - "type": "t_array(t_uint256)50_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:736" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(PausableStorage)219_storage": { - "label": "struct PausableUpgradeable.PausableStorage", - "members": [ - { - "label": "_paused", - "type": "t_bool", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_struct(AskWithState)6443_storage)dyn_storage": { - "label": "struct ProofMarketplace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Market)6406_storage)dyn_storage": { - "label": "struct ProofMarketplace.Market[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IVerifier)8345": { - "label": "contract IVerifier", - "numberOfBytes": "20" - }, - "t_enum(AskState)6413": { - "label": "enum ProofMarketplace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)6417": { - "label": "enum ProofMarketplace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)6417,t_uint256)": { - "label": "mapping(enum ProofMarketplace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_struct(Ask)6432_storage": { - "label": "struct ProofMarketplace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)6443_storage": { - "label": "struct ProofMarketplace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)6432_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)6413", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)6406_storage": { - "label": "struct ProofMarketplace.Market", - "members": [ - { - "label": "verifier", - "type": "t_contract(IVerifier)8345", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "4" - }, - { - "label": "creator", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.Pausable": [ - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "287effcb0a78911b4d78bbc53b283aa17d699c5af6424899962d3435cf23ea90": { - "address": "0x3219Df0D547216625DA971B973B7770d44Fe0c6F", - "txHash": "0x7af51539420457f67580fe6d5c8d6187709d1ce8f025510e7a85005714990dbc", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:27" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_struct(Generator)4068_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:70" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4080_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:71" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:73" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:74" - }, - { - "label": "proofMarketplace", - "offset": 0, - "slot": "504", - "type": "t_contract(ProofMarketplace)8278", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:76" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:774" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketplace)8278": { - "label": "contract ProofMarketplace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)4047": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4080_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)4068_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4080_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(Generator)4068_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketplaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)4080_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)4047", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "db6d6d35071f5801730904cda3c624d57e603f0d6400440af1d8a42a7421876a": { - "address": "0x0387eD5BD037f02A0BB215E71415A78F8C895bC3", - "txHash": "0x880328ddd759bfecb80894ecbcdbad7e5aee6e74956c27431cd9c7f2554630ef", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:31" - }, - { - "label": "marketData", - "offset": 0, - "slot": "500", - "type": "t_array(t_struct(Market)6406_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:111" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "501", - "type": "t_array(t_struct(AskWithState)6443_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:113" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_enum(SecretType)6417,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:115" - }, - { - "label": "claimableAmount", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:117" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "504", - "type": "t_array(t_uint256)50_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:736" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(PausableStorage)219_storage": { - "label": "struct PausableUpgradeable.PausableStorage", - "members": [ - { - "label": "_paused", - "type": "t_bool", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_struct(AskWithState)6443_storage)dyn_storage": { - "label": "struct ProofMarketplace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Market)6406_storage)dyn_storage": { - "label": "struct ProofMarketplace.Market[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IVerifier)8345": { - "label": "contract IVerifier", - "numberOfBytes": "20" - }, - "t_enum(AskState)6413": { - "label": "enum ProofMarketplace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)6417": { - "label": "enum ProofMarketplace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)6417,t_uint256)": { - "label": "mapping(enum ProofMarketplace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_struct(Ask)6432_storage": { - "label": "struct ProofMarketplace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)6443_storage": { - "label": "struct ProofMarketplace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)6432_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)6413", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)6406_storage": { - "label": "struct ProofMarketplace.Market", - "members": [ - { - "label": "verifier", - "type": "t_contract(IVerifier)8345", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "4" - }, - { - "label": "creator", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.Pausable": [ - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "04c06810766a2625ba8e14fac51708e2e37eb4c4eee4070e427a6a1ca74ba1da": { - "address": "0xF7116786Ef42d3b3E3E45a96491c3B620607C61E", - "txHash": "0x0dfadc63e238c0ad75eb1e6ed6a8008c8e3e2fa4886566e6ef817cb32ca173df", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:29" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:51" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:53" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:172" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))": { - "label": "mapping(bytes32 => mapping(bytes32 => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)1718_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(AttestationAutherStorage)1735_storage": { - "label": "struct AttestationAutherUpgradeable.AttestationAutherStorage", - "members": [ - { - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1718_storage)", - "offset": 0, - "slot": "0" - }, - { - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "offset": 0, - "slot": "1" - }, - { - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(EnclaveImage)1718_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:marlin.oyster.storage.AttestationAuther": [ - { - "contract": "AttestationAutherUpgradeable", - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1718_storage)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:31", - "offset": 0, - "slot": "0" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:32", - "offset": 0, - "slot": "1" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:33", - "offset": 0, - "slot": "2" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "da4cda7f23f4d6d9ba7a668c03d3da652e7ed68b9fb75907aa99e20e9af8349d": { - "address": "0x7B1E2Fe94890f4CD18474611CF1A087b2691C084", - "txHash": "0x367a707d389546621c492f709d5644cd0cc061f154f66e1ce93d01aef07b6471", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:27" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_struct(Generator)4068_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:70" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4080_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:71" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:73" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:74" - }, - { - "label": "proofMarketplace", - "offset": 0, - "slot": "504", - "type": "t_contract(ProofMarketplace)8278", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:76" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:774" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketplace)8278": { - "label": "contract ProofMarketplace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)4047": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4080_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)4068_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4080_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(Generator)4068_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketplaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)4080_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)4047", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "bb6f70abbdbe094728b96b0959a17442e3e5b7a0cd32ba8f0418ae3e906950ed": { - "address": "0xd252cf7D76Bc9c5D0323e4B435c45D9BB74ADa8D", - "txHash": "0x519e115d938118d949e5dd88dfc2b31116e7ed26ece888e18ba7f940a9dfb58f", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:31" - }, - { - "label": "marketData", - "offset": 0, - "slot": "500", - "type": "t_array(t_struct(Market)6406_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:111" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "501", - "type": "t_array(t_struct(AskWithState)6443_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:113" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_enum(SecretType)6417,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:115" - }, - { - "label": "claimableAmount", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:117" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "504", - "type": "t_array(t_uint256)50_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:736" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(PausableStorage)219_storage": { - "label": "struct PausableUpgradeable.PausableStorage", - "members": [ - { - "label": "_paused", - "type": "t_bool", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_struct(AskWithState)6443_storage)dyn_storage": { - "label": "struct ProofMarketplace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Market)6406_storage)dyn_storage": { - "label": "struct ProofMarketplace.Market[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IVerifier)8345": { - "label": "contract IVerifier", - "numberOfBytes": "20" - }, - "t_enum(AskState)6413": { - "label": "enum ProofMarketplace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)6417": { - "label": "enum ProofMarketplace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)6417,t_uint256)": { - "label": "mapping(enum ProofMarketplace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_struct(Ask)6432_storage": { - "label": "struct ProofMarketplace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)6443_storage": { - "label": "struct ProofMarketplace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)6432_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)6413", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)6406_storage": { - "label": "struct ProofMarketplace.Market", - "members": [ - { - "label": "verifier", - "type": "t_contract(IVerifier)8345", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "4" - }, - { - "label": "creator", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.Pausable": [ - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "50b0410524e86ba03da518874530736c7e9e34673cc6686103cfd7ac68cd1893": { - "address": "0x55b5adABa95db2dc519E181c92D1b039F3498f81", - "txHash": "0x4080ed160ec6122787eea0050d33ebd28c58849e2dcdc240ab277c53c505a2d1", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:29" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:51" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:53" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:172" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))": { - "label": "mapping(bytes32 => mapping(bytes32 => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)1718_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(AttestationAutherStorage)1735_storage": { - "label": "struct AttestationAutherUpgradeable.AttestationAutherStorage", - "members": [ - { - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1718_storage)", - "offset": 0, - "slot": "0" - }, - { - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "offset": 0, - "slot": "1" - }, - { - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(EnclaveImage)1718_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:marlin.oyster.storage.AttestationAuther": [ - { - "contract": "AttestationAutherUpgradeable", - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1718_storage)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:31", - "offset": 0, - "slot": "0" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:32", - "offset": 0, - "slot": "1" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:33", - "offset": 0, - "slot": "2" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "91cd107885dca83d9f1083cf2e41a3f9d8b898f61ad87cd6aa89b04af3ddc42e": { - "address": "0xcabD2D6E419827bF4348e8B5E2b50d614bd9c78e", - "txHash": "0xfc541ecb73f2375cdb4f4c121af4b213b68c89bea5b75005c2ea2ae4b4aec35a", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:27" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_struct(Generator)4068_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:70" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4080_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:71" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:73" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:74" - }, - { - "label": "proofMarketplace", - "offset": 0, - "slot": "504", - "type": "t_contract(ProofMarketplace)8278", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:76" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:774" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketplace)8278": { - "label": "contract ProofMarketplace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)4047": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4080_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)4068_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4080_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(Generator)4068_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketplaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)4080_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)4047", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "500dcd6b9e06d09891e8290db38200f01af441ec2255a2b14b3ecdfd8de415cf": { - "address": "0x932e7Db955167812f4F33cD09a92cbaaDF30d8aF", - "txHash": "0x6241be51026407e04fa4febe4f9762ab381c2a27ff9daebc170c1bbeaa0ba219", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:31" - }, - { - "label": "marketData", - "offset": 0, - "slot": "500", - "type": "t_array(t_struct(Market)6406_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:111" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "501", - "type": "t_array(t_struct(AskWithState)6443_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:113" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_enum(SecretType)6417,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:115" - }, - { - "label": "claimableAmount", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:117" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "504", - "type": "t_array(t_uint256)50_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:736" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(PausableStorage)219_storage": { - "label": "struct PausableUpgradeable.PausableStorage", - "members": [ - { - "label": "_paused", - "type": "t_bool", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_struct(AskWithState)6443_storage)dyn_storage": { - "label": "struct ProofMarketplace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Market)6406_storage)dyn_storage": { - "label": "struct ProofMarketplace.Market[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IVerifier)8345": { - "label": "contract IVerifier", - "numberOfBytes": "20" - }, - "t_enum(AskState)6413": { - "label": "enum ProofMarketplace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)6417": { - "label": "enum ProofMarketplace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)6417,t_uint256)": { - "label": "mapping(enum ProofMarketplace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_struct(Ask)6432_storage": { - "label": "struct ProofMarketplace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)6443_storage": { - "label": "struct ProofMarketplace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)6432_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)6413", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)6406_storage": { - "label": "struct ProofMarketplace.Market", - "members": [ - { - "label": "verifier", - "type": "t_contract(IVerifier)8345", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "4" - }, - { - "label": "creator", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.Pausable": [ - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "f77c55dfc34314384f38907a972ff0b2058f8442ab6ce6551d209797b06bff6c": { - "address": "0xE1B8b0Bd0b3CD1084D86fbF25338448Ece812082", - "txHash": "0xb57baaba8ae9c31749b5ee775c734e815d0c9e5a16b2899968bd2f44d4b07598", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:27" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_struct(Generator)4068_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:70" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4080_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:71" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:73" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:74" - }, - { - "label": "proofMarketplace", - "offset": 0, - "slot": "504", - "type": "t_contract(ProofMarketplace)8278", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:76" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:774" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketplace)8278": { - "label": "contract ProofMarketplace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)4047": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4080_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)4068_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4080_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(Generator)4068_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketplaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)4080_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)4047", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "49962ba16065667752606b5afadd3b2f25ccb510d4b51baa75370390cc4e583b": { - "address": "0xE16E2753112fFE00E068F06D47b11Dc105eBA3c7", - "txHash": "0xe202a81b8e922aa15f772afc1ede8ccc314da1c76aeb19bba573a1c97d0dc2e4", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:31" - }, - { - "label": "marketData", - "offset": 0, - "slot": "500", - "type": "t_array(t_struct(Market)6406_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:111" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "501", - "type": "t_array(t_struct(AskWithState)6443_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:113" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_enum(SecretType)6417,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:115" - }, - { - "label": "claimableAmount", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:117" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "504", - "type": "t_array(t_uint256)50_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:736" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(PausableStorage)219_storage": { - "label": "struct PausableUpgradeable.PausableStorage", - "members": [ - { - "label": "_paused", - "type": "t_bool", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_struct(AskWithState)6443_storage)dyn_storage": { - "label": "struct ProofMarketplace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Market)6406_storage)dyn_storage": { - "label": "struct ProofMarketplace.Market[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IVerifier)8345": { - "label": "contract IVerifier", - "numberOfBytes": "20" - }, - "t_enum(AskState)6413": { - "label": "enum ProofMarketplace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)6417": { - "label": "enum ProofMarketplace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)6417,t_uint256)": { - "label": "mapping(enum ProofMarketplace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_struct(Ask)6432_storage": { - "label": "struct ProofMarketplace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)6443_storage": { - "label": "struct ProofMarketplace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)6432_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)6413", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)6406_storage": { - "label": "struct ProofMarketplace.Market", - "members": [ - { - "label": "verifier", - "type": "t_contract(IVerifier)8345", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "4" - }, - { - "label": "creator", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.Pausable": [ - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "10b7adf10f8dfdf02c30ed1b67bdae8952c3ee9e4f7c4578f6df32243e97d58c": { - "address": "0x990f923bdC45739c7E42e2fF3b8810B28a959bb8", - "txHash": "0xb63ee792b9644ba711cf2c6dc5a015c979867a70941ec838dd3cfcc5b7f9b341", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:29" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:51" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:53" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:172" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))": { - "label": "mapping(bytes32 => mapping(bytes32 => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)1405_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(AttestationAutherStorage)1422_storage": { - "label": "struct AttestationAutherUpgradeable.AttestationAutherStorage", - "members": [ - { - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1405_storage)", - "offset": 0, - "slot": "0" - }, - { - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "offset": 0, - "slot": "1" - }, - { - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(EnclaveImage)1405_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:marlin.oyster.storage.AttestationAuther": [ - { - "contract": "AttestationAutherUpgradeable", - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1405_storage)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:31", - "offset": 0, - "slot": "0" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:32", - "offset": 0, - "slot": "1" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:33", - "offset": 0, - "slot": "2" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "8f8f699819cc7f6eec3f0ad3796fcd8de09053f40ce0c98f9aee8e8aa884adde": { - "address": "0xF800CA64CFdf47Efbc9b4c21F273A7B2ce7AaEB7", - "txHash": "0xed96231af17a72f0ab0314d3848c8c35f7007c7d2f714a6450f4c24b080d2bfc", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:27" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_struct(Generator)3360_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:70" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3372_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:71" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:73" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:74" - }, - { - "label": "proofMarketplace", - "offset": 0, - "slot": "504", - "type": "t_contract(ProofMarketplace)7556", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:76" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:760" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketplace)7556": { - "label": "contract ProofMarketplace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)3339": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3372_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)3360_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3372_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(Generator)3360_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketplaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)3372_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)3339", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "d69d1d6dce054d1a51ef0534d14f246f20648e5d796ba8332f8c573d9b666d9f": { - "address": "0xceCd8A1a4f851fF96aD3Db9B789D6AE1077AA820", - "txHash": "0xd93e4f2abd0cceb35ab25ea4c30e1c20baedd8727719afd455fa2ddc27da2fe4", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:31" - }, - { - "label": "marketData", - "offset": 0, - "slot": "500", - "type": "t_array(t_struct(Market)5684_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:111" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "501", - "type": "t_array(t_struct(AskWithState)5721_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:113" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_enum(SecretType)5695,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:115" - }, - { - "label": "claimableAmount", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:117" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "504", - "type": "t_array(t_uint256)50_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:736" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(PausableStorage)219_storage": { - "label": "struct PausableUpgradeable.PausableStorage", - "members": [ - { - "label": "_paused", - "type": "t_bool", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_struct(AskWithState)5721_storage)dyn_storage": { - "label": "struct ProofMarketplace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Market)5684_storage)dyn_storage": { - "label": "struct ProofMarketplace.Market[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IVerifier)7623": { - "label": "contract IVerifier", - "numberOfBytes": "20" - }, - "t_enum(AskState)5691": { - "label": "enum ProofMarketplace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)5695": { - "label": "enum ProofMarketplace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)5695,t_uint256)": { - "label": "mapping(enum ProofMarketplace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_struct(Ask)5710_storage": { - "label": "struct ProofMarketplace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)5721_storage": { - "label": "struct ProofMarketplace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)5710_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)5691", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)5684_storage": { - "label": "struct ProofMarketplace.Market", - "members": [ - { - "label": "verifier", - "type": "t_contract(IVerifier)7623", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "4" - }, - { - "label": "creator", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.Pausable": [ - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "e17e51fff59953898824bb5aed6cf5cefdb6e429c5e4ca473a7b252ced35b67e": { - "address": "0xA7D1bFA053A8b474a153336Db7e0B31494155f9E", - "txHash": "0x1fedb678f73eef60c96ae835a5e0ca1f3662cc2d6492f46b436e7ead82253e76", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:29" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:51" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:53" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:174" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))": { - "label": "mapping(bytes32 => mapping(bytes32 => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)1869_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(AttestationAutherStorage)1886_storage": { - "label": "struct AttestationAutherUpgradeable.AttestationAutherStorage", - "members": [ - { - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1869_storage)", - "offset": 0, - "slot": "0" - }, - { - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "offset": 0, - "slot": "1" - }, - { - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(EnclaveImage)1869_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:marlin.oyster.storage.AttestationAuther": [ - { - "contract": "AttestationAutherUpgradeable", - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1869_storage)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:31", - "offset": 0, - "slot": "0" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:32", - "offset": 0, - "slot": "1" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:33", - "offset": 0, - "slot": "2" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "488ddebad2d102bd7723548f6a8c1cb1191bd8281c1eff66e6624faf4941509e": { - "address": "0x571Bd65B8804B381EfcAf695309C1f43550256bE", - "txHash": "0xd31a6e8cc5b5c29bc523e039ac7f3d95be71911ec24ffb07486e512f7b122a18", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:29" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_struct(Generator)4082_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:72" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4094_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:73" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:75" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:76" - }, - { - "label": "proofMarketplace", - "offset": 0, - "slot": "504", - "type": "t_contract(ProofMarketplace)8437", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:78" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:767" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketplace)8437": { - "label": "contract ProofMarketplace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)4061": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4094_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)4082_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4094_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(Generator)4082_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketplaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)4094_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)4061", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "59a5e7febc25def6b4b9a4e2161cc030890bf85d1c03f823c973d780ca43863c": { - "address": "0xA64665EdC5d17Be1Bf6ec7EA9D28c9AB09254D12", - "txHash": "0x2b99055fe0b61c266ee7209c94bbe9a7df19f9689e30a9d1ce5a11f040991e98", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:31" - }, - { - "label": "marketData", - "offset": 0, - "slot": "500", - "type": "t_array(t_struct(Market)6434_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:111" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "501", - "type": "t_array(t_struct(AskWithState)6471_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:113" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_enum(SecretType)6445,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:116" - }, - { - "label": "minProvingTime", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_enum(SecretType)6445,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:118" - }, - { - "label": "claimableAmount", - "offset": 0, - "slot": "504", - "type": "t_mapping(t_address,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:120" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:768" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(PausableStorage)219_storage": { - "label": "struct PausableUpgradeable.PausableStorage", - "members": [ - { - "label": "_paused", - "type": "t_bool", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_struct(AskWithState)6471_storage)dyn_storage": { - "label": "struct ProofMarketplace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Market)6434_storage)dyn_storage": { - "label": "struct ProofMarketplace.Market[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IVerifier)8498": { - "label": "contract IVerifier", - "numberOfBytes": "20" - }, - "t_enum(AskState)6441": { - "label": "enum ProofMarketplace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)6445": { - "label": "enum ProofMarketplace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)6445,t_uint256)": { - "label": "mapping(enum ProofMarketplace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_struct(Ask)6460_storage": { - "label": "struct ProofMarketplace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)6471_storage": { - "label": "struct ProofMarketplace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)6460_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)6441", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)6434_storage": { - "label": "struct ProofMarketplace.Market", - "members": [ - { - "label": "verifier", - "type": "t_contract(IVerifier)8498", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "4" - }, - { - "label": "creator", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.Pausable": [ - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "47a148332c290fc40c0017c9337f507f1273d5a3cf54621b2835c19d7170dc03": { - "address": "0xFA787e0a6CC9200bEa8520C50546e22a222FC435", - "txHash": "0x7b42f2bdd57c3a224e7bf374a1fff2f98ea9b0a85dc764e5f960c75be831f97f", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:29" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:51" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:53" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:174" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))": { - "label": "mapping(bytes32 => mapping(bytes32 => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)1577_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(AttestationAutherStorage)1594_storage": { - "label": "struct AttestationAutherUpgradeable.AttestationAutherStorage", - "members": [ - { - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1577_storage)", - "offset": 0, - "slot": "0" - }, - { - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "offset": 0, - "slot": "1" - }, - { - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(EnclaveImage)1577_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:marlin.oyster.storage.AttestationAuther": [ - { - "contract": "AttestationAutherUpgradeable", - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1577_storage)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:31", - "offset": 0, - "slot": "0" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:32", - "offset": 0, - "slot": "1" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:33", - "offset": 0, - "slot": "2" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "e671be6d23a55a650e047d9ecf3d27501d3bbc162410593700d4fe10e048dad2": { - "address": "0x6c291402083286AecbEA10C841f842459de633A1", - "txHash": "0x0d3da2df9d6e6a82dfa13f56978999f6000b5ac5135cb4b7e1360c4d6935085f", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:29" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:51" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:53" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:174" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))": { - "label": "mapping(bytes32 => mapping(bytes32 => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)1577_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(AttestationAutherStorage)1594_storage": { - "label": "struct AttestationAutherUpgradeable.AttestationAutherStorage", - "members": [ - { - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1577_storage)", - "offset": 0, - "slot": "0" - }, - { - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "offset": 0, - "slot": "1" - }, - { - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(EnclaveImage)1577_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:marlin.oyster.storage.AttestationAuther": [ - { - "contract": "AttestationAutherUpgradeable", - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1577_storage)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:31", - "offset": 0, - "slot": "0" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:32", - "offset": 0, - "slot": "1" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:33", - "offset": 0, - "slot": "2" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "5176788b21772db68ac5e8993896d35ab214db510c78d269681e054b4c343f3f": { - "address": "0xE34cB6f6df1382791263670d89E34e38B4959dF6", - "txHash": "0x22f5546f1edab14d411e88f1da28e90e82c0131f94f437d466318faa5a7d9017", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "AttestationVerifierZK", - "src": "contracts/periphery/AttestationVerifierZK.sol:23" - }, - { - "label": "__gap_1", - "offset": 0, - "slot": "500", - "type": "t_array(t_uint256)50_storage", - "contract": "AttestationVerifierZK", - "src": "contracts/periphery/AttestationVerifierZK.sol:77" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)24_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)24_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)145_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)24_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)24_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "e7a68fa27b128bc3850e30d00d87ca99fab3fbd15c971f14e53b972c977a9c72": { - "address": "0x945f7377DEbd7Ce21bEF5D80C262267D97CA7759", - "txHash": "0xfb3fee50bdbb6b5fdaca774d828bff6702ca27625377b1bfc5e3f9f7e562dfc0", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "AttestationVerifierZK", - "src": "contracts/periphery/AttestationVerifierZK.sol:23" - }, - { - "label": "__gap_1", - "offset": 0, - "slot": "500", - "type": "t_array(t_uint256)50_storage", - "contract": "AttestationVerifierZK", - "src": "contracts/periphery/AttestationVerifierZK.sol:68" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)24_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)24_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)145_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)24_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)24_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "bdd58ab84f028155cbcb167b06107fc874fccfe69924cb441d7cac3b9ff01569": { - "address": "0x5495152e337B34FF8fE2a8C9d687c2081238e4d5", - "txHash": "0x3c216436f812ed05058cfd37a0768fc664aa3dce13413ff7df1258451b168c35", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "AttestationVerifierZK", - "src": "contracts/periphery/AttestationVerifierZK.sol:23" - }, - { - "label": "__gap_1", - "offset": 0, - "slot": "500", - "type": "t_array(t_uint256)50_storage", - "contract": "AttestationVerifierZK", - "src": "contracts/periphery/AttestationVerifierZK.sol:68" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)24_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)24_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)145_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)24_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)24_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "37307502cf2c8568320f88e5726bbf163af3aa41dd59e0dc43174981cb932ced": { - "address": "0xc567DB33c84A4c26DE59c02eFa32BCD25E24E7bD", - "txHash": "0x339fa3f7c469fcd6e4bf8d8a7722ac160fd8a9856e42ea77f280428a20552042", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "AttestationVerifierZK", - "src": "contracts/periphery/AttestationVerifierZK.sol:23" - }, - { - "label": "__gap_1", - "offset": 0, - "slot": "500", - "type": "t_array(t_uint256)50_storage", - "contract": "AttestationVerifierZK", - "src": "contracts/periphery/AttestationVerifierZK.sol:68" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)24_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)24_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)145_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)24_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)24_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "e30d13609837526efc8c288727635f6766850cc119af39b4596c83a44da8960d": { - "address": "0xa454639b8c5c025c1DB6646028c037e170208D96", - "txHash": "0xa0b741ed8559a695ce299fd9ba1be74a730a0d5d9b151d300e691a82e38bf0fe", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "AttestationVerifierZK", - "src": "contracts/periphery/AttestationVerifierZK.sol:23" - }, - { - "label": "__gap_1", - "offset": 0, - "slot": "500", - "type": "t_array(t_uint256)50_storage", - "contract": "AttestationVerifierZK", - "src": "contracts/periphery/AttestationVerifierZK.sol:68" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)24_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)24_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)145_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)24_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)24_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "38441854703380b9af057220949c3a02d301c9fa4e9ccb5f9fb138bc8a463e15": { - "address": "0x158Ee871a884CE3454281599B22F3eeE9257467E", - "txHash": "0x5bd3b007764a9eb80b92f82b958855c30f3828a60c20d147ca2b6089301c7865", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "AttestationVerifierZK", - "src": "contracts/periphery/AttestationVerifierZK.sol:23" - }, - { - "label": "__gap_1", - "offset": 0, - "slot": "500", - "type": "t_array(t_uint256)50_storage", - "contract": "AttestationVerifierZK", - "src": "contracts/periphery/AttestationVerifierZK.sol:68" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)24_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)24_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)145_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)24_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)24_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "f5fe34edc1f918d1a54953369559ff697a532de0be7b272cd9051916da568643": { - "address": "0xF4fA6380281d4d03809c6F3885F518bC9d957451", - "txHash": "0x6aa4f1ed21b4ffc4dfd00ead02d1bbfdf674d45d64bd22c360a02cdcd95e0b6f", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "AttestationProofVerifier", - "src": "contracts/periphery/AttestationVerifierZKWithRisczeroRouter.sol:23" - }, - { - "label": "__gap_1", - "offset": 0, - "slot": "500", - "type": "t_array(t_uint256)50_storage", - "contract": "AttestationProofVerifier", - "src": "contracts/periphery/AttestationVerifierZKWithRisczeroRouter.sol:68" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)24_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)24_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)145_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)24_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)24_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - } - } -} diff --git a/.openzeppelin/unknown-80002.json b/.openzeppelin/unknown-80002.json deleted file mode 100644 index 71d3b1f..0000000 --- a/.openzeppelin/unknown-80002.json +++ /dev/null @@ -1,1320 +0,0 @@ -{ - "manifestVersion": "3.2", - "proxies": [ - { - "address": "0xC4649F67661a8B75021fA24325cB31d75D7133c2", - "txHash": "0x495d0b4747315bb48416db59b3fdc47cd5b5d51aee4e602216a3b3425ac16c29", - "kind": "uups" - }, - { - "address": "0xD156f6f2c137f467C57c6C48BC8561bA357d831A", - "txHash": "0x649115d410a328c98a4b0de7d669c7b33300b0aa15cfe8c3d483a6317512695a", - "kind": "uups" - }, - { - "address": "0x6F7294624a7f1a7D42ece3A7CAcF5f8534FAF131", - "txHash": "0xc3195ed9783e3c438154c9ffd7386613d0b8d8605f236f82f43c21ab147131b9", - "kind": "uups" - }, - { - "address": "0xC324f0984C927dBfCb8ef39e4C41A4826c94Ee19", - "txHash": "0x418cfe484ef61aac1b3cdc76198af1c852098ca234ccd2e4f3e534545420f9a3", - "kind": "uups" - }, - { - "address": "0x3Ba07c2c289a9611E83a2a06dcc6079367712293", - "txHash": "0x66ad6fbc9287e0a10a0d11492bb498e4718beb2a40882df706a67fb3260ff107", - "kind": "uups" - }, - { - "address": "0xe089900aaCB8461774bCe08fb60E1483eB1Dc252", - "txHash": "0x51dfcfc5f0a8aadce6f13e4c4b05a4662fb6e027b40c65dbe823dcc0c2ea01f0", - "kind": "uups" - }, - { - "address": "0xc78dE999D1E21554D70504c058F6cC229b6F05A3", - "txHash": "0x7049a1e60f4a9913aed09119eebbf7ea67db2774905b483fb85cf235cab1c626", - "kind": "uups" - }, - { - "address": "0x2e9F7aFBaE93C2d2f39C5F6f4303176133A2FBEa", - "txHash": "0x9cc7424cef1f509d3731d700ecccb3b4bc6a29be7402681c17dd041d4e6a9a26", - "kind": "uups" - } - ], - "impls": { - "e17e51fff59953898824bb5aed6cf5cefdb6e429c5e4ca473a7b252ced35b67e": { - "address": "0x1Ba09e13f95cACB274bbD28854D7712721248314", - "txHash": "0xd736f7d8ac8343c586238ce3612f87d39df4ca92350f77243d73ab577b97d7fa", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:29" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:51" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:53" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:174" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))": { - "label": "mapping(bytes32 => mapping(bytes32 => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)1412_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(AttestationAutherStorage)1429_storage": { - "label": "struct AttestationAutherUpgradeable.AttestationAutherStorage", - "members": [ - { - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1412_storage)", - "offset": 0, - "slot": "0" - }, - { - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "offset": 0, - "slot": "1" - }, - { - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(EnclaveImage)1412_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:marlin.oyster.storage.AttestationAuther": [ - { - "contract": "AttestationAutherUpgradeable", - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1412_storage)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:31", - "offset": 0, - "slot": "0" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:32", - "offset": 0, - "slot": "1" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:33", - "offset": 0, - "slot": "2" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "537ddd3e64cf6c3d220192bfd3e845946175e7c1004cb9feeada6b9b09aa3fac": { - "address": "0x70E86295Dd9Dc86424c90f35d6fDD154C46ff455", - "txHash": "0x591b9992d8fc27173a061a91c7c33be41ec313f07b367fa8c595de4bf467beb9", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:29" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:51" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:53" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:174" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))": { - "label": "mapping(bytes32 => mapping(bytes32 => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)1412_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(AttestationAutherStorage)1429_storage": { - "label": "struct AttestationAutherUpgradeable.AttestationAutherStorage", - "members": [ - { - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1412_storage)", - "offset": 0, - "slot": "0" - }, - { - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "offset": 0, - "slot": "1" - }, - { - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(EnclaveImage)1412_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:marlin.oyster.storage.AttestationAuther": [ - { - "contract": "AttestationAutherUpgradeable", - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1412_storage)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:31", - "offset": 0, - "slot": "0" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:32", - "offset": 0, - "slot": "1" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:33", - "offset": 0, - "slot": "2" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "69e4e5a66c967a6ad45b3b6bd5dc89918cad2e8e086cf0bb6bbc1bff5e6b30c0": { - "address": "0x99eFbc7FFB0A04D445926e3A294aF32C2b6D4aC4", - "txHash": "0x85537ce1ad1c72764926040f7d3b5db4b285534fd5f8a0625fbd794cb9f475a7", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:29" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_struct(Generator)3374_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:72" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:73" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:75" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:76" - }, - { - "label": "proofMarketplace", - "offset": 0, - "slot": "504", - "type": "t_contract(ProofMarketplace)7669", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:78" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:762" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketplace)7669": { - "label": "contract ProofMarketplace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)3353": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)3374_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(Generator)3374_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketplaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)3386_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)3353", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "e50fa3623bd1b46c5f8e2321c2917a71db36172e99c7806649a493605206499e": { - "address": "0xc6951181FA982c1D2625a1859B3374C88e0cE303", - "txHash": "0xe54742703959e5a5d5dec5d62577fd2d3d52dd92b303cca0a963b2606565cad9", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:31" - }, - { - "label": "marketData", - "offset": 0, - "slot": "500", - "type": "t_array(t_struct(Market)5701_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:111" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "501", - "type": "t_array(t_struct(AskWithState)5738_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:113" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_enum(SecretType)5712,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:115" - }, - { - "label": "claimableAmount", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:117" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "504", - "type": "t_array(t_uint256)50_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:754" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(PausableStorage)219_storage": { - "label": "struct PausableUpgradeable.PausableStorage", - "members": [ - { - "label": "_paused", - "type": "t_bool", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_struct(AskWithState)5738_storage)dyn_storage": { - "label": "struct ProofMarketplace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Market)5701_storage)dyn_storage": { - "label": "struct ProofMarketplace.Market[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IVerifier)7730": { - "label": "contract IVerifier", - "numberOfBytes": "20" - }, - "t_enum(AskState)5708": { - "label": "enum ProofMarketplace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)5712": { - "label": "enum ProofMarketplace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)5712,t_uint256)": { - "label": "mapping(enum ProofMarketplace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_struct(Ask)5727_storage": { - "label": "struct ProofMarketplace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)5738_storage": { - "label": "struct ProofMarketplace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)5727_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)5708", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)5701_storage": { - "label": "struct ProofMarketplace.Market", - "members": [ - { - "label": "verifier", - "type": "t_contract(IVerifier)7730", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "4" - }, - { - "label": "creator", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.Pausable": [ - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - } - } -} diff --git a/.openzeppelin/unknown-987.json b/.openzeppelin/unknown-987.json deleted file mode 100644 index 3123d24..0000000 --- a/.openzeppelin/unknown-987.json +++ /dev/null @@ -1,14214 +0,0 @@ -{ - "manifestVersion": "3.2", - "proxies": [ - { - "address": "0xB5A809888791909e1D54CfB5329E8f3288fc2edC", - "txHash": "0x41ed2928da5b61207ed93ea13acac752a54f779240a3238fbda309a73b7a31c5", - "kind": "uups" - }, - { - "address": "0xdC2E14cD44ed4797F5072c6A76DA6ac5a64B3806", - "txHash": "0xe88138e1316d6616292e28cf13e552aaf666e62fed8676653e3561311e4f179f", - "kind": "uups" - }, - { - "address": "0x7F4c70BBf268Ff719C5fF9D58E5F2af0A8818eFC", - "txHash": "0xc2b6c50ba329ca332002dbf88ffa128a4e17926a8d550fdbf021940d34b643d9", - "kind": "uups" - }, - { - "address": "0xfcCaFF5576B911C07197A8e90F62199f290aeb14", - "txHash": "0x8c0c939df65dc164c9bf79b2cf5b5cdc2370768b8ce11e64522edf9761b044df", - "kind": "uups" - }, - { - "address": "0x9d5c19AeFF8d24f1d54E91ca44cF9D456f440891", - "txHash": "0xb1338e3e04e3c609f09e1494346954d6bffeb1fc3aa7603d9b783f9224b4493c", - "kind": "uups" - }, - { - "address": "0xfb4869e0C70CC2b187734C695F55e94e8D075F85", - "txHash": "0xe53fd6f5057358e65ad98c1e54b110f23f74074b304e2624eac5a61e85e2ff3c", - "kind": "uups" - }, - { - "address": "0x506915a0d1cC9E0E71b0498769Ca5c591Bc7C708", - "txHash": "0xfdb61d2bb0cee3459640c1bde2b8b18a8ccd053ad5abff961b7fdd6d2fbfc96d", - "kind": "uups" - }, - { - "address": "0x3A97a6dF767620fB89e79070Fe6c1E7d90c2d923", - "txHash": "0x7baff28b124fe0a30c37a5a90f65542b9d3b4369127b2ece597d9377f17bf593", - "kind": "uups" - }, - { - "address": "0x0eDF7418aaB77e69DEF80785e7e88d5d27435136", - "txHash": "0x86b51c50beb512750d87672e39b02febf15c157ee7a5374f772e2c7cb27cd9d3", - "kind": "uups" - }, - { - "address": "0xDc7267F26bC829742367e1c429CB64357B49BFF0", - "txHash": "0xb520a2c17668a12dc1dce971dd6af8cf848bdc9f7c7930e07f4daa5ca1fd1a7d", - "kind": "uups" - }, - { - "address": "0x1D34cfc1477BDA6D5D4D30f83c8D0244A78914b3", - "txHash": "0xdf036ae2f2eeb4a93f9b1b3f9692834d1a8f1a2bea497fc75023f3204479da79", - "kind": "uups" - }, - { - "address": "0x7A46BB224997D21f6e0F1219D2B4f2cFc7CA1F2C", - "txHash": "0x99a4619fddc61cb42291e47c9ea8c86f940004160562a3df43a64cd9019e8ae9", - "kind": "uups" - }, - { - "address": "0x5148269507c7563665C6BBEc0ddbbA945Ce4E5b7", - "txHash": "0xc3ab7dce7e6b3391683214822197a6b5efe72ed10d50b0ca59d329b44e551a87", - "kind": "uups" - }, - { - "address": "0x89A45Aab8dCE61708BA6B52B23079CBC6487bd8d", - "txHash": "0x5b57309f5d7e4bd7df056ceedfe9aaba89ce38cd4a6c3c4700a49468ddccce6d", - "kind": "uups" - }, - { - "address": "0x42223a0536CA5B48687D15d295308068Ca37ed9b", - "txHash": "0x1f533e99331ccf1bac7a61184251b53f5659ba09a69ffaf029e654e0880c8cf9", - "kind": "uups" - }, - { - "address": "0x2B8E1E7ce2dC60a948efE4a38425fF24c98b3E8A", - "txHash": "0x5e17a6c451640e458d8801d42d520df21ca259932682b244b7fdeeb3e7fd1767", - "kind": "uups" - }, - { - "address": "0x099151D94D7036174016e22bc5D47F5D1b827F2B", - "txHash": "0xa705f0a1701ab1de9890e4bc5bfa666a8f19c3e8505722f2a4a8270aa1beb204", - "kind": "uups" - }, - { - "address": "0x560FCeb707B0F4b56d43d295e45eD7FE939b96b6", - "txHash": "0xb26b1cb78892f36a859f692860fa98ffceae287555a8d86fbc5070a819b22d39", - "kind": "uups" - }, - { - "address": "0x0Ffd0c4c7B38feC7Aeac012966A75608E11E8B55", - "txHash": "0xf8d0e06ec0c1cbda3cddc95905444dfba9f676626a3cd70ef4a3b64db8dd08d1", - "kind": "uups" - }, - { - "address": "0xeD57605C0449Ed75eC33C2cA255937a776F5D0ca", - "txHash": "0x17048c011bd48798725fd7baebda3d9a0a5d331b2582bd137461d006b042e059", - "kind": "uups" - }, - { - "address": "0xaF8405c678214Aa22c9b2F2D2729C68BD6A0aF5d", - "txHash": "0x82bbcbf5e62f62c232ad3fa9f738957386c9439163dda5540be332d8b564497f", - "kind": "uups" - }, - { - "address": "0x790bf421844e80fe99943f6D2ad1b70810fe519D", - "txHash": "0x270dbde9a0c817fcf161c3fe8009bf0d6c1943110b9bbfeb1031489c4b7ef451", - "kind": "uups" - }, - { - "address": "0xB5d7D7Ad08ec44E2A719A55009b887c5Bb146D8e", - "txHash": "0xe09189def7f38dffec469f515f939921cd37f03a6a8f44d52d009cc674779104", - "kind": "uups" - }, - { - "address": "0xb26A9187B5aE28A8A26613CDe2676dC21e5B86f0", - "txHash": "0x103050da058b634327c262ef5f0d933e40e16dca25261311c1e1a31e177e7b24", - "kind": "uups" - }, - { - "address": "0x4D7f1A8Ce78d1132DF9a8e20e99C38587278E536", - "txHash": "0x0317ff4ba373c541a953b6d013f85fb5a5878311ca8195442d6cf3a569132b33", - "kind": "uups" - }, - { - "address": "0x5063dC8f8C375EeB31E774d1e93217c0e97fAf0c", - "txHash": "0x3fc15b92087624d55cffe482dfda665b292f6865c43beb62c1e9d1dc1898fcb4", - "kind": "uups" - }, - { - "address": "0x1A8BE5A61456e0BAC769bdC009f89CA21F12B664", - "txHash": "0xfa634cba55b92db2a226acc540dc5151d66064f0b88798df2040cd82a6191b11", - "kind": "uups" - }, - { - "address": "0x5913e113C0bf301C7e265e45c364AE556c79dd6E", - "txHash": "0x6585515b5d660cd7984dff1f92894e8ef403da1db5412fee1ee08d8e6c779259", - "kind": "uups" - }, - { - "address": "0x2CaFAF95bdC5929639B3e7480Eb4cd41C0ddd4F2", - "txHash": "0x6c20b68487ccfce4363163f849632a72fee1fbf023738dc921b69ee03df4ab1d", - "kind": "uups" - }, - { - "address": "0x5bec7266B38EFA2D3cf1bC073eE7994aB7C9560c", - "txHash": "0xb61c74b386c0ac99367a1d92f6a11cff5fdf6381ae4459f931b6be93cd5013b1", - "kind": "uups" - }, - { - "address": "0xBb80d7aAcCC58beC295DaF5F5c54543f98fB2e08", - "txHash": "0x8c4b8093308b4c5e549198ac34a9dfd46a8f63bc6f7d00e24560c84e382c6b24", - "kind": "uups" - }, - { - "address": "0x02FFaf6870e33D8D7bfE8E2FFfed246000b09E9f", - "txHash": "0xfa56136136822a6f82f19693b7dfb2559196af9f966b1bf09acc4ea5d5c30376", - "kind": "uups" - }, - { - "address": "0x6BfD9524804107d55c12BaE8ac6F812cCb464B88", - "txHash": "0x5a629ad3e493d35af4084fa93cbb2d743c6450bbc3a5486e26203b3aa8d4bea7", - "kind": "uups" - }, - { - "address": "0xd7aDF110056185Bc08348D2C94865aD6F94819F1", - "txHash": "0x47c1da2a4b10f64f2576f5baeb176b46ebe68c19ef4799ea004bd952ef994402", - "kind": "uups" - }, - { - "address": "0x12178aE1Ac29fcBaA66A9A9E2C15843C9441fec8", - "txHash": "0x5c562f641a044193a541ae10116a3b485bf8522d9f1c89204137da022c1c401e", - "kind": "uups" - }, - { - "address": "0x7de8c1bA4e167f2487cbAF5275cac209ff5F82Ce", - "txHash": "0x7e4daba15774a53b81c4cabafcf02cdc91832dbf73c248bc2d3f0d5c13e1da70", - "kind": "uups" - }, - { - "address": "0xc5Da5C6Ce07566634F904e32a861cc358C89bA8A", - "txHash": "0xc499c64687754d7b20fa1fb4d2464f0c5986d0ebbe9dd0ef4a3edd467b173e13", - "kind": "uups" - }, - { - "address": "0xDB451516a135f76aADb2168fA5E1d4cA263B05b7", - "txHash": "0x3e3f64803e05e42a10444e669e014b4d2ef0ca958d1bd572146a3cd7e685aba9", - "kind": "uups" - }, - { - "address": "0xfbA65e93B14ddc9000203D7356c9775113d72846", - "txHash": "0x2d828c9c4444d8312f224537b716ce7a1d27c5885f6c8010812f1e3a52b28214", - "kind": "uups" - }, - { - "address": "0xd4E0a6CC7c745336A73f342DE94bb1d328164496", - "txHash": "0x1e9d814ab830055e103c2139a8df66e3ead07c85941814dd5cba122218a5a0ea", - "kind": "uups" - }, - { - "address": "0x814fAa6dAf393cB3F833F301dcB18EF10d3aC9BB", - "txHash": "0x283e81c9465271e01f424efa5039bb6b993fcf16f58c386081c2cab1bb959c03", - "kind": "uups" - }, - { - "address": "0x14340911790Fa90E1a551d53D2c88520c099aae7", - "txHash": "0xdcded56f24a213c5f4c58ff24217f330f8f056b5a19870c890124c5ecc2ab5d5", - "kind": "uups" - }, - { - "address": "0x6595525c6E7036d015dEfa3eD74Fa05065d15205", - "txHash": "0x507057d5d528bfd46ea8ed8583c2a19be7ba9a1db389481e4031c05961e93ca1", - "kind": "uups" - }, - { - "address": "0x879c498dA74f969112a4f290291A870C9e996730", - "txHash": "0xf1eb0aa568786b6f52265f72bed749f7ed3ddaaca1b45de3cd4a1d05e5374ccc", - "kind": "uups" - }, - { - "address": "0xCC1099e82Cfff4F56B014eE1de0Ff076640a6f1F", - "txHash": "0x45dba783a13f69d37afb56821cf31768196fec9853db18fb8afbf19bbf6fb179", - "kind": "uups" - }, - { - "address": "0xA0Fbd852C6226b3E97eA141c72713dCb851DaCdE", - "txHash": "0x1140b3180921464156abb559fdaf7116980f5fc8b998de2c981c2cd2a5eb3784", - "kind": "uups" - }, - { - "address": "0xACF6f015767b4B8e50E679BB663d3F1216E3DA57", - "txHash": "0xc03942f94b3579227b46db804809d8478f279bd36e6918d4ef6f38f8f9567264", - "kind": "uups" - }, - { - "address": "0x8c91fd2e5eb80bA16f1324EEe893f972fedb03C0", - "txHash": "0x065819fd0d79f606249f9891507c5731414899d93d8b962baa6b0c64125586c2", - "kind": "uups" - }, - { - "address": "0x258Fa4dE35009E36A164c453Dc5e7117C2d6120c", - "txHash": "0x79d85bb5aea6ba70d312f2efd4f649cd1c9cccfd36aeda389e5beace886a2bc0", - "kind": "uups" - }, - { - "address": "0x2B2c137cCeB96a7Db432bC62d009074f0f6BcF49", - "txHash": "0x272023cb35c9f41ebdfd16440d77b8a25ef34e9b07740384dc9ea50c9b7bcd93", - "kind": "uups" - }, - { - "address": "0x4a7006516159161E7D8B73802237D29d231a51D4", - "txHash": "0x92ef0cfbf2cdf638e7beaa7b8922110c9d587ce4b73a320a134d030a2591cd7b", - "kind": "uups" - }, - { - "address": "0x43b2E5a0AB89A0F7AEb785883fBE9B77A25B298b", - "txHash": "0x19dc794ed4e5a22568b0a17d52c482997a6af75b0f914186cad902ee9c0bc995", - "kind": "uups" - }, - { - "address": "0xeeB96A7d31B56AD48aDc85908f01B20689F7E17f", - "txHash": "0xffe698c45e3c2f80611395dba5bdeb1ae2264403a52af286ec18845e3223552f", - "kind": "uups" - }, - { - "address": "0x103e9C0e8E0A745A41F8A52142F452E7f8fAaCAd", - "txHash": "0x309f4d588a6f6af77c37c9a6995564a393b285b2be32b07aef0028358365f13d", - "kind": "uups" - }, - { - "address": "0x6441dcD0f88f70E912A873baaeC5d02e564Ebc78", - "txHash": "0xdb6659abe26539b42e2b6710ad28083227ce91d38e8998b814b3437baf379b0d", - "kind": "uups" - } - ], - "impls": { - "9b7e467484cce37b8d9fda12b51ca2b1b907b634af0969816f1b609e027166c8": { - "address": "0xEC8D112f0b685a78c5a97F087b4c4f2561636dAd", - "txHash": "0x1a1ed5d813cd07495d2039c38e321f445211092ffa33844e45e850ffd4e19e35", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:29" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:51" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:53" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:174" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))": { - "label": "mapping(bytes32 => mapping(bytes32 => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(AttestationAutherStorage)1436_storage": { - "label": "struct AttestationAutherUpgradeable.AttestationAutherStorage", - "members": [ - { - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "offset": 0, - "slot": "0" - }, - { - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "offset": 0, - "slot": "1" - }, - { - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(EnclaveImage)1419_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:marlin.oyster.storage.AttestationAuther": [ - { - "contract": "AttestationAutherUpgradeable", - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:31", - "offset": 0, - "slot": "0" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:32", - "offset": 0, - "slot": "1" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:33", - "offset": 0, - "slot": "2" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "8a141680ea3bb36033d7503fb88c4c3acba4f8590999d4048c8997b4d7cada30": { - "address": "0xFC02897B76538F2897e48146453027fFF8338BaA", - "txHash": "0xcef15f75d13599bf2cdb4d9d3dc423fe23396be9673ef2fbe160f49afabd6a88", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:29" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:51" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:53" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:174" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))": { - "label": "mapping(bytes32 => mapping(bytes32 => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(AttestationAutherStorage)1436_storage": { - "label": "struct AttestationAutherUpgradeable.AttestationAutherStorage", - "members": [ - { - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "offset": 0, - "slot": "0" - }, - { - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "offset": 0, - "slot": "1" - }, - { - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(EnclaveImage)1419_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:marlin.oyster.storage.AttestationAuther": [ - { - "contract": "AttestationAutherUpgradeable", - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:31", - "offset": 0, - "slot": "0" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:32", - "offset": 0, - "slot": "1" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:33", - "offset": 0, - "slot": "2" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "93d3d13bbcd62fbe2d98e9f35120ea859e64604c83ff804739d68c8a7b35fff2": { - "address": "0xCC1099e82Cfff4F56B014eE1de0Ff076640a6f1F", - "txHash": "0x36f70370f6bdd492f0e11d06982bf746f1332663d740db2ee90a83a394127981", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:29" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:51" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:53" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:174" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))": { - "label": "mapping(bytes32 => mapping(bytes32 => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(AttestationAutherStorage)1436_storage": { - "label": "struct AttestationAutherUpgradeable.AttestationAutherStorage", - "members": [ - { - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "offset": 0, - "slot": "0" - }, - { - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "offset": 0, - "slot": "1" - }, - { - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(EnclaveImage)1419_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:marlin.oyster.storage.AttestationAuther": [ - { - "contract": "AttestationAutherUpgradeable", - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:31", - "offset": 0, - "slot": "0" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:32", - "offset": 0, - "slot": "1" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:33", - "offset": 0, - "slot": "2" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "29d5863db4f4c66716892af359d5168e7ca4b6fddbc519a8daf5ceee2cac0cc1": { - "address": "0xD9d84D2C09b927aa3240B85221feA49D395c2c79", - "txHash": "0x0d92a5a9aeaad73e1a0a9fa6dc40b044d2773dfcbc40921a5451fc4d9e4ebf41", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:29" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:51" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:53" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:174" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))": { - "label": "mapping(bytes32 => mapping(bytes32 => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(AttestationAutherStorage)1436_storage": { - "label": "struct AttestationAutherUpgradeable.AttestationAutherStorage", - "members": [ - { - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "offset": 0, - "slot": "0" - }, - { - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "offset": 0, - "slot": "1" - }, - { - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(EnclaveImage)1419_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:marlin.oyster.storage.AttestationAuther": [ - { - "contract": "AttestationAutherUpgradeable", - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:31", - "offset": 0, - "slot": "0" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:32", - "offset": 0, - "slot": "1" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:33", - "offset": 0, - "slot": "2" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "219d58ba9c9c4fcb8dcd9e956d3f234ffc4d63fb6fae16ca5435b765f3549ec0": { - "address": "0x258Fa4dE35009E36A164c453Dc5e7117C2d6120c", - "txHash": "0xe87850a70e15ef3a12938a7d58987feff2136759f4dc54bd01e78a5c7efb0a2c", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:29" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:51" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:53" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:174" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))": { - "label": "mapping(bytes32 => mapping(bytes32 => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(AttestationAutherStorage)1436_storage": { - "label": "struct AttestationAutherUpgradeable.AttestationAutherStorage", - "members": [ - { - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "offset": 0, - "slot": "0" - }, - { - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "offset": 0, - "slot": "1" - }, - { - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(EnclaveImage)1419_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:marlin.oyster.storage.AttestationAuther": [ - { - "contract": "AttestationAutherUpgradeable", - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:31", - "offset": 0, - "slot": "0" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:32", - "offset": 0, - "slot": "1" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:33", - "offset": 0, - "slot": "2" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "f5f432e3c2cde760dca251f591f5a323a5a96ce5e69f578190b4a238f596664c": { - "address": "0x2B2c137cCeB96a7Db432bC62d009074f0f6BcF49", - "txHash": "0x35d4685777a60f782aec09ec09607535288cfadddff6cee7de869355333c6171", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:29" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_struct(Generator)3374_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:72" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:73" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:75" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:76" - }, - { - "label": "proofMarketplace", - "offset": 0, - "slot": "504", - "type": "t_contract(ProofMarketplace)7709", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:78" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:762" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketplace)7709": { - "label": "contract ProofMarketplace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)3353": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)3374_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(Generator)3374_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketplaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)3386_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)3353", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "187de59a6a5a0b9c6299523ad74632d309cbf06ed419e9f054645c7916bf23c8": { - "address": "0x4a7006516159161E7D8B73802237D29d231a51D4", - "txHash": "0x3bbef04e9584fc49f3ab5988915418c6b5fe99261051e5002eeac95d20faa191", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:31" - }, - { - "label": "marketData", - "offset": 0, - "slot": "500", - "type": "t_array(t_struct(Market)5706_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:111" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "501", - "type": "t_array(t_struct(AskWithState)5743_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:113" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_enum(SecretType)5717,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:116" - }, - { - "label": "minProvingTime", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_enum(SecretType)5717,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:118" - }, - { - "label": "claimableAmount", - "offset": 0, - "slot": "504", - "type": "t_mapping(t_address,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:120" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:768" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(PausableStorage)219_storage": { - "label": "struct PausableUpgradeable.PausableStorage", - "members": [ - { - "label": "_paused", - "type": "t_bool", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_struct(AskWithState)5743_storage)dyn_storage": { - "label": "struct ProofMarketplace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Market)5706_storage)dyn_storage": { - "label": "struct ProofMarketplace.Market[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IVerifier)7770": { - "label": "contract IVerifier", - "numberOfBytes": "20" - }, - "t_enum(AskState)5713": { - "label": "enum ProofMarketplace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)5717": { - "label": "enum ProofMarketplace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)5717,t_uint256)": { - "label": "mapping(enum ProofMarketplace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_struct(Ask)5732_storage": { - "label": "struct ProofMarketplace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)5743_storage": { - "label": "struct ProofMarketplace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)5732_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)5713", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)5706_storage": { - "label": "struct ProofMarketplace.Market", - "members": [ - { - "label": "verifier", - "type": "t_contract(IVerifier)7770", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "4" - }, - { - "label": "creator", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.Pausable": [ - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "cb002400f5c60474761e36fe572fdad1cb42c27ab2d4634a260b9b36701e76f2": { - "address": "0x731836c3d9C1DC656b3C306DbB8f6A510a70Cdb8", - "txHash": "0x092ad72d3843ac4852263aeb7170c84316adc612e2dca4984926f202ccd30ed3", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:29" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:51" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:53" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:174" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))": { - "label": "mapping(bytes32 => mapping(bytes32 => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(AttestationAutherStorage)1436_storage": { - "label": "struct AttestationAutherUpgradeable.AttestationAutherStorage", - "members": [ - { - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "offset": 0, - "slot": "0" - }, - { - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "offset": 0, - "slot": "1" - }, - { - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(EnclaveImage)1419_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:marlin.oyster.storage.AttestationAuther": [ - { - "contract": "AttestationAutherUpgradeable", - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:31", - "offset": 0, - "slot": "0" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:32", - "offset": 0, - "slot": "1" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:33", - "offset": 0, - "slot": "2" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "0102bfc69932763ddb5585f2cce1a6ac0463aec69a85182b19c5d851b21bf489": { - "address": "0xE31295fba524Bb012A13B56F885A5dbd77A6d647", - "txHash": "0xff7730516123fd00267afd2dfef7749210a4cd46760d30701ade78c14c040883", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:29" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_struct(Generator)3374_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:72" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:73" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:75" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:76" - }, - { - "label": "proofMarketplace", - "offset": 0, - "slot": "504", - "type": "t_contract(ProofMarketplace)7709", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:78" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:762" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketplace)7709": { - "label": "contract ProofMarketplace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)3353": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)3374_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(Generator)3374_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketplaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)3386_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)3353", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "7f533a75c8c75b054f80eed77f072a2a8a3ecfcf5ed9fad2cc6ce658f1ff2f38": { - "address": "0x137ddaeF2E31a3B883e98DBC273b0FB980c2813E", - "txHash": "0x907c5034cf5f13bb317f69ada73bcdd98d9d657fd77cef797dff91d95a951e3e", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:29" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:51" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:53" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:174" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))": { - "label": "mapping(bytes32 => mapping(bytes32 => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(AttestationAutherStorage)1436_storage": { - "label": "struct AttestationAutherUpgradeable.AttestationAutherStorage", - "members": [ - { - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "offset": 0, - "slot": "0" - }, - { - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "offset": 0, - "slot": "1" - }, - { - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(EnclaveImage)1419_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:marlin.oyster.storage.AttestationAuther": [ - { - "contract": "AttestationAutherUpgradeable", - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:31", - "offset": 0, - "slot": "0" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:32", - "offset": 0, - "slot": "1" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:33", - "offset": 0, - "slot": "2" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "10306b8af76810a1fd7019fa8f68c79ebf3cf16ff0c13a3fc082848c3a6f5584": { - "address": "0xc5c263D707Db97FC1dD3A5806142357c1b102EB8", - "txHash": "0x5e4427000e466bcdf649d239fc0aa82c533225759eb5df1c8d65e87d8d05ca06", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:29" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_struct(Generator)3374_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:72" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:73" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:75" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:76" - }, - { - "label": "proofMarketplace", - "offset": 0, - "slot": "504", - "type": "t_contract(ProofMarketplace)7709", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:78" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:762" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketplace)7709": { - "label": "contract ProofMarketplace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)3353": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)3374_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(Generator)3374_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketplaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)3386_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)3353", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "9688596383a55b6b6c1b8bb37862bf946dbad73f88d8a3fad61da3fac06cdd9f": { - "address": "0xA88940E3D307A002E9342E130FAFC97545277469", - "txHash": "0x6f93f7f5752fad32633cbbd69f8af44160607dca6157c0d1d69d8a5ab3f6ed0d", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:31" - }, - { - "label": "marketData", - "offset": 0, - "slot": "500", - "type": "t_array(t_struct(Market)5706_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:111" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "501", - "type": "t_array(t_struct(AskWithState)5743_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:113" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_enum(SecretType)5717,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:116" - }, - { - "label": "minProvingTime", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_enum(SecretType)5717,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:118" - }, - { - "label": "claimableAmount", - "offset": 0, - "slot": "504", - "type": "t_mapping(t_address,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:120" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:768" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(PausableStorage)219_storage": { - "label": "struct PausableUpgradeable.PausableStorage", - "members": [ - { - "label": "_paused", - "type": "t_bool", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_struct(AskWithState)5743_storage)dyn_storage": { - "label": "struct ProofMarketplace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Market)5706_storage)dyn_storage": { - "label": "struct ProofMarketplace.Market[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IVerifier)7770": { - "label": "contract IVerifier", - "numberOfBytes": "20" - }, - "t_enum(AskState)5713": { - "label": "enum ProofMarketplace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)5717": { - "label": "enum ProofMarketplace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)5717,t_uint256)": { - "label": "mapping(enum ProofMarketplace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_struct(Ask)5732_storage": { - "label": "struct ProofMarketplace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)5743_storage": { - "label": "struct ProofMarketplace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)5732_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)5713", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)5706_storage": { - "label": "struct ProofMarketplace.Market", - "members": [ - { - "label": "verifier", - "type": "t_contract(IVerifier)7770", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "4" - }, - { - "label": "creator", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.Pausable": [ - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "4169d26512de5be19b3ebd2e4c68268236d17953afbfa08dff08b7a2f4d10878": { - "address": "0x3022Cb389bb3bc6912e5F04e00613dB0d28cA05C", - "txHash": "0xd4f9196cc0c12b6f75d33bdb3b3fb88913cf5cf305de85f02f0ff699eb2ee4de", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:29" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:51" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:53" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:174" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))": { - "label": "mapping(bytes32 => mapping(bytes32 => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(AttestationAutherStorage)1436_storage": { - "label": "struct AttestationAutherUpgradeable.AttestationAutherStorage", - "members": [ - { - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "offset": 0, - "slot": "0" - }, - { - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "offset": 0, - "slot": "1" - }, - { - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(EnclaveImage)1419_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:marlin.oyster.storage.AttestationAuther": [ - { - "contract": "AttestationAutherUpgradeable", - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:31", - "offset": 0, - "slot": "0" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:32", - "offset": 0, - "slot": "1" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:33", - "offset": 0, - "slot": "2" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "a91322259e5394d5b4cb1ffca0d6683fce2090f391b7ef41b35168753b2d2dba": { - "address": "0x8cA93838c539A40C1189d94E569241b30782B4d6", - "txHash": "0x1695b7b9937ac9a5c8913936a6698b55aa6fe2059458a035d137ae0c7e978fd7", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:29" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_struct(Generator)3374_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:72" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:73" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:75" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:76" - }, - { - "label": "proofMarketplace", - "offset": 0, - "slot": "504", - "type": "t_contract(ProofMarketplace)7709", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:78" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:762" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketplace)7709": { - "label": "contract ProofMarketplace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)3353": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)3374_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(Generator)3374_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketplaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)3386_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)3353", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "cdae507dbbe56dc9978f541b6040547df74ab3a096bc0480bde5335f9565211f": { - "address": "0xCe23FfE37A1669CfD0081109aFC680c8503888f8", - "txHash": "0x188c8f5210bb86d164ea3024aaf19949010943183b89faba5c1fad24c13a7f35", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:31" - }, - { - "label": "marketData", - "offset": 0, - "slot": "500", - "type": "t_array(t_struct(Market)5706_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:111" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "501", - "type": "t_array(t_struct(AskWithState)5743_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:113" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_enum(SecretType)5717,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:116" - }, - { - "label": "minProvingTime", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_enum(SecretType)5717,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:118" - }, - { - "label": "claimableAmount", - "offset": 0, - "slot": "504", - "type": "t_mapping(t_address,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:120" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:768" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(PausableStorage)219_storage": { - "label": "struct PausableUpgradeable.PausableStorage", - "members": [ - { - "label": "_paused", - "type": "t_bool", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_struct(AskWithState)5743_storage)dyn_storage": { - "label": "struct ProofMarketplace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Market)5706_storage)dyn_storage": { - "label": "struct ProofMarketplace.Market[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IVerifier)7770": { - "label": "contract IVerifier", - "numberOfBytes": "20" - }, - "t_enum(AskState)5713": { - "label": "enum ProofMarketplace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)5717": { - "label": "enum ProofMarketplace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)5717,t_uint256)": { - "label": "mapping(enum ProofMarketplace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_struct(Ask)5732_storage": { - "label": "struct ProofMarketplace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)5743_storage": { - "label": "struct ProofMarketplace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)5732_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)5713", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)5706_storage": { - "label": "struct ProofMarketplace.Market", - "members": [ - { - "label": "verifier", - "type": "t_contract(IVerifier)7770", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "4" - }, - { - "label": "creator", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.Pausable": [ - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "3d45f1f19cd33186e65fe2dc288758bbaa975e513a0b8fade9e0bc2ad78d8ea9": { - "address": "0x2C6Cb0D54e03FD33A2d574eB05B8A61131423C30", - "txHash": "0x379c7400487d6ec319384e1e5e6b0776b3ba5afc7b4af5db23f35d8026ac5c98", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:29" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:51" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:53" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:174" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))": { - "label": "mapping(bytes32 => mapping(bytes32 => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(AttestationAutherStorage)1436_storage": { - "label": "struct AttestationAutherUpgradeable.AttestationAutherStorage", - "members": [ - { - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "offset": 0, - "slot": "0" - }, - { - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "offset": 0, - "slot": "1" - }, - { - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(EnclaveImage)1419_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:marlin.oyster.storage.AttestationAuther": [ - { - "contract": "AttestationAutherUpgradeable", - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:31", - "offset": 0, - "slot": "0" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:32", - "offset": 0, - "slot": "1" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:33", - "offset": 0, - "slot": "2" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "4bf4caef4e7a2b12fbe8abe300afb2fbcfc483b0e16a04789f8d87acc7747306": { - "address": "0x4Ef57C762EAf55f076721ed92C07f5CF4A9A34f7", - "txHash": "0x86f550b211d98210b906dbae008e0a0a77f460c0569793e55bbabd46db138de0", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:29" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_struct(Generator)3374_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:72" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:73" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:75" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:76" - }, - { - "label": "proofMarketplace", - "offset": 0, - "slot": "504", - "type": "t_contract(ProofMarketplace)7709", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:78" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:762" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketplace)7709": { - "label": "contract ProofMarketplace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)3353": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)3374_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(Generator)3374_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketplaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)3386_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)3353", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "1a597cfb909525e9940308e7ac5184324fc5d7a6b559835e85a6ca1fa41d2e89": { - "address": "0x84eC3dDf4fCd383E36852D2f8a68a413bc4452C6", - "txHash": "0x49904e06278c5e769be91a968db665ba18bcf1fda0648c7e0a8e7657ae7d6da6", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:31" - }, - { - "label": "marketData", - "offset": 0, - "slot": "500", - "type": "t_array(t_struct(Market)5706_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:111" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "501", - "type": "t_array(t_struct(AskWithState)5743_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:113" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_enum(SecretType)5717,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:116" - }, - { - "label": "minProvingTime", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_enum(SecretType)5717,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:118" - }, - { - "label": "claimableAmount", - "offset": 0, - "slot": "504", - "type": "t_mapping(t_address,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:120" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:768" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(PausableStorage)219_storage": { - "label": "struct PausableUpgradeable.PausableStorage", - "members": [ - { - "label": "_paused", - "type": "t_bool", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_struct(AskWithState)5743_storage)dyn_storage": { - "label": "struct ProofMarketplace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Market)5706_storage)dyn_storage": { - "label": "struct ProofMarketplace.Market[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IVerifier)7770": { - "label": "contract IVerifier", - "numberOfBytes": "20" - }, - "t_enum(AskState)5713": { - "label": "enum ProofMarketplace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)5717": { - "label": "enum ProofMarketplace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)5717,t_uint256)": { - "label": "mapping(enum ProofMarketplace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_struct(Ask)5732_storage": { - "label": "struct ProofMarketplace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)5743_storage": { - "label": "struct ProofMarketplace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)5732_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)5713", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)5706_storage": { - "label": "struct ProofMarketplace.Market", - "members": [ - { - "label": "verifier", - "type": "t_contract(IVerifier)7770", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "4" - }, - { - "label": "creator", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.Pausable": [ - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "e692bf5b4a13e508a45a2300bfff7ff8f6776c592126e6575dae7317097b67ff": { - "address": "0x980a76b933337711004047344DE3346E7aECCe1e", - "txHash": "0xbc2fbfffa93814d1724bda5a39adf01a8dddb7b4ea6fd654dcc585a660675300", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:29" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:51" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:53" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:174" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))": { - "label": "mapping(bytes32 => mapping(bytes32 => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(AttestationAutherStorage)1436_storage": { - "label": "struct AttestationAutherUpgradeable.AttestationAutherStorage", - "members": [ - { - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "offset": 0, - "slot": "0" - }, - { - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "offset": 0, - "slot": "1" - }, - { - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(EnclaveImage)1419_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:marlin.oyster.storage.AttestationAuther": [ - { - "contract": "AttestationAutherUpgradeable", - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:31", - "offset": 0, - "slot": "0" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:32", - "offset": 0, - "slot": "1" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:33", - "offset": 0, - "slot": "2" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "09a52f082d099e65c229038c90901984af1ecd3e46a39ec88b79c2babae2f9cd": { - "address": "0x15d546E3c9433eC274a4FBa355b83b2a650774C8", - "txHash": "0xbe806c459b12597aa00b35f1664ea7d8b5a84e9763c93726c5d8ae534cca33ba", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:29" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_struct(Generator)3374_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:72" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:73" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:75" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:76" - }, - { - "label": "proofMarketplace", - "offset": 0, - "slot": "504", - "type": "t_contract(ProofMarketplace)7709", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:78" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:762" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketplace)7709": { - "label": "contract ProofMarketplace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)3353": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)3374_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(Generator)3374_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketplaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)3386_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)3353", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "b33b6adc3539dbfc91725a5201b6ccec12262f3dec17d800711f627d8f2d67d5": { - "address": "0x73c35D9927D2f06f346F174Da05Fd645D95DE7b7", - "txHash": "0xef819334ca822b78e488e1ffe64b27291b8905e8bb863d764f53675a2d766b3b", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:31" - }, - { - "label": "marketData", - "offset": 0, - "slot": "500", - "type": "t_array(t_struct(Market)5706_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:111" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "501", - "type": "t_array(t_struct(AskWithState)5743_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:113" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_enum(SecretType)5717,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:116" - }, - { - "label": "minProvingTime", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_enum(SecretType)5717,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:118" - }, - { - "label": "claimableAmount", - "offset": 0, - "slot": "504", - "type": "t_mapping(t_address,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:120" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:768" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(PausableStorage)219_storage": { - "label": "struct PausableUpgradeable.PausableStorage", - "members": [ - { - "label": "_paused", - "type": "t_bool", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_struct(AskWithState)5743_storage)dyn_storage": { - "label": "struct ProofMarketplace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Market)5706_storage)dyn_storage": { - "label": "struct ProofMarketplace.Market[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IVerifier)7770": { - "label": "contract IVerifier", - "numberOfBytes": "20" - }, - "t_enum(AskState)5713": { - "label": "enum ProofMarketplace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)5717": { - "label": "enum ProofMarketplace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)5717,t_uint256)": { - "label": "mapping(enum ProofMarketplace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_struct(Ask)5732_storage": { - "label": "struct ProofMarketplace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)5743_storage": { - "label": "struct ProofMarketplace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)5732_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)5713", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)5706_storage": { - "label": "struct ProofMarketplace.Market", - "members": [ - { - "label": "verifier", - "type": "t_contract(IVerifier)7770", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "4" - }, - { - "label": "creator", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.Pausable": [ - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "d40fcb253d70e88c1e9342bdaccc59410abfef278a6c64a0af208b04ee6a5b65": { - "address": "0xFc3d65c9F14D28618F8Ba48a36f545FE1ec4354a", - "txHash": "0x4cb1dde905655fa0678925761bf9a01152358ecf860644d3eb86838249b75ca8", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:29" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:51" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:53" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:174" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))": { - "label": "mapping(bytes32 => mapping(bytes32 => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(AttestationAutherStorage)1436_storage": { - "label": "struct AttestationAutherUpgradeable.AttestationAutherStorage", - "members": [ - { - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "offset": 0, - "slot": "0" - }, - { - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "offset": 0, - "slot": "1" - }, - { - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(EnclaveImage)1419_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:marlin.oyster.storage.AttestationAuther": [ - { - "contract": "AttestationAutherUpgradeable", - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:31", - "offset": 0, - "slot": "0" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:32", - "offset": 0, - "slot": "1" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:33", - "offset": 0, - "slot": "2" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "e3b8617e16115f892045fbc9c6c9838fe891a702a0ccfc78068c7352b482b332": { - "address": "0xF05cc5DBAacF2b8055C95C0335C88f62611c5AF8", - "txHash": "0x9f12fd9216c776c9e9d8629823bbcd5bfef0ad78f0fbb2a337f51daf01c86bfe", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:29" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_struct(Generator)3374_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:72" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:73" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:75" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:76" - }, - { - "label": "proofMarketplace", - "offset": 0, - "slot": "504", - "type": "t_contract(ProofMarketplace)7709", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:78" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:762" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketplace)7709": { - "label": "contract ProofMarketplace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)3353": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)3374_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(Generator)3374_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketplaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)3386_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)3353", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "2e92059788ed432e5e55a7efd405dc6ed05cb8a54a85a8a062be53fc2c3a0aaa": { - "address": "0xaBF050D513D88f696F00e56bBa293A4C5Ca7512b", - "txHash": "0xcc57846b95db1314942eb6ad2ea7050673733cb80e87ef84817ea3b9cc19e507", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:31" - }, - { - "label": "marketData", - "offset": 0, - "slot": "500", - "type": "t_array(t_struct(Market)5706_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:111" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "501", - "type": "t_array(t_struct(AskWithState)5743_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:113" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_enum(SecretType)5717,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:116" - }, - { - "label": "minProvingTime", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_enum(SecretType)5717,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:118" - }, - { - "label": "claimableAmount", - "offset": 0, - "slot": "504", - "type": "t_mapping(t_address,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:120" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:768" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(PausableStorage)219_storage": { - "label": "struct PausableUpgradeable.PausableStorage", - "members": [ - { - "label": "_paused", - "type": "t_bool", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_struct(AskWithState)5743_storage)dyn_storage": { - "label": "struct ProofMarketplace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Market)5706_storage)dyn_storage": { - "label": "struct ProofMarketplace.Market[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IVerifier)7770": { - "label": "contract IVerifier", - "numberOfBytes": "20" - }, - "t_enum(AskState)5713": { - "label": "enum ProofMarketplace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)5717": { - "label": "enum ProofMarketplace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)5717,t_uint256)": { - "label": "mapping(enum ProofMarketplace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_struct(Ask)5732_storage": { - "label": "struct ProofMarketplace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)5743_storage": { - "label": "struct ProofMarketplace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)5732_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)5713", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)5706_storage": { - "label": "struct ProofMarketplace.Market", - "members": [ - { - "label": "verifier", - "type": "t_contract(IVerifier)7770", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "4" - }, - { - "label": "creator", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.Pausable": [ - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "bca5a0c3cff3a7865a5075b889035ace93af6c27f26e6b611f04c7c4199a7a2c": { - "address": "0xFC45Cec599f4E70957AF50A4831e26A3453318A2", - "txHash": "0x523a0887c006c8af5a16c19530d4ed5fc1dc2843471b3a75faff93233585c3bd", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:29" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:51" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:53" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:174" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))": { - "label": "mapping(bytes32 => mapping(bytes32 => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(AttestationAutherStorage)1436_storage": { - "label": "struct AttestationAutherUpgradeable.AttestationAutherStorage", - "members": [ - { - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "offset": 0, - "slot": "0" - }, - { - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "offset": 0, - "slot": "1" - }, - { - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(EnclaveImage)1419_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:marlin.oyster.storage.AttestationAuther": [ - { - "contract": "AttestationAutherUpgradeable", - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:31", - "offset": 0, - "slot": "0" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:32", - "offset": 0, - "slot": "1" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:33", - "offset": 0, - "slot": "2" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "5ab5ca18360235141e7823e2d525ef200764a268a6a3a2d49e66ecb62c45daff": { - "address": "0x7CE4293C2981E686726695c619Cb53c1af775c7d", - "txHash": "0xaea7618c93592e7426c8586a185583aa95b4bc4e5c22de3c255f71e0895805be", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:29" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_struct(Generator)3374_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:72" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:73" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:75" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:76" - }, - { - "label": "proofMarketplace", - "offset": 0, - "slot": "504", - "type": "t_contract(ProofMarketplace)7709", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:78" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:762" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketplace)7709": { - "label": "contract ProofMarketplace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)3353": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)3374_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(Generator)3374_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketplaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)3386_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)3353", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "e764335b50fcb5f6773df70d920c3d308ac8f64f1981001cb34a0dec4b553de4": { - "address": "0x9E0Bde5879375b3Befa11d61ca0c9a9E28aDcD28", - "txHash": "0x93a365897cacdf53e2cd50858db484fd86e7705e2d24485ffc272d62940f1b3a", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:31" - }, - { - "label": "marketData", - "offset": 0, - "slot": "500", - "type": "t_array(t_struct(Market)5706_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:111" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "501", - "type": "t_array(t_struct(AskWithState)5743_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:113" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_enum(SecretType)5717,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:116" - }, - { - "label": "minProvingTime", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_enum(SecretType)5717,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:118" - }, - { - "label": "claimableAmount", - "offset": 0, - "slot": "504", - "type": "t_mapping(t_address,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:120" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:768" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(PausableStorage)219_storage": { - "label": "struct PausableUpgradeable.PausableStorage", - "members": [ - { - "label": "_paused", - "type": "t_bool", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_struct(AskWithState)5743_storage)dyn_storage": { - "label": "struct ProofMarketplace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Market)5706_storage)dyn_storage": { - "label": "struct ProofMarketplace.Market[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IVerifier)7770": { - "label": "contract IVerifier", - "numberOfBytes": "20" - }, - "t_enum(AskState)5713": { - "label": "enum ProofMarketplace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)5717": { - "label": "enum ProofMarketplace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)5717,t_uint256)": { - "label": "mapping(enum ProofMarketplace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_struct(Ask)5732_storage": { - "label": "struct ProofMarketplace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)5743_storage": { - "label": "struct ProofMarketplace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)5732_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)5713", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)5706_storage": { - "label": "struct ProofMarketplace.Market", - "members": [ - { - "label": "verifier", - "type": "t_contract(IVerifier)7770", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "4" - }, - { - "label": "creator", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.Pausable": [ - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "d1f2879261aeb8b85b68dec55f054ab088b55dbddc2474f6ea06069ca2ec433c": { - "address": "0x87B34616819539d4A9517b26be8114CC1425134A", - "txHash": "0x4e83017c521bdea262a26a50287a49465e2f39fe202c4d2285137e1da06e9a55", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:29" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:51" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:53" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:174" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))": { - "label": "mapping(bytes32 => mapping(bytes32 => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(AttestationAutherStorage)1436_storage": { - "label": "struct AttestationAutherUpgradeable.AttestationAutherStorage", - "members": [ - { - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "offset": 0, - "slot": "0" - }, - { - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "offset": 0, - "slot": "1" - }, - { - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(EnclaveImage)1419_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:marlin.oyster.storage.AttestationAuther": [ - { - "contract": "AttestationAutherUpgradeable", - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:31", - "offset": 0, - "slot": "0" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:32", - "offset": 0, - "slot": "1" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:33", - "offset": 0, - "slot": "2" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "05a3b50c8d788392f767bcac807ce631d8bf4e076ca8e7f9cb959b7609010bc0": { - "address": "0xe979d1CDfF44B1D533D77A5DA8eAbAdc3057d829", - "txHash": "0xd863558f58645a9318a982364ce32ba05049d5b259747e70866f8c72dc0f464b", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:29" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_struct(Generator)3374_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:72" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:73" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:75" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:76" - }, - { - "label": "proofMarketplace", - "offset": 0, - "slot": "504", - "type": "t_contract(ProofMarketplace)7709", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:78" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:762" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketplace)7709": { - "label": "contract ProofMarketplace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)3353": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)3374_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(Generator)3374_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketplaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)3386_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)3353", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "94f22e58a4cbf9dd7763a4acbe5277be52238505e9a3f2814a0d81dfc7a1cb66": { - "address": "0xd271FFD856d25099965AaD15A5d8Db4E3A954738", - "txHash": "0xf36f830d8c13799577c6e32618e4dc88ee1d5991a37f5cdb407cbd4202282e76", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:31" - }, - { - "label": "marketData", - "offset": 0, - "slot": "500", - "type": "t_array(t_struct(Market)5706_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:111" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "501", - "type": "t_array(t_struct(AskWithState)5743_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:113" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_enum(SecretType)5717,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:116" - }, - { - "label": "minProvingTime", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_enum(SecretType)5717,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:118" - }, - { - "label": "claimableAmount", - "offset": 0, - "slot": "504", - "type": "t_mapping(t_address,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:120" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:768" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(PausableStorage)219_storage": { - "label": "struct PausableUpgradeable.PausableStorage", - "members": [ - { - "label": "_paused", - "type": "t_bool", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_struct(AskWithState)5743_storage)dyn_storage": { - "label": "struct ProofMarketplace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Market)5706_storage)dyn_storage": { - "label": "struct ProofMarketplace.Market[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IVerifier)7770": { - "label": "contract IVerifier", - "numberOfBytes": "20" - }, - "t_enum(AskState)5713": { - "label": "enum ProofMarketplace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)5717": { - "label": "enum ProofMarketplace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)5717,t_uint256)": { - "label": "mapping(enum ProofMarketplace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_struct(Ask)5732_storage": { - "label": "struct ProofMarketplace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)5743_storage": { - "label": "struct ProofMarketplace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)5732_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)5713", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)5706_storage": { - "label": "struct ProofMarketplace.Market", - "members": [ - { - "label": "verifier", - "type": "t_contract(IVerifier)7770", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "4" - }, - { - "label": "creator", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.Pausable": [ - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "28286cc0ce2f8fc7197120af4d33dbdc96b439e4d5697f6ecd040c9d62f004cf": { - "address": "0x198B0435CeF12A19DAEA176D35D5F6Fef0B723D8", - "txHash": "0xef2c78047ebb6f0621012223deaed11667b73906c327ec74178205b25f94e053", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:29" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:51" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:53" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:174" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))": { - "label": "mapping(bytes32 => mapping(bytes32 => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(AttestationAutherStorage)1436_storage": { - "label": "struct AttestationAutherUpgradeable.AttestationAutherStorage", - "members": [ - { - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "offset": 0, - "slot": "0" - }, - { - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "offset": 0, - "slot": "1" - }, - { - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(EnclaveImage)1419_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:marlin.oyster.storage.AttestationAuther": [ - { - "contract": "AttestationAutherUpgradeable", - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1419_storage)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:31", - "offset": 0, - "slot": "0" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:32", - "offset": 0, - "slot": "1" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:33", - "offset": 0, - "slot": "2" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "76f25bf070ea0f09fdf64bb7b34dae1dcbcf30c3cf504f3d76e12a45b8c303ef": { - "address": "0x6D7959c9718477c256341285016C3c5d4E5b5325", - "txHash": "0x2aca040aa74a645380c3897feb7ae6ce31d46bd2dfd5307a345d1b0815a239cd", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:29" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_struct(Generator)3374_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:72" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:73" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:75" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:76" - }, - { - "label": "proofMarketplace", - "offset": 0, - "slot": "504", - "type": "t_contract(ProofMarketplace)7709", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:78" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:762" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketplace)7709": { - "label": "contract ProofMarketplace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)3353": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)3374_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)3386_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(Generator)3374_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketplaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)3386_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)3353", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "a97043c380aefdce58604166e4fbf76e23129241fbaf53fe67839be7dd2427f0": { - "address": "0x2153802EB78C95FA7aA465CfDFCc96CE850B8Fa3", - "txHash": "0xfbbbc97ba0d8212524f4797a8ebf3f1b7c072e19e84741db2e0a810de955db95", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:31" - }, - { - "label": "marketData", - "offset": 0, - "slot": "500", - "type": "t_array(t_struct(Market)5706_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:111" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "501", - "type": "t_array(t_struct(AskWithState)5743_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:113" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_enum(SecretType)5717,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:116" - }, - { - "label": "minProvingTime", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_enum(SecretType)5717,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:118" - }, - { - "label": "claimableAmount", - "offset": 0, - "slot": "504", - "type": "t_mapping(t_address,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:120" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:768" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(PausableStorage)219_storage": { - "label": "struct PausableUpgradeable.PausableStorage", - "members": [ - { - "label": "_paused", - "type": "t_bool", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_struct(AskWithState)5743_storage)dyn_storage": { - "label": "struct ProofMarketplace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Market)5706_storage)dyn_storage": { - "label": "struct ProofMarketplace.Market[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IVerifier)7770": { - "label": "contract IVerifier", - "numberOfBytes": "20" - }, - "t_enum(AskState)5713": { - "label": "enum ProofMarketplace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)5717": { - "label": "enum ProofMarketplace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)5717,t_uint256)": { - "label": "mapping(enum ProofMarketplace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_struct(Ask)5732_storage": { - "label": "struct ProofMarketplace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)5743_storage": { - "label": "struct ProofMarketplace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)5732_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)5713", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)5706_storage": { - "label": "struct ProofMarketplace.Market", - "members": [ - { - "label": "verifier", - "type": "t_contract(IVerifier)7770", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "4" - }, - { - "label": "creator", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.Pausable": [ - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "7ba9385f17c8160f3e568673e058d37f345aad0e469d70cf3d51f5d9b678a7b8": { - "address": "0x48aE47856628Dc7f46CA6716D882793d37B55114", - "txHash": "0xf936bdeefdf5c77f8e85c8bce4f80acd1b7a9d4338fb86762f0744fcddd0bc7c", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "AttestationVerifier", - "src": "contracts/periphery/AttestationVerifier.sol:22" - }, - { - "label": "whitelistedImages", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)11331_storage)", - "contract": "AttestationVerifier", - "src": "contracts/periphery/AttestationVerifier.sol:82" - }, - { - "label": "verifiedKeys", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_address,t_bytes32)", - "contract": "AttestationVerifier", - "src": "contracts/periphery/AttestationVerifier.sol:84" - }, - { - "label": "__gap_1", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)48_storage", - "contract": "AttestationVerifier", - "src": "contracts/periphery/AttestationVerifier.sol:86" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)48_storage": { - "label": "uint256[48]", - "numberOfBytes": "1536" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)11331_storage)": { - "label": "mapping(bytes32 => struct AttestationVerifier.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_struct(EnclaveImage)11331_storage": { - "label": "struct AttestationVerifier.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "7c2a7668bc3c0247e3fa0c64ed1d4d945e7db54854e6befbcda682613ba32042": { - "address": "0x78293427b9b6832a7903B9886Bae62Ae391857Df", - "txHash": "0x57d66889067e04e5e4e1b8ecde0e2162980d52749ba963cf0496d6d9f17e6d95", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:29" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:51" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:53" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:174" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))": { - "label": "mapping(bytes32 => mapping(bytes32 => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)1867_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(AttestationAutherStorage)1884_storage": { - "label": "struct AttestationAutherUpgradeable.AttestationAutherStorage", - "members": [ - { - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1867_storage)", - "offset": 0, - "slot": "0" - }, - { - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "offset": 0, - "slot": "1" - }, - { - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(EnclaveImage)1867_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:marlin.oyster.storage.AttestationAuther": [ - { - "contract": "AttestationAutherUpgradeable", - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1867_storage)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:31", - "offset": 0, - "slot": "0" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:32", - "offset": 0, - "slot": "1" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:33", - "offset": 0, - "slot": "2" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "4420b11e83b9618cf7a6c338f0f5edccf9348a420c6dc03c2ed8fff347dcddfc": { - "address": "0xfcCaFF5576B911C07197A8e90F62199f290aeb14", - "txHash": "0x10fcdafea5efadb7363ed7c026c495832cea2090fb1e0b81f6bb0004310c770e", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:29" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_struct(Generator)4082_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:72" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4094_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:73" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:75" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:76" - }, - { - "label": "proofMarketplace", - "offset": 0, - "slot": "504", - "type": "t_contract(ProofMarketplace)8417", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:78" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:762" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketplace)8417": { - "label": "contract ProofMarketplace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)4061": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4094_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)4082_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4094_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(Generator)4082_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketplaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)4094_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)4061", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "a0387e722693d81d98d9cad6f830d5d12a231681fc3a52fa803901fa0da41c34": { - "address": "0x3712c6b2437C7a7df962a0Bf0d9d17d98301de3A", - "txHash": "0x6503bdd6941c9309374a44b28d489998f39c6749e00d62e07a58bdb12bbb135b", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:31" - }, - { - "label": "marketData", - "offset": 0, - "slot": "500", - "type": "t_array(t_struct(Market)6414_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:111" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "501", - "type": "t_array(t_struct(AskWithState)6451_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:113" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_enum(SecretType)6425,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:116" - }, - { - "label": "minProvingTime", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_enum(SecretType)6425,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:118" - }, - { - "label": "claimableAmount", - "offset": 0, - "slot": "504", - "type": "t_mapping(t_address,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:120" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:768" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(PausableStorage)219_storage": { - "label": "struct PausableUpgradeable.PausableStorage", - "members": [ - { - "label": "_paused", - "type": "t_bool", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_struct(AskWithState)6451_storage)dyn_storage": { - "label": "struct ProofMarketplace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Market)6414_storage)dyn_storage": { - "label": "struct ProofMarketplace.Market[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IVerifier)8478": { - "label": "contract IVerifier", - "numberOfBytes": "20" - }, - "t_enum(AskState)6421": { - "label": "enum ProofMarketplace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)6425": { - "label": "enum ProofMarketplace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)6425,t_uint256)": { - "label": "mapping(enum ProofMarketplace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_struct(Ask)6440_storage": { - "label": "struct ProofMarketplace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)6451_storage": { - "label": "struct ProofMarketplace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)6440_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)6421", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)6414_storage": { - "label": "struct ProofMarketplace.Market", - "members": [ - { - "label": "verifier", - "type": "t_contract(IVerifier)8478", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "4" - }, - { - "label": "creator", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.Pausable": [ - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "e17e51fff59953898824bb5aed6cf5cefdb6e429c5e4ca473a7b252ced35b67e": { - "address": "0xfb4869e0C70CC2b187734C695F55e94e8D075F85", - "txHash": "0x107018908ffca66d39c71c1537285be9b9afafa74c21386814e12e129a4e6822", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:29" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:51" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:53" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:174" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))": { - "label": "mapping(bytes32 => mapping(bytes32 => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)1867_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(AttestationAutherStorage)1884_storage": { - "label": "struct AttestationAutherUpgradeable.AttestationAutherStorage", - "members": [ - { - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1867_storage)", - "offset": 0, - "slot": "0" - }, - { - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "offset": 0, - "slot": "1" - }, - { - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(EnclaveImage)1867_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:marlin.oyster.storage.AttestationAuther": [ - { - "contract": "AttestationAutherUpgradeable", - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1867_storage)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:31", - "offset": 0, - "slot": "0" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:32", - "offset": 0, - "slot": "1" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:33", - "offset": 0, - "slot": "2" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "4c4b5571fbff003732641b5b484d4cef34cec9d6570e553037627a15023740b6": { - "address": "0x506915a0d1cC9E0E71b0498769Ca5c591Bc7C708", - "txHash": "0xe0c1b84aca22c375814eb672b6ac517368daf2078e051d15636d70d03c5340ba", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:29" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_struct(Generator)4082_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:72" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4094_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:73" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:75" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:76" - }, - { - "label": "proofMarketplace", - "offset": 0, - "slot": "504", - "type": "t_contract(ProofMarketplace)8417", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:78" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:762" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketplace)8417": { - "label": "contract ProofMarketplace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)4061": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4094_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)4082_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4094_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(Generator)4082_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketplaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)4094_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)4061", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "2a3b90acf69f796b4abcfe65009c08603f6e72efb5433b96ba7e29d9cd7bc47a": { - "address": "0x3f18C0cE048aD0531070e56192387bb5f38C5cb9", - "txHash": "0x7377d98d827f786f84494ffd3df625fb3320cea0aa2a337aeaecb49f31925faa", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:31" - }, - { - "label": "marketData", - "offset": 0, - "slot": "500", - "type": "t_array(t_struct(Market)6414_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:111" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "501", - "type": "t_array(t_struct(AskWithState)6451_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:113" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_enum(SecretType)6425,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:116" - }, - { - "label": "minProvingTime", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_enum(SecretType)6425,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:118" - }, - { - "label": "claimableAmount", - "offset": 0, - "slot": "504", - "type": "t_mapping(t_address,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:120" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:768" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(PausableStorage)219_storage": { - "label": "struct PausableUpgradeable.PausableStorage", - "members": [ - { - "label": "_paused", - "type": "t_bool", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_struct(AskWithState)6451_storage)dyn_storage": { - "label": "struct ProofMarketplace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Market)6414_storage)dyn_storage": { - "label": "struct ProofMarketplace.Market[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IVerifier)8478": { - "label": "contract IVerifier", - "numberOfBytes": "20" - }, - "t_enum(AskState)6421": { - "label": "enum ProofMarketplace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)6425": { - "label": "enum ProofMarketplace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)6425,t_uint256)": { - "label": "mapping(enum ProofMarketplace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_struct(Ask)6440_storage": { - "label": "struct ProofMarketplace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)6451_storage": { - "label": "struct ProofMarketplace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)6440_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)6421", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)6414_storage": { - "label": "struct ProofMarketplace.Market", - "members": [ - { - "label": "verifier", - "type": "t_contract(IVerifier)8478", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "4" - }, - { - "label": "creator", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.Pausable": [ - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "5766cb8cae3030c8abd5657c52f7d870f267e360d402321bfedc6b9a49174b4a": { - "address": "0x17f9662e38783E82EfC3cc2eC5593DA99D09B192", - "txHash": "0x9d46e7293b310657d6dbc0254d3fed9d0d3605b80becbe1237b98b2822ab667b", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:29" - }, - { - "label": "pub_key", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:51" - }, - { - "label": "blackListedImages", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_bytes32,t_bool)", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:53" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "502", - "type": "t_array(t_uint256)50_storage", - "contract": "EntityKeyRegistry", - "src": "contracts/EntityKeyRegistry.sol:174" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bytes32)": { - "label": "mapping(address => bytes32)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))": { - "label": "mapping(bytes32 => mapping(bytes32 => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(EnclaveImage)1867_storage)": { - "label": "mapping(bytes32 => struct AttestationAutherUpgradeable.EnclaveImage)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(AttestationAutherStorage)1884_storage": { - "label": "struct AttestationAutherUpgradeable.AttestationAutherStorage", - "members": [ - { - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1867_storage)", - "offset": 0, - "slot": "0" - }, - { - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "offset": 0, - "slot": "1" - }, - { - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(EnclaveImage)1867_storage": { - "label": "struct AttestationAutherUpgradeable.EnclaveImage", - "members": [ - { - "label": "PCR0", - "type": "t_bytes_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "PCR1", - "type": "t_bytes_storage", - "offset": 0, - "slot": "1" - }, - { - "label": "PCR2", - "type": "t_bytes_storage", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_bytes_storage))": { - "label": "mapping(address => mapping(uint256 => bytes))", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - } - }, - "namespaces": { - "erc7201:marlin.oyster.storage.AttestationAuther": [ - { - "contract": "AttestationAutherUpgradeable", - "label": "whitelistedImages", - "type": "t_mapping(t_bytes32,t_struct(EnclaveImage)1867_storage)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:31", - "offset": 0, - "slot": "0" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "verifiedKeys", - "type": "t_mapping(t_address,t_bytes32)", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:32", - "offset": 0, - "slot": "1" - }, - { - "contract": "AttestationAutherUpgradeable", - "label": "imageFamilies", - "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))", - "src": "contracts/periphery/AttestationAutherUpgradeable.sol:33", - "offset": 0, - "slot": "2" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "c288b5e8cc9e274b52eed2441640e8db7f481742aff7657983dc260edf88ebfc": { - "address": "0x9DC9bB21D2c974c929409B8167da22E6BEb62822", - "txHash": "0x8a64dcde11a486856c5a0ea879f5569c75730ff67eccbb7ba2b78687c2da220b", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:29" - }, - { - "label": "generatorRegistry", - "offset": 0, - "slot": "500", - "type": "t_mapping(t_address,t_struct(Generator)4082_storage)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:72" - }, - { - "label": "generatorInfoPerMarket", - "offset": 0, - "slot": "501", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4094_storage))", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:73" - }, - { - "label": "unstakeRequestBlock", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:75" - }, - { - "label": "reduceComputeRequestBlock", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_address,t_uint256)", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:76" - }, - { - "label": "proofMarketplace", - "offset": 0, - "slot": "504", - "type": "t_contract(ProofMarketplace)8417", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:78" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "GeneratorRegistry", - "src": "contracts/GeneratorRegistry.sol:762" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(ProofMarketplace)8417": { - "label": "contract ProofMarketplace", - "numberOfBytes": "20" - }, - "t_enum(GeneratorState)4061": { - "label": "enum GeneratorRegistry.GeneratorState", - "members": ["NULL", "JOINED", "NO_COMPUTE_AVAILABLE", "WIP", "REQUESTED_FOR_EXIT"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4094_storage))": { - "label": "mapping(address => mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(Generator)4082_storage)": { - "label": "mapping(address => struct GeneratorRegistry.Generator)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_struct(GeneratorInfoPerMarket)4094_storage)": { - "label": "mapping(uint256 => struct GeneratorRegistry.GeneratorInfoPerMarket)", - "numberOfBytes": "32" - }, - "t_struct(Generator)4082_storage": { - "label": "struct GeneratorRegistry.Generator", - "members": [ - { - "label": "rewardAddress", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "totalStake", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "sumOfComputeAllocations", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "computeConsumed", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "stakeLocked", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "activeMarketplaces", - "type": "t_uint256", - "offset": 0, - "slot": "5" - }, - { - "label": "declaredCompute", - "type": "t_uint256", - "offset": 0, - "slot": "6" - }, - { - "label": "intendedStakeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "7" - }, - { - "label": "intendedComputeUtilization", - "type": "t_uint256", - "offset": 0, - "slot": "8" - }, - { - "label": "generatorData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "9" - } - ], - "numberOfBytes": "320" - }, - "t_struct(GeneratorInfoPerMarket)4094_storage": { - "label": "struct GeneratorRegistry.GeneratorInfoPerMarket", - "members": [ - { - "label": "state", - "type": "t_enum(GeneratorState)4061", - "offset": 0, - "slot": "0" - }, - { - "label": "computePerRequestRequired", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "proofGenerationCost", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "proposedTime", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "activeRequests", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - }, - "489ada3d896685695b27d08a066a86d7aff0a213444b5f102851827f38efa5ea": { - "address": "0xDc7267F26bC829742367e1c429CB64357B49BFF0", - "txHash": "0xc41e91bc70fd778bcf813a156cda1bc2ce65e488d7ed4f4210794b1d6ec0f8e3", - "layout": { - "solcVersion": "0.8.24", - "storage": [ - { - "label": "__gap_0", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)500_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:31" - }, - { - "label": "marketData", - "offset": 0, - "slot": "500", - "type": "t_array(t_struct(Market)6414_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:111" - }, - { - "label": "listOfAsk", - "offset": 0, - "slot": "501", - "type": "t_array(t_struct(AskWithState)6451_storage)dyn_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:113" - }, - { - "label": "costPerInputBytes", - "offset": 0, - "slot": "502", - "type": "t_mapping(t_enum(SecretType)6425,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:116" - }, - { - "label": "minProvingTime", - "offset": 0, - "slot": "503", - "type": "t_mapping(t_enum(SecretType)6425,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:118" - }, - { - "label": "claimableAmount", - "offset": 0, - "slot": "504", - "type": "t_mapping(t_address,t_uint256)", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:120" - }, - { - "label": "__gap1_0", - "offset": 0, - "slot": "505", - "type": "t_array(t_uint256)50_storage", - "contract": "ProofMarketplace", - "src": "contracts/ProofMarketplace.sol:768" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(RoleData)25_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", - "numberOfBytes": "32" - }, - "t_struct(AccessControlStorage)34_storage": { - "label": "struct AccessControlUpgradeable.AccessControlStorage", - "members": [ - { - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(InitializableStorage)93_storage": { - "label": "struct Initializable.InitializableStorage", - "members": [ - { - "label": "_initialized", - "type": "t_uint64", - "offset": 0, - "slot": "0" - }, - { - "label": "_initializing", - "type": "t_bool", - "offset": 8, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(PausableStorage)219_storage": { - "label": "struct PausableUpgradeable.PausableStorage", - "members": [ - { - "label": "_paused", - "type": "t_bool", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(ReentrancyGuardStorage)280_storage": { - "label": "struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage", - "members": [ - { - "label": "_status", - "type": "t_uint256", - "offset": 0, - "slot": "0" - } - ], - "numberOfBytes": "32" - }, - "t_struct(RoleData)25_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "hasRole", - "type": "t_mapping(t_address,t_bool)", - "offset": 0, - "slot": "0" - }, - { - "label": "adminRole", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "label": "uint64", - "numberOfBytes": "8" - }, - "t_array(t_struct(AskWithState)6451_storage)dyn_storage": { - "label": "struct ProofMarketplace.AskWithState[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Market)6414_storage)dyn_storage": { - "label": "struct ProofMarketplace.Market[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)500_storage": { - "label": "uint256[500]", - "numberOfBytes": "16000" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IVerifier)8478": { - "label": "contract IVerifier", - "numberOfBytes": "20" - }, - "t_enum(AskState)6421": { - "label": "enum ProofMarketplace.AskState", - "members": ["NULL", "CREATE", "UNASSIGNED", "ASSIGNED", "COMPLETE", "DEADLINE_CROSSED"], - "numberOfBytes": "1" - }, - "t_enum(SecretType)6425": { - "label": "enum ProofMarketplace.SecretType", - "members": ["NULL", "CALLDATA", "EXTERNAL"], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_enum(SecretType)6425,t_uint256)": { - "label": "mapping(enum ProofMarketplace.SecretType => uint256)", - "numberOfBytes": "32" - }, - "t_struct(Ask)6440_storage": { - "label": "struct ProofMarketplace.Ask", - "members": [ - { - "label": "marketId", - "type": "t_uint256", - "offset": 0, - "slot": "0" - }, - { - "label": "reward", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "expiry", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "timeTakenForProofGeneration", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "deadline", - "type": "t_uint256", - "offset": 0, - "slot": "4" - }, - { - "label": "refundAddress", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "proverData", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - }, - "t_struct(AskWithState)6451_storage": { - "label": "struct ProofMarketplace.AskWithState", - "members": [ - { - "label": "ask", - "type": "t_struct(Ask)6440_storage", - "offset": 0, - "slot": "0" - }, - { - "label": "state", - "type": "t_enum(AskState)6421", - "offset": 0, - "slot": "7" - }, - { - "label": "requester", - "type": "t_address", - "offset": 1, - "slot": "7" - }, - { - "label": "generator", - "type": "t_address", - "offset": 0, - "slot": "8" - } - ], - "numberOfBytes": "288" - }, - "t_struct(Market)6414_storage": { - "label": "struct ProofMarketplace.Market", - "members": [ - { - "label": "verifier", - "type": "t_contract(IVerifier)8478", - "offset": 0, - "slot": "0" - }, - { - "label": "proverImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "1" - }, - { - "label": "slashingPenalty", - "type": "t_uint256", - "offset": 0, - "slot": "2" - }, - { - "label": "activationBlock", - "type": "t_uint256", - "offset": 0, - "slot": "3" - }, - { - "label": "ivsImageId", - "type": "t_bytes32", - "offset": 0, - "slot": "4" - }, - { - "label": "creator", - "type": "t_address", - "offset": 0, - "slot": "5" - }, - { - "label": "marketmetadata", - "type": "t_bytes_storage", - "offset": 0, - "slot": "6" - } - ], - "numberOfBytes": "224" - } - }, - "namespaces": { - "erc7201:openzeppelin.storage.Pausable": [ - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.ReentrancyGuard": [ - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:40", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.AccessControl": [ - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)25_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61", - "offset": 0, - "slot": "0" - } - ], - "erc7201:openzeppelin.storage.Initializable": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_uint64", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", - "offset": 0, - "slot": "0" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", - "offset": 8, - "slot": "0" - } - ] - } - } - } - } -} diff --git a/.solcover.js b/.solcover.js new file mode 100644 index 0000000..73fa101 --- /dev/null +++ b/.solcover.js @@ -0,0 +1,30 @@ +module.exports = { + configureYulOptimizer: true, + skipFiles: [ + "../contracts/interfaces/IVerifier.sol", + "../contracts/lib/Dispute.sol", + "../contracts/mock/MockAttestationVerifier.sol", + "../contracts/mock/MockToken.sol", + "../contracts/mock/MockVerifier.sol", + "../contracts/mock/UC_Rekt.sol", + "../contracts/mock/UC.sol", + "../contracts/mock/UCNew.sol", + "../contracts/periphery/AttestationAutherUpgradeable.sol", + "../contracts/periphery/AttestationVerifier.sol", + "../contracts/periphery/InputAndProofFormatRegistry.sol", + "../contracts/periphery/interfaces/IAttestationVerifier.sol", + "../contracts/periphery/interfaces/IVerifier.sol", + "../contracts/periphery/PriorityLog.sol", + "../contracts/periphery/AttestationAuther.sol", + "../contracts/verifiers/plonk_vk.sol", + "../contracts/verifiers/transfer_verifier.sol", + "../contracts/verifiers/verifier_xor2.sol", + "../contracts/verifiers/zkb_verifier.sol", + "../contracts/verifiers/zksync_verifier.sol", + "../contracts/verifierWrappers/plonk_vk_wrapper.sol", + "../contracts/verifierWrappers/transfer_verifier_wrapper.sol", + "../contracts/verifierWrappers/xor2_verifier_wrapper.sol", + "../contracts/verifierWrappers/zksync_verifier_wrapper.sol", + "./scripts/foundry/DeployArbitrumSepolia.s.sol" + ], +}; diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index d292432..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "solidity.compileUsingRemoteVersion": "v0.8.19+commit.7dd6d404", - "cSpell.words": ["Groth", "typechain"] -} diff --git a/addresses/1.json b/addresses/1.json new file mode 100644 index 0000000..44699c7 --- /dev/null +++ b/addresses/1.json @@ -0,0 +1,9 @@ +{ + "proxy": { + "attestation_verifier": "0x000000000000000000000000000000000000dEaD", + "middleware": "0xC141DE136254fD5954b779cC01b57f98Ee3A60E8" + }, + "implementation": { + "middleware": "0x49a828CEa72DaBFd3a27f0313b57bC745ad2ed98" + } +} \ No newline at end of file diff --git a/addresses/17000.json b/addresses/17000.json new file mode 100644 index 0000000..97c00ba --- /dev/null +++ b/addresses/17000.json @@ -0,0 +1,10 @@ +{ + "proxy": { + "attestation_verifier": "0xDcD2846DCA523Db1C8F3c842a41A58099dE26A0A", + "middleware": "0xe43EFeA7f40a885f4B35a149CAB5FC3fE01564C6" + }, + "implementation": { + "attestation_verifier": "0xDE3b133f588903e50598985253C6F86a070b2f04", + "middleware": "0x450b3C0BdD75BEb3761F3a226e7F81048A8F376d" + } +} \ No newline at end of file diff --git a/addresses/42161.json b/addresses/42161.json index 3e5cec2..e98cc02 100644 --- a/addresses/42161.json +++ b/addresses/42161.json @@ -1,8 +1,22 @@ { - "proxy": { - "risc0_router": "0x0b144e07a0826182b6b59788c34b32bfa86fb711", - "attestation_zk_verifier": "0xfcCD297E4FCce471f633BB1998cc7e058903cc53", - "attestation_zk_verifier_wrapper": "0x0338C1C01d7A15988367182d5af9cC1C85F22e77" - }, - "implementation": {} + "proxy": { + "stakingManager": "0xC141DE136254fD5954b779cC01b57f98Ee3A60E8", + "nativeStaking": "0xd96418F0507F992E2a33942e54FA832ba3d2287e", + "symbioticStaking": "0x356CBC9971867b71b904D38C620320589B489FE3", + "symbioticStakingReward": "0x934800EB0D5C18a269c91C0A09894789b1E4573E", + "attestationVerifier": "0x73621e72D012e043bB5F2B8A4A794564558369FA", + "proverManager": "0xEcF45b1272D3B0ed2eB2A3c85b1E4bBa8a3611D6", + "proofMarketplace": "0xE68A7457c0fd11CcBe96126Bf69B27a9064636a2", + "entityKeyRegistry": "0x9C0Da9ac6B563A87CAf6F5b49f58f3C6D8D9BDef" + }, + "implementation": { + "stakingManager": "0x49a828CEa72DaBFd3a27f0313b57bC745ad2ed98", + "nativeStaking": "0x7F2586176ed24A045Cc2D769c64402f275D97DCF", + "symbioticStaking": "0xd5d5C09218f42C1DF636de57C4179Bff0CE74234", + "symbioticStakingReward": "0xecb11D0370178D566a62469A5e9Daf3ACab0f3aE", + "attestationVerifier": "0xc0306d11b3084B862332f2a77e66dF10DB7556a3", + "entityKeyRegistry": "0x6fA66dFf1c6f4413f117ec7f4D8807Ae54f47604", + "proverManager": "0xdf537d04a393496F74B884a71aEf7460060D0772", + "proofMarketplace": "0x2B828Bccf78957df65E625803E454f92fC86c008" + } } \ No newline at end of file diff --git a/addresses/421614.json b/addresses/421614.json index 345db12..d29ce34 100644 --- a/addresses/421614.json +++ b/addresses/421614.json @@ -4,26 +4,43 @@ "staking_token": "0xdb69299dDE4A00c99b885D9f8748B2AeD1Fe4Ed4", "mock_attestation_verifier": "0x1dC40628443D93eA82945a9206e0b527BA3EA028", "attestation_verifier": "0x63EEf1576b477Aa60Bfd7300B2C85b887639Ac1b", - "attestation_verifier_ZK": "0xbDB8F2Cc624625B80FCCaBEF04BC5420eF232dfB", - "RiscZeroGroth16Verifier": "0x84b943E31e7fAe6072ce5F75eb4694C7D5F9b0cF", - "entity_registry": "0x002064F4d224EA4F90e9A74B5fE3f3812886c6DF", - "generator_registry": "0x5ce3e1010028C4F5687356D721e3e2B6DcEA7C25", - "dispute": "0x41fD92A4Bc74F8B9f46e1fA0825C40aeD5AFDb92", - "proof_market_place": "0x0b6340a893B944BDc3B4F012e934b724c83abF97", - "priority_list": "0xfd94a9Aed9d5f8f00b70A1908378fcc1C4a04B4E", - "input_and_proof_format": "0xBcBaccBA21D0F2089029a3184BcB612e5aFF7911", - "transfer_verifier_wrapper": "0x62e13C7E3832038d11a7Dc5f5540D09EFe7B61cC", - "TransferVerifier": "0x69057542044abcA7047f3938DaE4E3e20D388D23", - "tee_verifier_deployer": "0x9a0B3529E3b10D2Fe1e93F0754c0CEee6B5F3a91", - "mock_verifier": "0x4B8d302A982D11d946255cA091F9C242491cDD31", - "risc0_verifier": "0xBE78405f7853A7642481fC7e556f6d318Db194A0", - "attestation_zk_verifier": "0x8975288764260b1877C60a87314b1eC20a85Dc79", - "attestation_zk_verifier_wrapper": "0x8C9B044F1c2c150a068012016836330250C67951", - "risc0_router": "0x0b144e07a0826182b6b59788c34b32bfa86fb711" + "dispute": "0x48b28BC18E9d9EcDFa7A2CF8b1DDa2668bC005b2", + "transfer_verifier_wrapper": "0x30A5fFf0D0d54fab407a409467835e56830a7471", + "zkb_verifier_wrapper": "0xeE89C22838a691d03fB3b6f47C387d06917C0bBD", + "priority_list": "0x138e29f7804Bfe8225E431c79764663620AEac54", + "input_and_proof_format": "0x43F4159c011f6d05957182748C1F2b77C74fFDB5", + "tee_verifier_deployer": "0x5acCC2F599045D13EA03e4c2b7b0Ed9F8C7Fb99C", + "proof_market_place": "0xfa2AAcA897C4AB956625B72ac678b3CB5450a154", + "symbiotic_staking": "0xE7136641cB2c94d318779c3B6BEb997dC5B2E574", + "native_staking": "0xe9d2Bcc597f943ddA9EDf356DAC7C6A713dDE113", + "generator_registry": "0xdC33E074d2b055171e56887D79678136B4505Dec", + "entity_key_registry": "0x457D42573096b339bA48Be576e9Db4Fc5F186091", + "staking_manager": "0xCe75C0E25b2c70415b237273345105402aEbe79F", + "attestationVerifier": "0x63EEf1576b477Aa60Bfd7300B2C85b887639Ac1b", + "entityKeyRegistry": "0x457D42573096b339bA48Be576e9Db4Fc5F186091", + "stakingManager": "0xaf2ae7Ce949665ebA8a43A31DF73F4814252Cc84", + "nativeStaking": "0x5F1666aEB646439157e139FF37637302168e6bb9", + "symbioticStaking": "0x078B3f1504a4B5Bc08EB057cd2Fc8DD790459163", + "symbioticStakingReward": "0xEfDE9B92709187ef2f03CcCCD7e7E3B17Cee497D", + "proverManager": "0x4743a2c7a96C9FBED8b7eAD980aD01822F9711Db", + "proofMarketplace": "0xC05d689B341d84900f0d0CE36f35aDAbfB57F68d" + }, + "mockToken": { + "usdc": "0x8230d71d809718132C2054704F5E3aF1b86B669C", + "pond": "0xB5570D4D39dD20F61dEf7C0d6846790360b89a18", + "weth": "0x854493FB9F844c8632140ffF9B66207B10027E8d" }, "implementation": { - "entity_registry": "0xA7D1bFA053A8b474a153336Db7e0B31494155f9E", - "generator_registry": "0x571Bd65B8804B381EfcAf695309C1f43550256bE", - "proof_market_place": "0xA64665EdC5d17Be1Bf6ec7EA9D28c9AB09254D12" + "stakingManager": "0xFE379a4406367b61EB1405309539469cAB3d2Ab6", + "nativeStaking": "0xF1308AdD340906227Bd059cDB00071b5a9CD5c4C", + "symbioticStaking": "0x90dc640Cd760a087E3801a57e0EFB20697814fB2", + "symbioticStakingReward": "0x5468326b83639261B8424b0E4517addbB98c57D7", + "attestationVerifier": "0x3b3266cfa5cac075220BD115902D3C923476EC8a", + "entityKeyRegistry": "0x7AE71621312900e91EB5256654933ABE3eae34D3", + "proverManager": "0x4685121c18D19F39a20404EA327a97036BB88a05", + "proofMarketplace": "0xE5868093f293eEFdE2887b4a92caa9146485AB3b" + }, + "wallet": { + "admin": "0x7C046645E21B811780Cf420021E6701A9E66935C" } -} +} \ No newline at end of file diff --git a/addresses/42170.json b/addresses/42170.json index 2f29ed3..82aadaa 100644 --- a/addresses/42170.json +++ b/addresses/42170.json @@ -4,7 +4,7 @@ "staking_token": "0x57044769E5aa95590E4f99C174D9b90e9D7300F8", "generator_registry": "0x5f23d4eC6607fb381759151B02795187815b0487", "attestation_verifier": "0x90201271eD789Ed395ae2F1Cf5b0DC7FD3053176", - "entity_registry": "0x9d3b60F3527f3c07bC0Afd15Bc842D191fCD5c6D", + "entitykey_registry": "0x9d3b60F3527f3c07bC0Afd15Bc842D191fCD5c6D", "proof_market_place": "0x2F1A3149D2798cA9Dfd7445B3cb713B4CD416b7d", "transfer_verifier_wrapper": "0x158E4B78f26A38978BdA2fC6F5326711D3b7a9D6", "zkb_verifier_wrapper": "0x0f782039EBDaba3D6f260298DFce5A35129BC716", diff --git a/config/1.json b/config/1.json new file mode 100644 index 0000000..f5cc3dc --- /dev/null +++ b/config/1.json @@ -0,0 +1,6 @@ +{ + "symbiotic": { + "networkId": "0x514e41aba432d116f6d6094951f649e76c7ec352000000000000000000000000", + "admin": "0x091f7c3eeCAd6016eE2c44Cf1ac9b9dFA233A8Ee" + } +} \ No newline at end of file diff --git a/config/17000.json b/config/17000.json new file mode 100644 index 0000000..5b5064f --- /dev/null +++ b/config/17000.json @@ -0,0 +1,5 @@ +{ + "symbiotic": { + "networkId": "0xa2024540267e3366b1d3381285dd11a1b45928df000000000000000000000000" + } +} \ No newline at end of file diff --git a/config/42161.json b/config/42161.json new file mode 100644 index 0000000..e798ca4 --- /dev/null +++ b/config/42161.json @@ -0,0 +1,21 @@ +{ + "admin": "0x091f7c3eeCAd6016eE2c44Cf1ac9b9dFA233A8Ee", + "USDC": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831", + "treasury": "0x364c82760133AE45698fFE11D0278D58cB0f7bcA", + "staking": { + "native": { + "withdrawalDuration": 3600 + } + }, + "attestationVerifier": { + "whitelistedImage": { + "PCRs": { + "PCR0": "0x189038ECCF28A3A098949E402F3B3D86A876F4915C5B02D546ABB5D8C507CEB1755B8192D8CFCA66E8F226160CA4C7A6", + "PCR1": "0x5D3938EB05288E20A981038B1861062FF4174884968A39AEE5982B312894E60561883576CC7381D1A7D05B809936BD16", + "PCR2": "0x6C3EF363C488A9A86FAA63A44653FD806E645D4540B40540876F3B811FC1BCEECF036A4703F07587C501EE45BB56A1AA" + }, + "enclaveKey": "0xE646F8B0071D5BA75931402522CC6A5C42A84A6FEA238864E5AC9A0E12D83BD36D0C8109D3CA2B699FCE8D082BF313F5D2AE249BB275B6B6E91E0FCD9262F4BB" + } + }, + "marketCreationCost": 1000000000 +} \ No newline at end of file diff --git a/contracts/EntityKeyRegistry.sol b/contracts/EntityKeyRegistry.sol index d88c8ff..3365b2d 100644 --- a/contracts/EntityKeyRegistry.sol +++ b/contracts/EntityKeyRegistry.sol @@ -25,39 +25,42 @@ contract EntityKeyRegistry is ReentrancyGuardUpgradeable, AttestationAutherUpgradeable { - // in case we add more contracts in the inheritance chain - uint256[500] private __gap_0; - - /// @custom:oz-upgrades-unsafe-allow constructor - constructor(IAttestationVerifier _av) AttestationAutherUpgradeable(_av, HELPER.ACCEPTABLE_ATTESTATION_DELAY) initializer {} - using HELPER for bytes; using HELPER for bytes32; - //-------------------------------- Overrides start --------------------------------// + //---------------------------------------- Event start ----------------------------------------// - function supportsInterface( - bytes4 interfaceId - ) public view virtual override(ERC165Upgradeable, AccessControlUpgradeable) returns (bool) { - return super.supportsInterface(interfaceId); - } + event UpdateKey(address indexed user, uint256 indexed keyIndex); + event RemoveKey(address indexed user, uint256 indexed keyIndex); + event ImageBlacklisted(bytes32 indexed imageId); - function _authorizeUpgrade(address /*account*/) internal view override onlyRole(DEFAULT_ADMIN_ROLE) {} + //---------------------------------------- Event end ----------------------------------------// - bytes32 public constant KEY_REGISTER_ROLE = keccak256("KEY_REGISTER_ROLE"); + //---------------------------------------- Constant start ----------------------------------------// + bytes32 public constant KEY_REGISTER_ROLE = keccak256("KEY_REGISTER_ROLE"); bytes32 public constant MODERATOR_ROLE = keccak256("MODERATOR_ROLE"); - mapping(address => mapping(uint256 => bytes)) public pub_key; + //---------------------------------------- Constant end ----------------------------------------// + + //---------------------------------------- State Variable start ----------------------------------------// + + // in case we add more contracts in the inheritance chain + uint256[500] private __gap_0; + mapping(address => mapping(uint256 => bytes)) public pub_key; mapping(bytes32 => bool) public blackListedImages; - event UpdateKey(address indexed user, uint256 indexed keyIndex); - event RemoveKey(address indexed user, uint256 indexed keyIndex); + uint256[500] private __gap_1; - event ImageBlacklisted(bytes32 indexed imageId); + //---------------------------------------- State Variable start ----------------------------------------// - function initialize(address _admin, EnclaveImage[] memory initWhitelistImages) public initializer { + //---------------------------------------- Init start ----------------------------------------// + + /// @custom:oz-upgrades-unsafe-allow constructor + constructor(IAttestationVerifier _av) AttestationAutherUpgradeable(_av, HELPER.ACCEPTABLE_ATTESTATION_DELAY) initializer {} + + function initialize(address _admin, EnclaveImage[] calldata _initWhitelistImages) public initializer { __Context_init_unchained(); __ERC165_init_unchained(); __AccessControl_init_unchained(); @@ -66,67 +69,69 @@ contract EntityKeyRegistry is _grantRole(DEFAULT_ADMIN_ROLE, _admin); _setRoleAdmin(MODERATOR_ROLE, DEFAULT_ADMIN_ROLE); - __AttestationAuther_init_unchained(initWhitelistImages); + __AttestationAuther_init_unchained(_initWhitelistImages); } - function addGeneratorRegistry(address _generatorRegistry) public onlyRole(DEFAULT_ADMIN_ROLE) { - _grantRole(KEY_REGISTER_ROLE, _generatorRegistry); + //---------------------------------------- Init end ----------------------------------------// + + function addProverManager(address _proverManager) public onlyRole(DEFAULT_ADMIN_ROLE) { + _grantRole(KEY_REGISTER_ROLE, _proverManager); } /** * @notice Ads a new user after verification */ function updatePubkey( - address keyOwner, - uint256 keyIndex, - bytes calldata pubkey, - bytes calldata attestation_data + address _keyOwner, + uint256 _keyIndex, + bytes calldata _pubkey, + bytes calldata _attestationData ) external onlyRole(KEY_REGISTER_ROLE) { - if (pubkey.length != 64) { + if (_pubkey.length != 64) { revert Error.InvalidEnclaveKey(); } - pub_key[keyOwner][keyIndex] = pubkey; + pub_key[_keyOwner][_keyIndex] = _pubkey; - _verifyKeyInternal(attestation_data); + _verifyKeyInternal(_attestationData); - emit UpdateKey(keyOwner, keyIndex); + emit UpdateKey(_keyOwner, _keyIndex); } /** * @notice Verifies a new key against enclave */ - function verifyKey(bytes calldata attestation_data) external onlyRole(KEY_REGISTER_ROLE) { - _verifyKeyInternal(attestation_data); + function verifyKey(bytes calldata _attestationData) external onlyRole(KEY_REGISTER_ROLE) { + _verifyKeyInternal(_attestationData); } /** * @notice Whitelist a new image. Called when a market creator creates a new market */ - function whitelistImageUsingPcrs(bytes32 family, bytes calldata pcrs) external onlyRole(KEY_REGISTER_ROLE) { - (bytes memory PCR0, bytes memory PCR1, bytes memory PCR2) = abi.decode(pcrs, (bytes, bytes, bytes)); + function whitelistImageUsingPcrs(bytes32 _family, bytes calldata _pcrs) external onlyRole(KEY_REGISTER_ROLE) { + (bytes memory pcr0, bytes memory pcr1, bytes memory pcr2) = abi.decode(_pcrs, (bytes, bytes, bytes)); - _whitelistImageIfNot(family, PCR0, PCR1, PCR2); + _whitelistImageIfNot(_family, pcr0, pcr1, pcr2); } - function _verifyKeyInternal(bytes calldata data) internal { + function _verifyKeyInternal(bytes calldata _data) internal { ( bytes memory attestation, bytes memory enclaveKey, - bytes memory PCR0, - bytes memory PCR1, - bytes memory PCR2, + bytes memory pcr0, + bytes memory pcr1, + bytes memory pcr2, uint256 timestamp - ) = abi.decode(data, (bytes, bytes, bytes, bytes, bytes, uint256)); + ) = abi.decode(_data, (bytes, bytes, bytes, bytes, bytes, uint256)); - bool isVerified = _verifyEnclaveKey(attestation, IAttestationVerifier.Attestation(enclaveKey, PCR0, PCR1, PCR2, timestamp)); + bool isVerified = _verifyEnclaveKey(attestation, IAttestationVerifier.Attestation(enclaveKey, pcr0, pcr1, pcr2, timestamp)); if (!isVerified) { revert Error.EnclaveKeyNotVerified(); } } - function _whitelistImageIfNot(bytes32 family, bytes memory PCR0, bytes memory PCR1, bytes memory PCR2) internal { - bytes32 imageId = PCR0.GET_IMAGE_ID_FROM_PCRS(PCR1, PCR2); + function _whitelistImageIfNot(bytes32 _family, bytes memory _pcr0, bytes memory _pcr1, bytes memory _pcr2) internal { + bytes32 imageId = _pcr0.GET_IMAGE_ID_FROM_PCRS(_pcr1, _pcr2); if (!imageId.IS_ENCLAVE()) { revert Error.MustBeAnEnclave(imageId); } @@ -134,42 +139,52 @@ contract EntityKeyRegistry is if (blackListedImages[imageId]) { revert Error.BlacklistedImage(imageId); } - (bytes32 inferredImageId, ) = _whitelistEnclaveImage(EnclaveImage(PCR0, PCR1, PCR2)); + (bytes32 inferredImageId, ) = _whitelistEnclaveImage(EnclaveImage(_pcr0, _pcr1, _pcr2)); // inferredImage == false && isVerified == x, invalid image, revert if (inferredImageId != imageId) { revert Error.InferredImageIdIsDifferent(); } - _addEnclaveImageToFamily(imageId, family); + _addEnclaveImageToFamily(imageId, _family); } /** * @notice Removes an existing pubkey */ - function removePubkey(address keyOwner, uint256 keyIndex) external onlyRole(KEY_REGISTER_ROLE) { - delete pub_key[keyOwner][keyIndex]; + function removePubkey(address _keyOwner, uint256 _keyIndex) external onlyRole(KEY_REGISTER_ROLE) { + delete pub_key[_keyOwner][_keyIndex]; - emit RemoveKey(keyOwner, keyIndex); + emit RemoveKey(_keyOwner, _keyIndex); } - function allowOnlyVerifiedFamily(bytes32 familyId, address _key) external view { - return _allowOnlyVerifiedFamily(_key, familyId); + function allowOnlyVerifiedFamily(bytes32 _familyId, address _key) external view { + return _allowOnlyVerifiedFamily(_key, _familyId); + } + + function removeEnclaveImageFromFamily(bytes32 _imageId, bytes32 _family) external onlyRole(KEY_REGISTER_ROLE) { + _removeEnclaveImageFromFamily(_imageId, _family); } // ---------- SECURITY FEATURE FUNCTIONS ----------- // - function blacklistImage(bytes32 imageId) external onlyRole(MODERATOR_ROLE) { - if (blackListedImages[imageId]) { - revert Error.AlreadyABlacklistedImage(imageId); + function blacklistImage(bytes32 _imageId) external onlyRole(MODERATOR_ROLE) { + if (blackListedImages[_imageId]) { + revert Error.AlreadyABlacklistedImage(_imageId); } - blackListedImages[imageId] = true; - emit ImageBlacklisted(imageId); - _revokeEnclaveImage(imageId); + blackListedImages[_imageId] = true; + emit ImageBlacklisted(_imageId); + _revokeEnclaveImage(_imageId); } - function removeEnclaveImageFromFamily(bytes32 imageId, bytes32 family) external onlyRole(KEY_REGISTER_ROLE) { - _removeEnclaveImageFromFamily(imageId, family); + //-------------------------------- Overrides start --------------------------------// + + function supportsInterface( + bytes4 _interfaceId + ) public view virtual override(ERC165Upgradeable, AccessControlUpgradeable) returns (bool) { + return super.supportsInterface(_interfaceId); } - // for further increase - uint256[50] private __gap1_0; + function _authorizeUpgrade(address /*account*/) internal view override onlyRole(DEFAULT_ADMIN_ROLE) {} + + //---------------------------------------- Override end ----------------------------------------// + } diff --git a/contracts/EntityKeyRegistryFlatten.sol b/contracts/EntityKeyRegistryFlatten.sol new file mode 100644 index 0000000..f964cb1 --- /dev/null +++ b/contracts/EntityKeyRegistryFlatten.sol @@ -0,0 +1,2364 @@ +// // SPDX-License-Identifier: MIT +// pragma solidity =0.8.26 ^0.8.0 ^0.8.20 ^0.8.21 ^0.8.9; + +// // contracts/lib/Error.sol + +// library Error { +// // Administrative and Miscellaneous Errors +// error OnlyAdminCanCall(); +// error CannotBeAdminLess(); +// error CannotBeZero(); +// error CannotBeSlashed(); +// error InsufficientStakeToLock(); +// error EnclaveKeyNotVerified(); +// error ExceedsAcceptableRange(); +// error InvalidContractAddress(); +// error CannotUseMatchingEngineRole(); +// error InvalidEnclaveSignature(address invalidSignerAddress); +// error IncorrectImageId(); +// error AttestationTimeout(); +// error InvalidECIESACL(); +// error BlacklistedImage(bytes32 imageId); +// error AlreadyABlacklistedImage(bytes32 imageId); +// error MustBeAnEnclave(bytes32 imageId); +// error FailedWhitelistingImages(bytes32 imageId); +// error FailedAddingToFamily(bytes32 imageId, bytes32 familyId); +// error InferredImageIdIsDifferent(); +// error ImageAlreadyInFamily(bytes32 imageId, bytes32 familyId); + +// // Prover-related Errors +// error ProverAlreadyExists(); +// error InvalidProver(); +// error InvalidProverCommission(); +// error CannotLeaveWithActiveMarket(); +// error AssignOnlyToIdleProvers(); +// error InsufficientProverComputeAvailable(); +// error OnlyWorkingProvers(); +// error InvalidEnclaveKey(); +// error OnlyValidProversCanRequestExit(); +// error InvalidProverStatePerMarket(); +// error UnstakeRequestNotInPlace(); +// error ReduceComputeRequestNotInPlace(); +// error MaxParallelRequestsPerMarketExceeded(); +// error KeyAlreadyExists(address _address); +// error ReductionRequestNotValid(); +// error PublicMarketsDontNeedKey(); +// error CannotModifyImagesForPublicMarkets(); + +// // Market-related Errors +// error InvalidMarket(); +// error AlreadyJoinedMarket(); +// error CannotBeMoreThanDeclaredCompute(); +// error CannotLeaveMarketWithActiveRequest(); +// error MarketAlreadyExists(); +// error InactiveMarket(); +// error OnlyMarketCreator(); +// error CannotRemoveDefaultImageFromMarket(uint256 marketId, bytes32 imageId); +// error NoRewardToClaim(); + +// // Task and Request Errors +// error CannotAssignExpiredTasks(); +// error InvalidInputs(); +// error ArityMismatch(); +// error OnlyMatchingEngineCanAssign(); +// error RequestAlreadyInPlace(); +// error CannotSlashUsingValidInputs(uint256 bidId); + +// // Proof and State Errors +// error ShouldBeInCreateState(); +// error ProofPriceMismatch(uint256 bidId); +// error ProofTimeMismatch(uint256 bidId); +// error OnlyExpiredBidsCanBeCancelled(uint256 bidId); +// error OnlyAssignedBidsCanBeProved(uint256 bidId); +// error InvalidProof(uint256 bidId); +// error DeadlineNotCrossed(uint256 bidId); +// error ShouldBeInAssignedState(uint256 bidId); +// error OnlyProverCanDiscardRequest(uint256 bidId); + +// // ProverManager +// error ZeroProverDataLength(); +// error ZeroComputeToIncrease(); +// error ZeroComputeToReduce(); +// error ZeroRewardAddress(); +// error ZeroDeclaredCompute(); +// error ZeroNewRewardAddress(); +// error ProverNotRegistered(); + +// // ProofMarketplace +// error InvalidProverRewardShare(); +// error NotSlashableBidId(uint256 bidId); + +// // Staking +// error InsufficientStakeAmount(); +// error NoStakeTokenAvailableToLock(); +// error ZeroTokenAddress(); +// error ZeroToAddress(); + +// // StakingManager +// error InvalidPool(); +// error PoolAlreadyExists(); +// error InvalidLength(); +// error InvalidShares(); + +// // Symbiotic Staking +// error InvalidSlashResultBlockRange(); +// error EndBlockBeforeStartBlock(); +// error NotRegisteredBlockNumber(); +// error NotRegisteredTransmitter(); +// error SubmissionAlreadyCompleted(); +// error InvalidIndex(); +// error ZeroNumOfTxs(); +// error InvalidCaptureTimestamp(); +// error CooldownPeriodNotPassed(); +// error NotIdxToSubmit(); +// error ImageNotFound(); +// error InvalidSignatureLength(); +// error EnclaveKeyMismatch(); +// error InvalidImage(); +// error InvalidPublicKeyLength(); +// error InvalidLastBlockNumber(); +// error ImageAlreadyExists(); +// error InvalidPCR0Length(); +// error InvalidPCR1Length(); +// error InvalidPCR2Length(); +// error ZeroStakeTokenSelectionWeightSum(); +// error NoStakeTokensAvailable(); +// error TokenAlreadyExists(); +// error TokenDoesNotExist(); +// error InvalidComissionRate(); + +// // Native Staking +// error OnlyProverCanStake(); +// error InsufficientStake(); +// error InvalidIndexLength(); +// error OnlyProverCanWithdrawStake(); +// error WithdrawalTimeNotReached(); +// error InvalidWithdrawalAmount(); +// error TokenNotSupported(); +// error InvalidWithdrawalDuration(); + +// // SymbioticStakingReward +// error OnlyStakingManager(); +// error ZeroProofMarketplaceAddress(); +// error ZeroSymbioticStakingAddress(); + +// // Contract Address +// error InvalidStakingManager(); +// error InvalidFeeToken(); +// error InvalidSymbioticStaking(); +// } + +// // contracts/periphery/interfaces/IAttestationVerifier.sol + +// interface IAttestationVerifier { +// struct Attestation { +// bytes enclavePubKey; +// bytes PCR0; +// bytes PCR1; +// bytes PCR2; +// uint256 timestampInMilliseconds; +// } + +// function verify(bytes memory signature, Attestation memory attestation) external view; + +// function verify(bytes memory data) external view; +// } + +// // node_modules/@openzeppelin/contracts/access/IAccessControl.sol + +// // OpenZeppelin Contracts (last updated v5.1.0) (access/IAccessControl.sol) + +// /** +// * @dev External interface of AccessControl declared to support ERC-165 detection. +// */ +// interface IAccessControl { +// /** +// * @dev The `account` is missing a role. +// */ +// error AccessControlUnauthorizedAccount(address account, bytes32 neededRole); + +// /** +// * @dev The caller of a function is not the expected one. +// * +// * NOTE: Don't confuse with {AccessControlUnauthorizedAccount}. +// */ +// error AccessControlBadConfirmation(); + +// /** +// * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` +// * +// * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite +// * {RoleAdminChanged} not being emitted signaling this. +// */ +// event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); + +// /** +// * @dev Emitted when `account` is granted `role`. +// * +// * `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). +// * Expected in cases where the role was granted using the internal {AccessControl-_grantRole}. +// */ +// event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); + +// /** +// * @dev Emitted when `account` is revoked `role`. +// * +// * `sender` is the account that originated the contract call: +// * - if using `revokeRole`, it is the admin role bearer +// * - if using `renounceRole`, it is the role bearer (i.e. `account`) +// */ +// event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); + +// /** +// * @dev Returns `true` if `account` has been granted `role`. +// */ +// function hasRole(bytes32 role, address account) external view returns (bool); + +// /** +// * @dev Returns the admin role that controls `role`. See {grantRole} and +// * {revokeRole}. +// * +// * To change a role's admin, use {AccessControl-_setRoleAdmin}. +// */ +// function getRoleAdmin(bytes32 role) external view returns (bytes32); + +// /** +// * @dev Grants `role` to `account`. +// * +// * If `account` had not been already granted `role`, emits a {RoleGranted} +// * event. +// * +// * Requirements: +// * +// * - the caller must have ``role``'s admin role. +// */ +// function grantRole(bytes32 role, address account) external; + +// /** +// * @dev Revokes `role` from `account`. +// * +// * If `account` had been granted `role`, emits a {RoleRevoked} event. +// * +// * Requirements: +// * +// * - the caller must have ``role``'s admin role. +// */ +// function revokeRole(bytes32 role, address account) external; + +// /** +// * @dev Revokes `role` from the calling account. +// * +// * Roles are often managed via {grantRole} and {revokeRole}: this function's +// * purpose is to provide a mechanism for accounts to lose their privileges +// * if they are compromised (such as when a trusted device is misplaced). +// * +// * If the calling account had been granted `role`, emits a {RoleRevoked} +// * event. +// * +// * Requirements: +// * +// * - the caller must be `callerConfirmation`. +// */ +// function renounceRole(bytes32 role, address callerConfirmation) external; +// } + +// // node_modules/@openzeppelin/contracts/interfaces/IERC1967.sol + +// // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1967.sol) + +// /** +// * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC. +// */ +// interface IERC1967 { +// /** +// * @dev Emitted when the implementation is upgraded. +// */ +// event Upgraded(address indexed implementation); + +// /** +// * @dev Emitted when the admin account has changed. +// */ +// event AdminChanged(address previousAdmin, address newAdmin); + +// /** +// * @dev Emitted when the beacon is changed. +// */ +// event BeaconUpgraded(address indexed beacon); +// } + +// // node_modules/@openzeppelin/contracts/interfaces/draft-IERC1822.sol + +// // OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC1822.sol) + +// /** +// * @dev ERC-1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified +// * proxy whose upgrades are fully controlled by the current implementation. +// */ +// interface IERC1822Proxiable { +// /** +// * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation +// * address. +// * +// * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks +// * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this +// * function revert if invoked through a proxy. +// */ +// function proxiableUUID() external view returns (bytes32); +// } + +// // node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol + +// // OpenZeppelin Contracts (last updated v5.0.0) (proxy/beacon/IBeacon.sol) + +// /** +// * @dev This is the interface that {BeaconProxy} expects of its beacon. +// */ +// interface IBeacon { +// /** +// * @dev Must return an address that can be used as a delegate call target. +// * +// * {UpgradeableBeacon} will check that this address is a contract. +// */ +// function implementation() external view returns (address); +// } + +// // node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol + +// // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol) + +// /** +// * @dev Interface of the ERC-20 standard as defined in the ERC. +// */ +// interface IERC20 { +// /** +// * @dev Emitted when `value` tokens are moved from one account (`from`) to +// * another (`to`). +// * +// * Note that `value` may be zero. +// */ +// event Transfer(address indexed from, address indexed to, uint256 value); + +// /** +// * @dev Emitted when the allowance of a `spender` for an `owner` is set by +// * a call to {approve}. `value` is the new allowance. +// */ +// event Approval(address indexed owner, address indexed spender, uint256 value); + +// /** +// * @dev Returns the value of tokens in existence. +// */ +// function totalSupply() external view returns (uint256); + +// /** +// * @dev Returns the value of tokens owned by `account`. +// */ +// function balanceOf(address account) external view returns (uint256); + +// /** +// * @dev Moves a `value` amount of tokens from the caller's account to `to`. +// * +// * Returns a boolean value indicating whether the operation succeeded. +// * +// * Emits a {Transfer} event. +// */ +// function transfer(address to, uint256 value) external returns (bool); + +// /** +// * @dev Returns the remaining number of tokens that `spender` will be +// * allowed to spend on behalf of `owner` through {transferFrom}. This is +// * zero by default. +// * +// * This value changes when {approve} or {transferFrom} are called. +// */ +// function allowance(address owner, address spender) external view returns (uint256); + +// /** +// * @dev Sets a `value` amount of tokens as the allowance of `spender` over the +// * caller's tokens. +// * +// * Returns a boolean value indicating whether the operation succeeded. +// * +// * IMPORTANT: Beware that changing an allowance with this method brings the risk +// * that someone may use both the old and the new allowance by unfortunate +// * transaction ordering. One possible solution to mitigate this race +// * condition is to first reduce the spender's allowance to 0 and set the +// * desired value afterwards: +// * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 +// * +// * Emits an {Approval} event. +// */ +// function approve(address spender, uint256 value) external returns (bool); + +// /** +// * @dev Moves a `value` amount of tokens from `from` to `to` using the +// * allowance mechanism. `value` is then deducted from the caller's +// * allowance. +// * +// * Returns a boolean value indicating whether the operation succeeded. +// * +// * Emits a {Transfer} event. +// */ +// function transferFrom(address from, address to, uint256 value) external returns (bool); +// } + +// // node_modules/@openzeppelin/contracts/utils/Errors.sol + +// // OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol) + +// /** +// * @dev Collection of common custom errors used in multiple contracts +// * +// * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library. +// * It is recommended to avoid relying on the error API for critical functionality. +// * +// * _Available since v5.1._ +// */ +// library Errors { +// /** +// * @dev The ETH balance of the account is not enough to perform the operation. +// */ +// error InsufficientBalance(uint256 balance, uint256 needed); + +// /** +// * @dev A call to an address target failed. The target may have reverted. +// */ +// error FailedCall(); + +// /** +// * @dev The deployment failed. +// */ +// error FailedDeployment(); + +// /** +// * @dev A necessary precompile is missing. +// */ +// error MissingPrecompile(address); +// } + +// // node_modules/@openzeppelin/contracts/utils/StorageSlot.sol + +// // OpenZeppelin Contracts (last updated v5.1.0) (utils/StorageSlot.sol) +// // This file was procedurally generated from scripts/generate/templates/StorageSlot.js. + +// /** +// * @dev Library for reading and writing primitive types to specific storage slots. +// * +// * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. +// * This library helps with reading and writing to such slots without the need for inline assembly. +// * +// * The functions in this library return Slot structs that contain a `value` member that can be used to read or write. +// * +// * Example usage to set ERC-1967 implementation slot: +// * ```solidity +// * contract ERC1967 { +// * // Define the slot. Alternatively, use the SlotDerivation library to derive the slot. +// * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; +// * +// * function _getImplementation() internal view returns (address) { +// * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; +// * } +// * +// * function _setImplementation(address newImplementation) internal { +// * require(newImplementation.code.length > 0); +// * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; +// * } +// * } +// * ``` +// * +// * TIP: Consider using this library along with {SlotDerivation}. +// */ +// library StorageSlot { +// struct AddressSlot { +// address value; +// } + +// struct BooleanSlot { +// bool value; +// } + +// struct Bytes32Slot { +// bytes32 value; +// } + +// struct Uint256Slot { +// uint256 value; +// } + +// struct Int256Slot { +// int256 value; +// } + +// struct StringSlot { +// string value; +// } + +// struct BytesSlot { +// bytes value; +// } + +// /** +// * @dev Returns an `AddressSlot` with member `value` located at `slot`. +// */ +// function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) { +// assembly ("memory-safe") { +// r.slot := slot +// } +// } + +// /** +// * @dev Returns a `BooleanSlot` with member `value` located at `slot`. +// */ +// function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) { +// assembly ("memory-safe") { +// r.slot := slot +// } +// } + +// /** +// * @dev Returns a `Bytes32Slot` with member `value` located at `slot`. +// */ +// function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) { +// assembly ("memory-safe") { +// r.slot := slot +// } +// } + +// /** +// * @dev Returns a `Uint256Slot` with member `value` located at `slot`. +// */ +// function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) { +// assembly ("memory-safe") { +// r.slot := slot +// } +// } + +// /** +// * @dev Returns a `Int256Slot` with member `value` located at `slot`. +// */ +// function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) { +// assembly ("memory-safe") { +// r.slot := slot +// } +// } + +// /** +// * @dev Returns a `StringSlot` with member `value` located at `slot`. +// */ +// function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) { +// assembly ("memory-safe") { +// r.slot := slot +// } +// } + +// /** +// * @dev Returns an `StringSlot` representation of the string storage pointer `store`. +// */ +// function getStringSlot(string storage store) internal pure returns (StringSlot storage r) { +// assembly ("memory-safe") { +// r.slot := store.slot +// } +// } + +// /** +// * @dev Returns a `BytesSlot` with member `value` located at `slot`. +// */ +// function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) { +// assembly ("memory-safe") { +// r.slot := slot +// } +// } + +// /** +// * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`. +// */ +// function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) { +// assembly ("memory-safe") { +// r.slot := store.slot +// } +// } +// } + +// // node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol + +// // OpenZeppelin Contracts (last updated v5.1.0) (utils/cryptography/ECDSA.sol) + +// /** +// * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. +// * +// * These functions can be used to verify that a message was signed by the holder +// * of the private keys of a given address. +// */ +// library ECDSA { +// enum RecoverError { +// NoError, +// InvalidSignature, +// InvalidSignatureLength, +// InvalidSignatureS +// } + +// /** +// * @dev The signature derives the `address(0)`. +// */ +// error ECDSAInvalidSignature(); + +// /** +// * @dev The signature has an invalid length. +// */ +// error ECDSAInvalidSignatureLength(uint256 length); + +// /** +// * @dev The signature has an S value that is in the upper half order. +// */ +// error ECDSAInvalidSignatureS(bytes32 s); + +// /** +// * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not +// * return address(0) without also returning an error description. Errors are documented using an enum (error type) +// * and a bytes32 providing additional information about the error. +// * +// * If no error is returned, then the address can be used for verification purposes. +// * +// * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures: +// * this function rejects them by requiring the `s` value to be in the lower +// * half order, and the `v` value to be either 27 or 28. +// * +// * IMPORTANT: `hash` _must_ be the result of a hash operation for the +// * verification to be secure: it is possible to craft signatures that +// * recover to arbitrary addresses for non-hashed data. A safe way to ensure +// * this is by receiving a hash of the original message (which may otherwise +// * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it. +// * +// * Documentation for signature generation: +// * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] +// * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] +// */ +// function tryRecover( +// bytes32 hash, +// bytes memory signature +// ) internal pure returns (address recovered, RecoverError err, bytes32 errArg) { +// if (signature.length == 65) { +// bytes32 r; +// bytes32 s; +// uint8 v; +// // ecrecover takes the signature parameters, and the only way to get them +// // currently is to use assembly. +// assembly ("memory-safe") { +// r := mload(add(signature, 0x20)) +// s := mload(add(signature, 0x40)) +// v := byte(0, mload(add(signature, 0x60))) +// } +// return tryRecover(hash, v, r, s); +// } else { +// return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length)); +// } +// } + +// /** +// * @dev Returns the address that signed a hashed message (`hash`) with +// * `signature`. This address can then be used for verification purposes. +// * +// * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures: +// * this function rejects them by requiring the `s` value to be in the lower +// * half order, and the `v` value to be either 27 or 28. +// * +// * IMPORTANT: `hash` _must_ be the result of a hash operation for the +// * verification to be secure: it is possible to craft signatures that +// * recover to arbitrary addresses for non-hashed data. A safe way to ensure +// * this is by receiving a hash of the original message (which may otherwise +// * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it. +// */ +// function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { +// (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature); +// _throwError(error, errorArg); +// return recovered; +// } + +// /** +// * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. +// * +// * See https://eips.ethereum.org/EIPS/eip-2098[ERC-2098 short signatures] +// */ +// function tryRecover( +// bytes32 hash, +// bytes32 r, +// bytes32 vs +// ) internal pure returns (address recovered, RecoverError err, bytes32 errArg) { +// unchecked { +// bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); +// // We do not check for an overflow here since the shift operation results in 0 or 1. +// uint8 v = uint8((uint256(vs) >> 255) + 27); +// return tryRecover(hash, v, r, s); +// } +// } + +// /** +// * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. +// */ +// function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) { +// (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs); +// _throwError(error, errorArg); +// return recovered; +// } + +// /** +// * @dev Overload of {ECDSA-tryRecover} that receives the `v`, +// * `r` and `s` signature fields separately. +// */ +// function tryRecover( +// bytes32 hash, +// uint8 v, +// bytes32 r, +// bytes32 s +// ) internal pure returns (address recovered, RecoverError err, bytes32 errArg) { +// // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature +// // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines +// // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most +// // signatures from current libraries generate a unique signature with an s-value in the lower half order. +// // +// // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value +// // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or +// // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept +// // these malleable signatures as well. +// if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { +// return (address(0), RecoverError.InvalidSignatureS, s); +// } + +// // If the signature is valid (and not malleable), return the signer address +// address signer = ecrecover(hash, v, r, s); +// if (signer == address(0)) { +// return (address(0), RecoverError.InvalidSignature, bytes32(0)); +// } + +// return (signer, RecoverError.NoError, bytes32(0)); +// } + +// /** +// * @dev Overload of {ECDSA-recover} that receives the `v`, +// * `r` and `s` signature fields separately. +// */ +// function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) { +// (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s); +// _throwError(error, errorArg); +// return recovered; +// } + +// /** +// * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided. +// */ +// function _throwError(RecoverError error, bytes32 errorArg) private pure { +// if (error == RecoverError.NoError) { +// return; // no error: do nothing +// } else if (error == RecoverError.InvalidSignature) { +// revert ECDSAInvalidSignature(); +// } else if (error == RecoverError.InvalidSignatureLength) { +// revert ECDSAInvalidSignatureLength(uint256(errorArg)); +// } else if (error == RecoverError.InvalidSignatureS) { +// revert ECDSAInvalidSignatureS(errorArg); +// } +// } +// } + +// // node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol + +// // OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol) + +// /** +// * @dev Interface of the ERC-165 standard, as defined in the +// * https://eips.ethereum.org/EIPS/eip-165[ERC]. +// * +// * Implementers can declare support of contract interfaces, which can then be +// * queried by others ({ERC165Checker}). +// * +// * For an implementation, see {ERC165}. +// */ +// interface IERC165 { +// /** +// * @dev Returns true if this contract implements the interface defined by +// * `interfaceId`. See the corresponding +// * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] +// * to learn more about how these ids are created. +// * +// * This function call must use less than 30 000 gas. +// */ +// function supportsInterface(bytes4 interfaceId) external view returns (bool); +// } + +// // node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol + +// // OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol) + +// /** +// * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed +// * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an +// * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer +// * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. +// * +// * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be +// * reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in +// * case an upgrade adds a module that needs to be initialized. +// * +// * For example: +// * +// * [.hljs-theme-light.nopadding] +// * ```solidity +// * contract MyToken is ERC20Upgradeable { +// * function initialize() initializer public { +// * __ERC20_init("MyToken", "MTK"); +// * } +// * } +// * +// * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { +// * function initializeV2() reinitializer(2) public { +// * __ERC20Permit_init("MyToken"); +// * } +// * } +// * ``` +// * +// * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as +// * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. +// * +// * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure +// * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. +// * +// * [CAUTION] +// * ==== +// * Avoid leaving a contract uninitialized. +// * +// * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation +// * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke +// * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: +// * +// * [.hljs-theme-light.nopadding] +// * ``` +// * /// @custom:oz-upgrades-unsafe-allow constructor +// * constructor() { +// * _disableInitializers(); +// * } +// * ``` +// * ==== +// */ +// abstract contract Initializable { +// /** +// * @dev Storage of the initializable contract. +// * +// * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions +// * when using with upgradeable contracts. +// * +// * @custom:storage-location erc7201:openzeppelin.storage.Initializable +// */ +// struct InitializableStorage { +// /** +// * @dev Indicates that the contract has been initialized. +// */ +// uint64 _initialized; +// /** +// * @dev Indicates that the contract is in the process of being initialized. +// */ +// bool _initializing; +// } + +// // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Initializable")) - 1)) & ~bytes32(uint256(0xff)) +// bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00; + +// /** +// * @dev The contract is already initialized. +// */ +// error InvalidInitialization(); + +// /** +// * @dev The contract is not initializing. +// */ +// error NotInitializing(); + +// /** +// * @dev Triggered when the contract has been initialized or reinitialized. +// */ +// event Initialized(uint64 version); + +// /** +// * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope, +// * `onlyInitializing` functions can be used to initialize parent contracts. +// * +// * Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any +// * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in +// * production. +// * +// * Emits an {Initialized} event. +// */ +// modifier initializer() { +// // solhint-disable-next-line var-name-mixedcase +// InitializableStorage storage $ = _getInitializableStorage(); + +// // Cache values to avoid duplicated sloads +// bool isTopLevelCall = !$._initializing; +// uint64 initialized = $._initialized; + +// // Allowed calls: +// // - initialSetup: the contract is not in the initializing state and no previous version was +// // initialized +// // - construction: the contract is initialized at version 1 (no reininitialization) and the +// // current contract is just being deployed +// bool initialSetup = initialized == 0 && isTopLevelCall; +// bool construction = initialized == 1 && address(this).code.length == 0; + +// if (!initialSetup && !construction) { +// revert InvalidInitialization(); +// } +// $._initialized = 1; +// if (isTopLevelCall) { +// $._initializing = true; +// } +// _; +// if (isTopLevelCall) { +// $._initializing = false; +// emit Initialized(1); +// } +// } + +// /** +// * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the +// * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be +// * used to initialize parent contracts. +// * +// * A reinitializer may be used after the original initialization step. This is essential to configure modules that +// * are added through upgrades and that require initialization. +// * +// * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer` +// * cannot be nested. If one is invoked in the context of another, execution will revert. +// * +// * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in +// * a contract, executing them in the right order is up to the developer or operator. +// * +// * WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization. +// * +// * Emits an {Initialized} event. +// */ +// modifier reinitializer(uint64 version) { +// // solhint-disable-next-line var-name-mixedcase +// InitializableStorage storage $ = _getInitializableStorage(); + +// if ($._initializing || $._initialized >= version) { +// revert InvalidInitialization(); +// } +// $._initialized = version; +// $._initializing = true; +// _; +// $._initializing = false; +// emit Initialized(version); +// } + +// /** +// * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the +// * {initializer} and {reinitializer} modifiers, directly or indirectly. +// */ +// modifier onlyInitializing() { +// _checkInitializing(); +// _; +// } + +// /** +// * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}. +// */ +// function _checkInitializing() internal view virtual { +// if (!_isInitializing()) { +// revert NotInitializing(); +// } +// } + +// /** +// * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call. +// * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized +// * to any version. It is recommended to use this to lock implementation contracts that are designed to be called +// * through proxies. +// * +// * Emits an {Initialized} event the first time it is successfully executed. +// */ +// function _disableInitializers() internal virtual { +// // solhint-disable-next-line var-name-mixedcase +// InitializableStorage storage $ = _getInitializableStorage(); + +// if ($._initializing) { +// revert InvalidInitialization(); +// } +// if ($._initialized != type(uint64).max) { +// $._initialized = type(uint64).max; +// emit Initialized(type(uint64).max); +// } +// } + +// /** +// * @dev Returns the highest version that has been initialized. See {reinitializer}. +// */ +// function _getInitializedVersion() internal view returns (uint64) { +// return _getInitializableStorage()._initialized; +// } + +// /** +// * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}. +// */ +// function _isInitializing() internal view returns (bool) { +// return _getInitializableStorage()._initializing; +// } + +// /** +// * @dev Returns a pointer to the storage namespace. +// */ +// // solhint-disable-next-line var-name-mixedcase +// function _getInitializableStorage() private pure returns (InitializableStorage storage $) { +// assembly { +// $.slot := INITIALIZABLE_STORAGE +// } +// } +// } + +// // node_modules/@openzeppelin/contracts/utils/Address.sol + +// // OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol) + +// /** +// * @dev Collection of functions related to the address type +// */ +// library Address { +// /** +// * @dev There's no code at `target` (it is not a contract). +// */ +// error AddressEmptyCode(address target); + +// /** +// * @dev Replacement for Solidity's `transfer`: sends `amount` wei to +// * `recipient`, forwarding all available gas and reverting on errors. +// * +// * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost +// * of certain opcodes, possibly making contracts go over the 2300 gas limit +// * imposed by `transfer`, making them unable to receive funds via +// * `transfer`. {sendValue} removes this limitation. +// * +// * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. +// * +// * IMPORTANT: because control is transferred to `recipient`, care must be +// * taken to not create reentrancy vulnerabilities. Consider using +// * {ReentrancyGuard} or the +// * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. +// */ +// function sendValue(address payable recipient, uint256 amount) internal { +// if (address(this).balance < amount) { +// revert Errors.InsufficientBalance(address(this).balance, amount); +// } + +// (bool success, ) = recipient.call{value: amount}(""); +// if (!success) { +// revert Errors.FailedCall(); +// } +// } + +// /** +// * @dev Performs a Solidity function call using a low level `call`. A +// * plain `call` is an unsafe replacement for a function call: use this +// * function instead. +// * +// * If `target` reverts with a revert reason or custom error, it is bubbled +// * up by this function (like regular Solidity function calls). However, if +// * the call reverted with no returned reason, this function reverts with a +// * {Errors.FailedCall} error. +// * +// * Returns the raw returned data. To convert to the expected return value, +// * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. +// * +// * Requirements: +// * +// * - `target` must be a contract. +// * - calling `target` with `data` must not revert. +// */ +// function functionCall(address target, bytes memory data) internal returns (bytes memory) { +// return functionCallWithValue(target, data, 0); +// } + +// /** +// * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], +// * but also transferring `value` wei to `target`. +// * +// * Requirements: +// * +// * - the calling contract must have an ETH balance of at least `value`. +// * - the called Solidity function must be `payable`. +// */ +// function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { +// if (address(this).balance < value) { +// revert Errors.InsufficientBalance(address(this).balance, value); +// } +// (bool success, bytes memory returndata) = target.call{value: value}(data); +// return verifyCallResultFromTarget(target, success, returndata); +// } + +// /** +// * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], +// * but performing a static call. +// */ +// function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { +// (bool success, bytes memory returndata) = target.staticcall(data); +// return verifyCallResultFromTarget(target, success, returndata); +// } + +// /** +// * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], +// * but performing a delegate call. +// */ +// function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { +// (bool success, bytes memory returndata) = target.delegatecall(data); +// return verifyCallResultFromTarget(target, success, returndata); +// } + +// /** +// * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target +// * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case +// * of an unsuccessful call. +// */ +// function verifyCallResultFromTarget( +// address target, +// bool success, +// bytes memory returndata +// ) internal view returns (bytes memory) { +// if (!success) { +// _revert(returndata); +// } else { +// // only check if target is a contract if the call was successful and the return data is empty +// // otherwise we already know that it was a contract +// if (returndata.length == 0 && target.code.length == 0) { +// revert AddressEmptyCode(target); +// } +// return returndata; +// } +// } + +// /** +// * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the +// * revert reason or with a default {Errors.FailedCall} error. +// */ +// function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) { +// if (!success) { +// _revert(returndata); +// } else { +// return returndata; +// } +// } + +// /** +// * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}. +// */ +// function _revert(bytes memory returndata) private pure { +// // Look for revert reason and bubble it up if present +// if (returndata.length > 0) { +// // The easiest way to bubble the revert reason is using memory via assembly +// assembly ("memory-safe") { +// let returndata_size := mload(returndata) +// revert(add(32, returndata), returndata_size) +// } +// } else { +// revert Errors.FailedCall(); +// } +// } +// } + +// // node_modules/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol + +// // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) + +// /** +// * @dev Provides information about the current execution context, including the +// * sender of the transaction and its data. While these are generally available +// * via msg.sender and msg.data, they should not be accessed in such a direct +// * manner, since when dealing with meta-transactions the account sending and +// * paying for execution may not be the actual sender (as far as an application +// * is concerned). +// * +// * This contract is only required for intermediate, library-like contracts. +// */ +// abstract contract ContextUpgradeable is Initializable { +// function __Context_init() internal onlyInitializing { +// } + +// function __Context_init_unchained() internal onlyInitializing { +// } +// function _msgSender() internal view virtual returns (address) { +// return msg.sender; +// } + +// function _msgData() internal view virtual returns (bytes calldata) { +// return msg.data; +// } + +// function _contextSuffixLength() internal view virtual returns (uint256) { +// return 0; +// } +// } + +// // node_modules/@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol + +// // OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol) + +// /** +// * @dev Contract module that helps prevent reentrant calls to a function. +// * +// * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier +// * available, which can be applied to functions to make sure there are no nested +// * (reentrant) calls to them. +// * +// * Note that because there is a single `nonReentrant` guard, functions marked as +// * `nonReentrant` may not call one another. This can be worked around by making +// * those functions `private`, and then adding `external` `nonReentrant` entry +// * points to them. +// * +// * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at, +// * consider using {ReentrancyGuardTransient} instead. +// * +// * TIP: If you would like to learn more about reentrancy and alternative ways +// * to protect against it, check out our blog post +// * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. +// */ +// abstract contract ReentrancyGuardUpgradeable is Initializable { +// // Booleans are more expensive than uint256 or any type that takes up a full +// // word because each write operation emits an extra SLOAD to first read the +// // slot's contents, replace the bits taken up by the boolean, and then write +// // back. This is the compiler's defense against contract upgrades and +// // pointer aliasing, and it cannot be disabled. + +// // The values being non-zero value makes deployment a bit more expensive, +// // but in exchange the refund on every call to nonReentrant will be lower in +// // amount. Since refunds are capped to a percentage of the total +// // transaction's gas, it is best to keep them low in cases like this one, to +// // increase the likelihood of the full refund coming into effect. +// uint256 private constant NOT_ENTERED = 1; +// uint256 private constant ENTERED = 2; + +// /// @custom:storage-location erc7201:openzeppelin.storage.ReentrancyGuard +// struct ReentrancyGuardStorage { +// uint256 _status; +// } + +// // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.ReentrancyGuard")) - 1)) & ~bytes32(uint256(0xff)) +// bytes32 private constant ReentrancyGuardStorageLocation = 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00; + +// function _getReentrancyGuardStorage() private pure returns (ReentrancyGuardStorage storage $) { +// assembly { +// $.slot := ReentrancyGuardStorageLocation +// } +// } + +// /** +// * @dev Unauthorized reentrant call. +// */ +// error ReentrancyGuardReentrantCall(); + +// function __ReentrancyGuard_init() internal onlyInitializing { +// __ReentrancyGuard_init_unchained(); +// } + +// function __ReentrancyGuard_init_unchained() internal onlyInitializing { +// ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage(); +// $._status = NOT_ENTERED; +// } + +// /** +// * @dev Prevents a contract from calling itself, directly or indirectly. +// * Calling a `nonReentrant` function from another `nonReentrant` +// * function is not supported. It is possible to prevent this from happening +// * by making the `nonReentrant` function external, and making it call a +// * `private` function that does the actual work. +// */ +// modifier nonReentrant() { +// _nonReentrantBefore(); +// _; +// _nonReentrantAfter(); +// } + +// function _nonReentrantBefore() private { +// ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage(); +// // On the first call to nonReentrant, _status will be NOT_ENTERED +// if ($._status == ENTERED) { +// revert ReentrancyGuardReentrantCall(); +// } + +// // Any calls to nonReentrant after this point will fail +// $._status = ENTERED; +// } + +// function _nonReentrantAfter() private { +// ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage(); +// // By storing the original value once again, a refund is triggered (see +// // https://eips.ethereum.org/EIPS/eip-2200) +// $._status = NOT_ENTERED; +// } + +// /** +// * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a +// * `nonReentrant` function in the call stack. +// */ +// function _reentrancyGuardEntered() internal view returns (bool) { +// ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage(); +// return $._status == ENTERED; +// } +// } + +// // contracts/lib/Helper.sol + +// library HELPER { +// function GET_IMAGE_ID_FROM_ATTESTATION(bytes memory data) internal pure returns (bytes32) { +// (, , bytes memory PCR0, bytes memory PCR1, bytes memory PCR2, , , ) = abi.decode( +// data, +// (bytes, bytes, bytes, bytes, bytes, uint256, uint256, uint256) +// ); + +// return GET_IMAGE_ID_FROM_PCRS(PCR0, PCR1, PCR2); +// } + +// function GET_IMAGE_ID_FROM_PCRS(bytes calldata pcrs) internal pure returns (bytes32) { +// (bytes memory PCR0, bytes memory PCR1, bytes memory PCR2) = abi.decode(pcrs, (bytes, bytes, bytes)); +// return GET_IMAGE_ID_FROM_PCRS(PCR0, PCR1, PCR2); +// } + +// function GET_IMAGE_ID_FROM_PCRS(bytes memory PCR0, bytes memory PCR1, bytes memory PCR2) internal pure returns (bytes32) { +// bytes32 imageId = keccak256(abi.encodePacked(PCR0, PCR1, PCR2)); +// return imageId; +// } + +// function GET_PUBKEY_AND_ADDRESS(bytes memory data) internal pure returns (bytes memory, address) { +// (, bytes memory enclaveEciesKey, , , , , , ) = abi.decode(data, (bytes, bytes, bytes, bytes, bytes, uint256, uint256, uint256)); + +// return (enclaveEciesKey, PUBKEY_TO_ADDRESS(enclaveEciesKey)); +// } + +// function GET_PUBKEY(bytes memory data) internal pure returns (bytes memory) { +// (, bytes memory enclaveEciesKey, , , , , , ) = abi.decode(data, (bytes, bytes, bytes, bytes, bytes, uint256, uint256, uint256)); + +// return (enclaveEciesKey); +// } + +// function GET_ADDRESS(bytes memory data) internal pure returns (address) { +// (, bytes memory enclaveEciesKey, , , , , , ) = abi.decode(data, (bytes, bytes, bytes, bytes, bytes, uint256, uint256, uint256)); + +// return (PUBKEY_TO_ADDRESS(enclaveEciesKey)); +// } + +// function PUBKEY_TO_ADDRESS(bytes memory publicKey) internal pure returns (address) { +// // Ensure the internal key is 64 bytes long +// if (publicKey.length != 64) { +// revert Error.InvalidEnclaveKey(); +// } + +// // Perform the elliptic curve recover operation to get the Ethereum address +// bytes32 hash = keccak256(publicKey); +// return address(uint160(uint256(hash))); +// } + +// function GET_ETH_SIGNED_HASHED_MESSAGE(bytes32 messageHash) internal pure returns (bytes32) { +// return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", messageHash)); +// } + +// function GET_TIMESTAMP_IN_SEC_FROM_ATTESTATION(bytes memory data) internal pure returns (uint256) { +// (, , , , , , , uint256 timestamp) = abi.decode(data, (bytes, bytes, bytes, bytes, bytes, uint256, uint256, uint256)); + +// return timestamp / 1000; +// } + +// function IS_ENCLAVE(bytes32 imageId) internal pure returns (bool) { +// return !(imageId == bytes32(0) || imageId == NO_ENCLAVE_ID); +// } + +// /** +// * @notice Checks if addressToVerify posses access to enclave +// */ +// function VERIFY_ENCLAVE_SIGNATURE( +// bytes memory attestationData, +// bytes calldata enclaveSignature, +// address addressToVerify +// ) internal pure { +// bytes32 messageHash = keccak256(abi.encode(attestationData, addressToVerify)); +// bytes32 ethSignedMessageHash = GET_ETH_SIGNED_HASHED_MESSAGE(messageHash); + +// address signer = ECDSA.recover(ethSignedMessageHash, enclaveSignature); +// if (signer != GET_ADDRESS(attestationData)) { +// revert Error.InvalidEnclaveSignature(signer); +// } +// } + +// function MATCHING_ENGINE_FAMILY_ID(bytes32 roleId) internal pure returns (bytes32) { +// return keccak256(abi.encode(roleId)); +// } + +// function PROVER_FAMILY_ID(uint256 marketId) internal pure returns (bytes32) { +// return keccak256(abi.encode("prov", marketId)); +// } + +// function IVS_FAMILY_ID(uint256 marketId) internal pure returns (bytes32) { +// return keccak256(abi.encode("ivs", marketId)); +// } + +// bytes32 internal constant NO_ENCLAVE_ID = 0xcd2e66bf0b91eeedc6c648ae9335a78d7c9a4ab0ef33612a824d91cdc68a4f21; + +// uint256 internal constant ACCEPTABLE_ATTESTATION_DELAY = 60000; // 60 seconds, 60,000 milliseconds +// } + +// // contracts/periphery/AttestationAutherUpgradeable.sol + +// contract AttestationAutherUpgradeable is +// Initializable // initializer +// { +// /// @custom:oz-upgrades-unsafe-allow state-variable-immutable +// IAttestationVerifier public immutable ATTESTATION_VERIFIER; + +// /// @custom:oz-upgrades-unsafe-allow state-variable-immutable +// uint256 public immutable ATTESTATION_MAX_AGE; + +// /// @custom:oz-upgrades-unsafe-allow constructor +// constructor(IAttestationVerifier attestationVerifier, uint256 maxAge) { +// ATTESTATION_VERIFIER = attestationVerifier; +// ATTESTATION_MAX_AGE = maxAge; +// } + +// struct EnclaveImage { +// bytes PCR0; +// bytes PCR1; +// bytes PCR2; +// } + +// /// @custom:storage-location erc7201:marlin.oyster.storage.AttestationAuther +// struct AttestationAutherStorage { +// mapping(bytes32 => EnclaveImage) whitelistedImages; +// mapping(address => bytes32) verifiedKeys; +// mapping(bytes32 => mapping(bytes32 => bool)) imageFamilies; +// } + +// // keccak256(abi.encode(uint256(keccak256("marlin.oyster.storage.AttestationAuther")) - 1)) & ~bytes32(uint256(0xff)) +// bytes32 private constant AttestationAutherStorageLocation = +// 0xc17b4b708b6f44255c20913a9d97a05300b670342c71fe5ae5b617bd4db55000; + +// function _getAttestationAutherStorage() private pure returns (AttestationAutherStorage storage $) { +// assembly { +// $.slot := AttestationAutherStorageLocation +// } +// } + +// error AttestationAutherPubkeyLengthInvalid(); +// error AttestationAutherPCRsInvalid(); +// error AttestationAutherImageNotWhitelisted(); +// error AttestationAutherImageNotInFamily(); +// error AttestationAutherKeyNotVerified(); +// error AttestationAutherAttestationTooOld(); +// error AttestationAutherMismatchedLengths(); + +// event EnclaveImageWhitelisted(bytes32 indexed imageId, bytes PCR0, bytes PCR1, bytes PCR2); +// event EnclaveImageRevoked(bytes32 indexed imageId); +// event EnclaveImageAddedToFamily(bytes32 indexed imageId, bytes32 family); +// event EnclaveImageRemovedFromFamily(bytes32 indexed imageId, bytes32 family); +// event EnclaveKeyWhitelisted(bytes indexed enclavePubKey, bytes32 indexed imageId); +// event EnclaveKeyRevoked(bytes indexed enclavePubKey); +// event EnclaveKeyVerified(bytes indexed enclavePubKey, bytes32 indexed imageId); + +// function __AttestationAuther_init_unchained(EnclaveImage[] memory images) internal onlyInitializing { +// for (uint256 i = 0; i < images.length; i++) { +// _whitelistEnclaveImage(images[i]); +// } +// } + +// function __AttestationAuther_init_unchained( +// EnclaveImage[] memory images, +// bytes32[] memory families +// ) internal onlyInitializing { +// if (!(images.length == families.length)) revert AttestationAutherMismatchedLengths(); +// for (uint256 i = 0; i < images.length; i++) { +// (bytes32 imageId,) = _whitelistEnclaveImage(images[i]); +// _addEnclaveImageToFamily(imageId, families[i]); +// } +// } + +// function _pubKeyToAddress(bytes memory pubKey) internal pure returns (address) { +// if (!(pubKey.length == 64)) revert AttestationAutherPubkeyLengthInvalid(); + +// bytes32 hash = keccak256(pubKey); +// return address(uint160(uint256(hash))); +// } + +// function _whitelistEnclaveImage(EnclaveImage memory image) internal virtual returns (bytes32, bool) { +// AttestationAutherStorage storage $ = _getAttestationAutherStorage(); + +// if (!(image.PCR0.length == 48 && image.PCR1.length == 48 && image.PCR2.length == 48)) +// revert AttestationAutherPCRsInvalid(); + +// bytes32 imageId = keccak256(abi.encodePacked(image.PCR0, image.PCR1, image.PCR2)); +// if (!($.whitelistedImages[imageId].PCR0.length == 0)) return (imageId, false); + +// $.whitelistedImages[imageId] = EnclaveImage(image.PCR0, image.PCR1, image.PCR2); +// emit EnclaveImageWhitelisted(imageId, image.PCR0, image.PCR1, image.PCR2); + +// return (imageId, true); +// } + +// function _revokeEnclaveImage(bytes32 imageId) internal virtual returns (bool) { +// AttestationAutherStorage storage $ = _getAttestationAutherStorage(); + +// if (!($.whitelistedImages[imageId].PCR0.length != 0)) return false; + +// delete $.whitelistedImages[imageId]; +// emit EnclaveImageRevoked(imageId); + +// return true; +// } + +// function _addEnclaveImageToFamily(bytes32 imageId, bytes32 family) internal virtual returns (bool) { +// AttestationAutherStorage storage $ = _getAttestationAutherStorage(); + +// if (!($.imageFamilies[family][imageId] == false)) return false; + +// $.imageFamilies[family][imageId] = true; +// emit EnclaveImageAddedToFamily(imageId, family); + +// return true; +// } + +// function _removeEnclaveImageFromFamily(bytes32 imageId, bytes32 family) internal virtual returns (bool) { +// AttestationAutherStorage storage $ = _getAttestationAutherStorage(); + +// if (!($.imageFamilies[family][imageId] == true)) return false; + +// $.imageFamilies[family][imageId] = false; +// emit EnclaveImageRemovedFromFamily(imageId, family); + +// return true; +// } + +// function _whitelistEnclaveKey(bytes memory enclavePubKey, bytes32 imageId) internal virtual returns (bool) { +// AttestationAutherStorage storage $ = _getAttestationAutherStorage(); + +// if (!($.whitelistedImages[imageId].PCR0.length != 0)) revert AttestationAutherImageNotWhitelisted(); + +// address enclaveKey = _pubKeyToAddress(enclavePubKey); +// if (!($.verifiedKeys[enclaveKey] == bytes32(0))) return false; + +// $.verifiedKeys[enclaveKey] = imageId; +// emit EnclaveKeyWhitelisted(enclavePubKey, imageId); + +// return true; +// } + +// function _revokeEnclaveKey(bytes memory enclavePubKey) internal virtual returns (bool) { +// AttestationAutherStorage storage $ = _getAttestationAutherStorage(); + +// address enclaveKey = _pubKeyToAddress(enclavePubKey); +// if (!($.verifiedKeys[enclaveKey] != bytes32(0))) return false; + +// delete $.verifiedKeys[enclaveKey]; +// emit EnclaveKeyRevoked(enclavePubKey); + +// return true; +// } + +// function _verifyEnclaveKey(bytes memory signature, IAttestationVerifier.Attestation memory attestation) internal virtual returns (bool) { +// AttestationAutherStorage storage $ = _getAttestationAutherStorage(); + +// bytes32 imageId = keccak256(abi.encodePacked(attestation.PCR0, attestation.PCR1, attestation.PCR2)); +// if (!($.whitelistedImages[imageId].PCR0.length != 0)) revert AttestationAutherImageNotWhitelisted(); +// if (!(attestation.timestampInMilliseconds / 1000 > block.timestamp - ATTESTATION_MAX_AGE)) +// revert AttestationAutherAttestationTooOld(); + +// ATTESTATION_VERIFIER.verify(signature, attestation); + +// address enclaveKey = _pubKeyToAddress(attestation.enclavePubKey); +// if (!($.verifiedKeys[enclaveKey] == bytes32(0))) return false; + +// $.verifiedKeys[enclaveKey] = imageId; +// emit EnclaveKeyVerified(attestation.enclavePubKey, imageId); + +// return true; +// } + +// function verifyEnclaveKey(bytes memory signature, IAttestationVerifier.Attestation memory attestation) external returns (bool) { +// return _verifyEnclaveKey(signature, attestation); +// } + +// function _allowOnlyVerified(address key) internal virtual view { +// AttestationAutherStorage storage $ = _getAttestationAutherStorage(); + +// bytes32 imageId = $.verifiedKeys[key]; +// if (!(imageId != bytes32(0))) revert AttestationAutherKeyNotVerified(); +// if (!($.whitelistedImages[imageId].PCR0.length != 0)) revert AttestationAutherImageNotWhitelisted(); +// } + +// function _allowOnlyVerifiedFamily(address key, bytes32 family) internal virtual view { +// AttestationAutherStorage storage $ = _getAttestationAutherStorage(); + +// bytes32 imageId = $.verifiedKeys[key]; +// if (!(imageId != bytes32(0))) revert AttestationAutherKeyNotVerified(); +// if (!($.whitelistedImages[imageId].PCR0.length != 0)) revert AttestationAutherImageNotWhitelisted(); +// if (!($.imageFamilies[family][imageId])) revert AttestationAutherImageNotInFamily(); +// } + +// function getWhitelistedImage(bytes32 _imageId) external view returns (EnclaveImage memory) { +// AttestationAutherStorage storage $ = _getAttestationAutherStorage(); + +// return $.whitelistedImages[_imageId]; +// } + +// function getVerifiedKey(address _key) external view returns (bytes32) { +// AttestationAutherStorage storage $ = _getAttestationAutherStorage(); + +// return $.verifiedKeys[_key]; +// } + +// function isImageInFamily(bytes32 imageId, bytes32 family) external view returns (bool) { +// AttestationAutherStorage storage $ = _getAttestationAutherStorage(); + +// return $.imageFamilies[family][imageId]; +// } +// } + +// // node_modules/@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol + +// // OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/ERC165.sol) + +// /** +// * @dev Implementation of the {IERC165} interface. +// * +// * Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check +// * for the additional interface id that will be supported. For example: +// * +// * ```solidity +// * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { +// * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); +// * } +// * ``` +// */ +// abstract contract ERC165Upgradeable is Initializable, IERC165 { +// function __ERC165_init() internal onlyInitializing { +// } + +// function __ERC165_init_unchained() internal onlyInitializing { +// } +// /** +// * @dev See {IERC165-supportsInterface}. +// */ +// function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { +// return interfaceId == type(IERC165).interfaceId; +// } +// } + +// // node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol + +// // OpenZeppelin Contracts (last updated v5.1.0) (proxy/ERC1967/ERC1967Utils.sol) + +// /** +// * @dev This library provides getters and event emitting update functions for +// * https://eips.ethereum.org/EIPS/eip-1967[ERC-1967] slots. +// */ +// library ERC1967Utils { +// /** +// * @dev Storage slot with the address of the current implementation. +// * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1. +// */ +// // solhint-disable-next-line private-vars-leading-underscore +// bytes32 internal constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; + +// /** +// * @dev The `implementation` of the proxy is invalid. +// */ +// error ERC1967InvalidImplementation(address implementation); + +// /** +// * @dev The `admin` of the proxy is invalid. +// */ +// error ERC1967InvalidAdmin(address admin); + +// /** +// * @dev The `beacon` of the proxy is invalid. +// */ +// error ERC1967InvalidBeacon(address beacon); + +// /** +// * @dev An upgrade function sees `msg.value > 0` that may be lost. +// */ +// error ERC1967NonPayable(); + +// /** +// * @dev Returns the current implementation address. +// */ +// function getImplementation() internal view returns (address) { +// return StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value; +// } + +// /** +// * @dev Stores a new address in the ERC-1967 implementation slot. +// */ +// function _setImplementation(address newImplementation) private { +// if (newImplementation.code.length == 0) { +// revert ERC1967InvalidImplementation(newImplementation); +// } +// StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value = newImplementation; +// } + +// /** +// * @dev Performs implementation upgrade with additional setup call if data is nonempty. +// * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected +// * to avoid stuck value in the contract. +// * +// * Emits an {IERC1967-Upgraded} event. +// */ +// function upgradeToAndCall(address newImplementation, bytes memory data) internal { +// _setImplementation(newImplementation); +// emit IERC1967.Upgraded(newImplementation); + +// if (data.length > 0) { +// Address.functionDelegateCall(newImplementation, data); +// } else { +// _checkNonPayable(); +// } +// } + +// /** +// * @dev Storage slot with the admin of the contract. +// * This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1. +// */ +// // solhint-disable-next-line private-vars-leading-underscore +// bytes32 internal constant ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; + +// /** +// * @dev Returns the current admin. +// * +// * TIP: To get this value clients can read directly from the storage slot shown below (specified by ERC-1967) using +// * the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. +// * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103` +// */ +// function getAdmin() internal view returns (address) { +// return StorageSlot.getAddressSlot(ADMIN_SLOT).value; +// } + +// /** +// * @dev Stores a new address in the ERC-1967 admin slot. +// */ +// function _setAdmin(address newAdmin) private { +// if (newAdmin == address(0)) { +// revert ERC1967InvalidAdmin(address(0)); +// } +// StorageSlot.getAddressSlot(ADMIN_SLOT).value = newAdmin; +// } + +// /** +// * @dev Changes the admin of the proxy. +// * +// * Emits an {IERC1967-AdminChanged} event. +// */ +// function changeAdmin(address newAdmin) internal { +// emit IERC1967.AdminChanged(getAdmin(), newAdmin); +// _setAdmin(newAdmin); +// } + +// /** +// * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. +// * This is the keccak-256 hash of "eip1967.proxy.beacon" subtracted by 1. +// */ +// // solhint-disable-next-line private-vars-leading-underscore +// bytes32 internal constant BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50; + +// /** +// * @dev Returns the current beacon. +// */ +// function getBeacon() internal view returns (address) { +// return StorageSlot.getAddressSlot(BEACON_SLOT).value; +// } + +// /** +// * @dev Stores a new beacon in the ERC-1967 beacon slot. +// */ +// function _setBeacon(address newBeacon) private { +// if (newBeacon.code.length == 0) { +// revert ERC1967InvalidBeacon(newBeacon); +// } + +// StorageSlot.getAddressSlot(BEACON_SLOT).value = newBeacon; + +// address beaconImplementation = IBeacon(newBeacon).implementation(); +// if (beaconImplementation.code.length == 0) { +// revert ERC1967InvalidImplementation(beaconImplementation); +// } +// } + +// /** +// * @dev Change the beacon and trigger a setup call if data is nonempty. +// * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected +// * to avoid stuck value in the contract. +// * +// * Emits an {IERC1967-BeaconUpgraded} event. +// * +// * CAUTION: Invoking this function has no effect on an instance of {BeaconProxy} since v5, since +// * it uses an immutable beacon without looking at the value of the ERC-1967 beacon slot for +// * efficiency. +// */ +// function upgradeBeaconToAndCall(address newBeacon, bytes memory data) internal { +// _setBeacon(newBeacon); +// emit IERC1967.BeaconUpgraded(newBeacon); + +// if (data.length > 0) { +// Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data); +// } else { +// _checkNonPayable(); +// } +// } + +// /** +// * @dev Reverts if `msg.value` is not zero. It can be used to avoid `msg.value` stuck in the contract +// * if an upgrade doesn't perform an initialization call. +// */ +// function _checkNonPayable() private { +// if (msg.value > 0) { +// revert ERC1967NonPayable(); +// } +// } +// } + +// // node_modules/@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol + +// // OpenZeppelin Contracts (last updated v5.0.0) (access/AccessControl.sol) + +// /** +// * @dev Contract module that allows children to implement role-based access +// * control mechanisms. This is a lightweight version that doesn't allow enumerating role +// * members except through off-chain means by accessing the contract event logs. Some +// * applications may benefit from on-chain enumerability, for those cases see +// * {AccessControlEnumerable}. +// * +// * Roles are referred to by their `bytes32` identifier. These should be exposed +// * in the external API and be unique. The best way to achieve this is by +// * using `public constant` hash digests: +// * +// * ```solidity +// * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); +// * ``` +// * +// * Roles can be used to represent a set of permissions. To restrict access to a +// * function call, use {hasRole}: +// * +// * ```solidity +// * function foo() public { +// * require(hasRole(MY_ROLE, msg.sender)); +// * ... +// * } +// * ``` +// * +// * Roles can be granted and revoked dynamically via the {grantRole} and +// * {revokeRole} functions. Each role has an associated admin role, and only +// * accounts that have a role's admin role can call {grantRole} and {revokeRole}. +// * +// * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means +// * that only accounts with this role will be able to grant or revoke other +// * roles. More complex role relationships can be created by using +// * {_setRoleAdmin}. +// * +// * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to +// * grant and revoke this role. Extra precautions should be taken to secure +// * accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules} +// * to enforce additional security measures for this role. +// */ +// abstract contract AccessControlUpgradeable is Initializable, ContextUpgradeable, IAccessControl, ERC165Upgradeable { +// struct RoleData { +// mapping(address account => bool) hasRole; +// bytes32 adminRole; +// } + +// bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; + +// /// @custom:storage-location erc7201:openzeppelin.storage.AccessControl +// struct AccessControlStorage { +// mapping(bytes32 role => RoleData) _roles; +// } + +// // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.AccessControl")) - 1)) & ~bytes32(uint256(0xff)) +// bytes32 private constant AccessControlStorageLocation = 0x02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800; + +// function _getAccessControlStorage() private pure returns (AccessControlStorage storage $) { +// assembly { +// $.slot := AccessControlStorageLocation +// } +// } + +// /** +// * @dev Modifier that checks that an account has a specific role. Reverts +// * with an {AccessControlUnauthorizedAccount} error including the required role. +// */ +// modifier onlyRole(bytes32 role) { +// _checkRole(role); +// _; +// } + +// function __AccessControl_init() internal onlyInitializing { +// } + +// function __AccessControl_init_unchained() internal onlyInitializing { +// } +// /** +// * @dev See {IERC165-supportsInterface}. +// */ +// function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { +// return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); +// } + +// /** +// * @dev Returns `true` if `account` has been granted `role`. +// */ +// function hasRole(bytes32 role, address account) public view virtual returns (bool) { +// AccessControlStorage storage $ = _getAccessControlStorage(); +// return $._roles[role].hasRole[account]; +// } + +// /** +// * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()` +// * is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier. +// */ +// function _checkRole(bytes32 role) internal view virtual { +// _checkRole(role, _msgSender()); +// } + +// /** +// * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account` +// * is missing `role`. +// */ +// function _checkRole(bytes32 role, address account) internal view virtual { +// if (!hasRole(role, account)) { +// revert AccessControlUnauthorizedAccount(account, role); +// } +// } + +// /** +// * @dev Returns the admin role that controls `role`. See {grantRole} and +// * {revokeRole}. +// * +// * To change a role's admin, use {_setRoleAdmin}. +// */ +// function getRoleAdmin(bytes32 role) public view virtual returns (bytes32) { +// AccessControlStorage storage $ = _getAccessControlStorage(); +// return $._roles[role].adminRole; +// } + +// /** +// * @dev Grants `role` to `account`. +// * +// * If `account` had not been already granted `role`, emits a {RoleGranted} +// * event. +// * +// * Requirements: +// * +// * - the caller must have ``role``'s admin role. +// * +// * May emit a {RoleGranted} event. +// */ +// function grantRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) { +// _grantRole(role, account); +// } + +// /** +// * @dev Revokes `role` from `account`. +// * +// * If `account` had been granted `role`, emits a {RoleRevoked} event. +// * +// * Requirements: +// * +// * - the caller must have ``role``'s admin role. +// * +// * May emit a {RoleRevoked} event. +// */ +// function revokeRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) { +// _revokeRole(role, account); +// } + +// /** +// * @dev Revokes `role` from the calling account. +// * +// * Roles are often managed via {grantRole} and {revokeRole}: this function's +// * purpose is to provide a mechanism for accounts to lose their privileges +// * if they are compromised (such as when a trusted device is misplaced). +// * +// * If the calling account had been revoked `role`, emits a {RoleRevoked} +// * event. +// * +// * Requirements: +// * +// * - the caller must be `callerConfirmation`. +// * +// * May emit a {RoleRevoked} event. +// */ +// function renounceRole(bytes32 role, address callerConfirmation) public virtual { +// if (callerConfirmation != _msgSender()) { +// revert AccessControlBadConfirmation(); +// } + +// _revokeRole(role, callerConfirmation); +// } + +// /** +// * @dev Sets `adminRole` as ``role``'s admin role. +// * +// * Emits a {RoleAdminChanged} event. +// */ +// function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { +// AccessControlStorage storage $ = _getAccessControlStorage(); +// bytes32 previousAdminRole = getRoleAdmin(role); +// $._roles[role].adminRole = adminRole; +// emit RoleAdminChanged(role, previousAdminRole, adminRole); +// } + +// /** +// * @dev Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted. +// * +// * Internal function without access restriction. +// * +// * May emit a {RoleGranted} event. +// */ +// function _grantRole(bytes32 role, address account) internal virtual returns (bool) { +// AccessControlStorage storage $ = _getAccessControlStorage(); +// if (!hasRole(role, account)) { +// $._roles[role].hasRole[account] = true; +// emit RoleGranted(role, account, _msgSender()); +// return true; +// } else { +// return false; +// } +// } + +// /** +// * @dev Attempts to revoke `role` to `account` and returns a boolean indicating if `role` was revoked. +// * +// * Internal function without access restriction. +// * +// * May emit a {RoleRevoked} event. +// */ +// function _revokeRole(bytes32 role, address account) internal virtual returns (bool) { +// AccessControlStorage storage $ = _getAccessControlStorage(); +// if (hasRole(role, account)) { +// $._roles[role].hasRole[account] = false; +// emit RoleRevoked(role, account, _msgSender()); +// return true; +// } else { +// return false; +// } +// } +// } + +// // node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol + +// // OpenZeppelin Contracts (last updated v5.1.0) (proxy/utils/UUPSUpgradeable.sol) + +// /** +// * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an +// * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy. +// * +// * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is +// * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing +// * `UUPSUpgradeable` with a custom implementation of upgrades. +// * +// * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism. +// */ +// abstract contract UUPSUpgradeable is Initializable, IERC1822Proxiable { +// /// @custom:oz-upgrades-unsafe-allow state-variable-immutable +// address private immutable __self = address(this); + +// /** +// * @dev The version of the upgrade interface of the contract. If this getter is missing, both `upgradeTo(address)` +// * and `upgradeToAndCall(address,bytes)` are present, and `upgradeTo` must be used if no function should be called, +// * while `upgradeToAndCall` will invoke the `receive` function if the second argument is the empty byte string. +// * If the getter returns `"5.0.0"`, only `upgradeToAndCall(address,bytes)` is present, and the second argument must +// * be the empty byte string if no function should be called, making it impossible to invoke the `receive` function +// * during an upgrade. +// */ +// string public constant UPGRADE_INTERFACE_VERSION = "5.0.0"; + +// /** +// * @dev The call is from an unauthorized context. +// */ +// error UUPSUnauthorizedCallContext(); + +// /** +// * @dev The storage `slot` is unsupported as a UUID. +// */ +// error UUPSUnsupportedProxiableUUID(bytes32 slot); + +// /** +// * @dev Check that the execution is being performed through a delegatecall call and that the execution context is +// * a proxy contract with an implementation (as defined in ERC-1967) pointing to self. This should only be the case +// * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a +// * function through ERC-1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to +// * fail. +// */ +// modifier onlyProxy() { +// _checkProxy(); +// _; +// } + +// /** +// * @dev Check that the execution is not being performed through a delegate call. This allows a function to be +// * callable on the implementing contract but not through proxies. +// */ +// modifier notDelegated() { +// _checkNotDelegated(); +// _; +// } + +// function __UUPSUpgradeable_init() internal onlyInitializing { +// } + +// function __UUPSUpgradeable_init_unchained() internal onlyInitializing { +// } +// /** +// * @dev Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the +// * implementation. It is used to validate the implementation's compatibility when performing an upgrade. +// * +// * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks +// * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this +// * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier. +// */ +// function proxiableUUID() external view virtual notDelegated returns (bytes32) { +// return ERC1967Utils.IMPLEMENTATION_SLOT; +// } + +// /** +// * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call +// * encoded in `data`. +// * +// * Calls {_authorizeUpgrade}. +// * +// * Emits an {Upgraded} event. +// * +// * @custom:oz-upgrades-unsafe-allow-reachable delegatecall +// */ +// function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual onlyProxy { +// _authorizeUpgrade(newImplementation); +// _upgradeToAndCallUUPS(newImplementation, data); +// } + +// /** +// * @dev Reverts if the execution is not performed via delegatecall or the execution +// * context is not of a proxy with an ERC-1967 compliant implementation pointing to self. +// * See {_onlyProxy}. +// */ +// function _checkProxy() internal view virtual { +// if ( +// address(this) == __self || // Must be called through delegatecall +// ERC1967Utils.getImplementation() != __self // Must be called through an active proxy +// ) { +// revert UUPSUnauthorizedCallContext(); +// } +// } + +// /** +// * @dev Reverts if the execution is performed via delegatecall. +// * See {notDelegated}. +// */ +// function _checkNotDelegated() internal view virtual { +// if (address(this) != __self) { +// // Must not be called through delegatecall +// revert UUPSUnauthorizedCallContext(); +// } +// } + +// /** +// * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by +// * {upgradeToAndCall}. +// * +// * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}. +// * +// * ```solidity +// * function _authorizeUpgrade(address) internal onlyOwner {} +// * ``` +// */ +// function _authorizeUpgrade(address newImplementation) internal virtual; + +// /** +// * @dev Performs an implementation upgrade with a security check for UUPS proxies, and additional setup call. +// * +// * As a security check, {proxiableUUID} is invoked in the new implementation, and the return value +// * is expected to be the implementation slot in ERC-1967. +// * +// * Emits an {IERC1967-Upgraded} event. +// */ +// function _upgradeToAndCallUUPS(address newImplementation, bytes memory data) private { +// try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) { +// if (slot != ERC1967Utils.IMPLEMENTATION_SLOT) { +// revert UUPSUnsupportedProxiableUUID(slot); +// } +// ERC1967Utils.upgradeToAndCall(newImplementation, data); +// } catch { +// // The implementation is not UUPS +// revert ERC1967Utils.ERC1967InvalidImplementation(newImplementation); +// } +// } +// } + +// // contracts/EntityKeyRegistry.sol + +// contract EntityKeyRegistry is +// Initializable, +// ContextUpgradeable, +// ERC165Upgradeable, +// AccessControlUpgradeable, +// UUPSUpgradeable, +// ReentrancyGuardUpgradeable, +// AttestationAutherUpgradeable +// { +// using HELPER for bytes; +// using HELPER for bytes32; + +// //---------------------------------------- Event start ----------------------------------------// + +// event UpdateKey(address indexed user, uint256 indexed keyIndex); +// event RemoveKey(address indexed user, uint256 indexed keyIndex); +// event ImageBlacklisted(bytes32 indexed imageId); + +// //---------------------------------------- Event end ----------------------------------------// + +// //---------------------------------------- Constant start ----------------------------------------// + +// bytes32 public constant KEY_REGISTER_ROLE = keccak256("KEY_REGISTER_ROLE"); +// bytes32 public constant MODERATOR_ROLE = keccak256("MODERATOR_ROLE"); + +// //---------------------------------------- Constant end ----------------------------------------// + +// //---------------------------------------- State Variable start ----------------------------------------// + +// mapping(address => mapping(uint256 => bytes)) public pub_key; +// mapping(bytes32 => bool) public blackListedImages; + +// // in case we add more contracts in the inheritance chain +// uint256[500] private __gap_0; + +// //---------------------------------------- State Variable start ----------------------------------------// + +// //---------------------------------------- Init start ----------------------------------------// + +// /// @custom:oz-upgrades-unsafe-allow constructor +// constructor(IAttestationVerifier _av) AttestationAutherUpgradeable(_av, HELPER.ACCEPTABLE_ATTESTATION_DELAY) initializer {} + +// function initialize(address _admin, EnclaveImage[] calldata _initWhitelistImages) public initializer { +// __Context_init_unchained(); +// __ERC165_init_unchained(); +// __AccessControl_init_unchained(); +// __UUPSUpgradeable_init_unchained(); + +// _grantRole(DEFAULT_ADMIN_ROLE, _admin); +// _setRoleAdmin(MODERATOR_ROLE, DEFAULT_ADMIN_ROLE); + +// __AttestationAuther_init_unchained(_initWhitelistImages); +// } + +// //---------------------------------------- Init end ----------------------------------------// + +// function addProverManager(address _proverManager) public onlyRole(DEFAULT_ADMIN_ROLE) { +// _grantRole(KEY_REGISTER_ROLE, _proverManager); +// } + +// /** +// * @notice Ads a new user after verification +// */ +// function updatePubkey( +// address _keyOwner, +// uint256 _keyIndex, +// bytes calldata _pubkey, +// bytes calldata _attestationData +// ) external onlyRole(KEY_REGISTER_ROLE) { +// if (_pubkey.length != 64) { +// revert Error.InvalidEnclaveKey(); +// } + +// pub_key[_keyOwner][_keyIndex] = _pubkey; + +// _verifyKeyInternal(_attestationData); + +// emit UpdateKey(_keyOwner, _keyIndex); +// } + +// /** +// * @notice Verifies a new key against enclave +// */ +// function verifyKey(bytes calldata _attestationData) external onlyRole(KEY_REGISTER_ROLE) { +// _verifyKeyInternal(_attestationData); +// } + +// /** +// * @notice Whitelist a new image. Called when a market creator creates a new market +// */ +// function whitelistImageUsingPcrs(bytes32 _family, bytes calldata _pcrs) external onlyRole(KEY_REGISTER_ROLE) { +// (bytes memory pcr0, bytes memory pcr1, bytes memory pcr2) = abi.decode(_pcrs, (bytes, bytes, bytes)); + +// _whitelistImageIfNot(_family, pcr0, pcr1, pcr2); +// } + +// function _verifyKeyInternal(bytes calldata _data) internal { +// ( +// bytes memory attestation, +// bytes memory enclaveKey, +// bytes memory pcr0, +// bytes memory pcr1, +// bytes memory pcr2, +// uint256 timestamp +// ) = abi.decode(_data, (bytes, bytes, bytes, bytes, bytes, uint256)); + +// bool isVerified = _verifyEnclaveKey(attestation, IAttestationVerifier.Attestation(enclaveKey, pcr0, pcr1, pcr2, timestamp)); +// if (!isVerified) { +// revert Error.EnclaveKeyNotVerified(); +// } +// } + +// function _whitelistImageIfNot(bytes32 _family, bytes memory _pcr0, bytes memory _pcr1, bytes memory _pcr2) internal { +// bytes32 imageId = _pcr0.GET_IMAGE_ID_FROM_PCRS(_pcr1, _pcr2); +// if (!imageId.IS_ENCLAVE()) { +// revert Error.MustBeAnEnclave(imageId); +// } + +// if (blackListedImages[imageId]) { +// revert Error.BlacklistedImage(imageId); +// } +// (bytes32 inferredImageId, ) = _whitelistEnclaveImage(EnclaveImage(_pcr0, _pcr1, _pcr2)); + +// // inferredImage == false && isVerified == x, invalid image, revert +// if (inferredImageId != imageId) { +// revert Error.InferredImageIdIsDifferent(); +// } +// _addEnclaveImageToFamily(imageId, _family); +// } + +// /** +// * @notice Removes an existing pubkey +// */ +// function removePubkey(address _keyOwner, uint256 _keyIndex) external onlyRole(KEY_REGISTER_ROLE) { +// delete pub_key[_keyOwner][_keyIndex]; + +// emit RemoveKey(_keyOwner, _keyIndex); +// } + +// function allowOnlyVerifiedFamily(bytes32 _familyId, address _key) external view { +// return _allowOnlyVerifiedFamily(_key, _familyId); +// } + +// function removeEnclaveImageFromFamily(bytes32 _imageId, bytes32 _family) external onlyRole(KEY_REGISTER_ROLE) { +// _removeEnclaveImageFromFamily(_imageId, _family); +// } + +// // ---------- SECURITY FEATURE FUNCTIONS ----------- // +// function blacklistImage(bytes32 _imageId) external onlyRole(MODERATOR_ROLE) { +// if (blackListedImages[_imageId]) { +// revert Error.AlreadyABlacklistedImage(_imageId); +// } +// blackListedImages[_imageId] = true; +// emit ImageBlacklisted(_imageId); +// _revokeEnclaveImage(_imageId); +// } + +// //-------------------------------- Overrides start --------------------------------// + +// function supportsInterface( +// bytes4 _interfaceId +// ) public view virtual override(ERC165Upgradeable, AccessControlUpgradeable) returns (bool) { +// return super.supportsInterface(_interfaceId); +// } + +// function _authorizeUpgrade(address /*account*/) internal view override onlyRole(DEFAULT_ADMIN_ROLE) {} + +// //---------------------------------------- Override end ----------------------------------------// + +// } + diff --git a/contracts/GeneratorRegistry.sol b/contracts/GeneratorRegistry.sol deleted file mode 100644 index 46dde7d..0000000 --- a/contracts/GeneratorRegistry.sol +++ /dev/null @@ -1,769 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; -import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; -import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol"; -import {IERC20 as IERC20Upgradeable} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import {SafeERC20 as SafeERC20Upgradeable} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; -import "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol"; -import "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol"; - -import "./interfaces/IL2Staking.sol"; -import "./EntityKeyRegistry.sol"; -import "./lib/Error.sol"; -import "./ProofMarketplace.sol"; - -contract GeneratorRegistry is - Initializable, - ContextUpgradeable, - ERC165Upgradeable, - AccessControlUpgradeable, - UUPSUpgradeable, - ReentrancyGuardUpgradeable, - IL2Staking -{ - // in case we add more contracts in the inheritance chain - uint256[500] private __gap_0; - - /// @custom:oz-upgrades-unsafe-allow constructor - constructor(IERC20Upgradeable _stakingToken, EntityKeyRegistry _entityRegistry) initializer { - STAKING_TOKEN = _stakingToken; - ENTITY_KEY_REGISTRY = _entityRegistry; - } - - using HELPER for bytes; - using HELPER for bytes32; - using HELPER for uint256; - using HELPER for address; - - using SafeERC20Upgradeable for IERC20Upgradeable; - - //-------------------------------- Overrides start --------------------------------// - - function supportsInterface( - bytes4 interfaceId - ) public view virtual override(ERC165Upgradeable, AccessControlUpgradeable) returns (bool) { - return super.supportsInterface(interfaceId); - } - - function _authorizeUpgrade(address /*account*/) internal view override onlyRole(DEFAULT_ADMIN_ROLE) {} - - //-------------------------------- Overrides end --------------------------------// - - //-------------------------------- Constants and Immutable start --------------------------------// - bytes32 public constant PROOF_MARKET_PLACE_ROLE = keccak256("PROOF_MARKET_PLACE_ROLE"); - - uint256 public constant PARALLEL_REQUESTS_UPPER_LIMIT = 100; - uint256 public constant UNLOCK_WAIT_BLOCKS = 100; - - uint256 internal constant EXPONENT = 10 ** 18; - uint256 internal constant REDUCTION_REQUEST_BLOCK_GAP = 1; - - /// @custom:oz-upgrades-unsafe-allow state-variable-immutable - IERC20Upgradeable public immutable STAKING_TOKEN; - - /// @custom:oz-upgrades-unsafe-allow state-variable-immutable - EntityKeyRegistry public immutable ENTITY_KEY_REGISTRY; - //-------------------------------- Constants and Immutable start --------------------------------// - - //-------------------------------- State variables start --------------------------------// - mapping(address => Generator) public generatorRegistry; - mapping(address => mapping(uint256 => GeneratorInfoPerMarket)) public generatorInfoPerMarket; - - mapping(address => uint256) unstakeRequestBlock; - mapping(address => uint256) reduceComputeRequestBlock; - - ProofMarketplace public proofMarketplace; - - enum GeneratorState { - NULL, - JOINED, - NO_COMPUTE_AVAILABLE, - WIP, - REQUESTED_FOR_EXIT - } - - struct Generator { - address rewardAddress; - uint256 totalStake; - uint256 sumOfComputeAllocations; - uint256 computeConsumed; - uint256 stakeLocked; - uint256 activeMarketplaces; - uint256 declaredCompute; - uint256 intendedStakeUtilization; - uint256 intendedComputeUtilization; - bytes generatorData; - } - - struct GeneratorInfoPerMarket { - GeneratorState state; - uint256 computePerRequestRequired; - uint256 proofGenerationCost; - uint256 proposedTime; - uint256 activeRequests; - } - - //-------------------------------- State variables end --------------------------------// - - //-------------------------------- Events end --------------------------------// - - event RegisteredGenerator(address indexed generator, uint256 initialCompute, uint256 initialStake); - event DeregisteredGenerator(address indexed generator); - - event ChangedGeneratorRewardAddress(address indexed generator, address newRewardAddress); - - event JoinedMarketplace(address indexed generator, uint256 indexed marketId, uint256 computeAllocation); - event RequestExitMarketplace(address indexed generator, uint256 indexed marketId); - event LeftMarketplace(address indexed generator, uint256 indexed marketId); - - event AddIvsKey(uint256 indexed marketId, address indexed signer); - - event AddedStake(address indexed generator, uint256 amount); - event RequestStakeDecrease(address indexed generator, uint256 intendedUtilization); - event RemovedStake(address indexed generator, uint256 amount); - - event IncreasedCompute(address indexed generator, uint256 compute); - event RequestComputeDecrease(address indexed generator, uint256 intendedUtilization); - event DecreaseCompute(address indexed generator, uint256 compute); - - event StakeLockImposed(address indexed generator, uint256 stake); - event ComputeLockImposed(address indexed generator, uint256 compute); - - event StakeLockReleased(address indexed generator, uint256 stake); - event ComputeLockReleased(address indexed generator, uint256 compute); - - event StakeSlashed(address indexed generator, uint256 stake); - - //-------------------------------- Events end --------------------------------// - - function initialize(address _admin, address _proofMarketplace) public initializer { - __Context_init_unchained(); - __ERC165_init_unchained(); - __AccessControl_init_unchained(); - __UUPSUpgradeable_init_unchained(); - - _grantRole(DEFAULT_ADMIN_ROLE, _admin); - _grantRole(PROOF_MARKET_PLACE_ROLE, _proofMarketplace); - proofMarketplace = ProofMarketplace(_proofMarketplace); - } - - /** - * @notice Register Generator - */ - function register( - address rewardAddress, - uint256 declaredCompute, - uint256 initialStake, - bytes memory generatorData - ) external nonReentrant { - address _generatorAddress = _msgSender(); - Generator memory generator = generatorRegistry[_generatorAddress]; - - if (generatorData.length == 0 || rewardAddress == address(0) || declaredCompute == 0) { - revert Error.CannotBeZero(); - } - - // prevents registering multiple times, unless deregistered - if (generator.rewardAddress != address(0)) { - revert Error.GeneratorAlreadyExists(); - } - - generatorRegistry[_generatorAddress] = Generator( - rewardAddress, - initialStake, - 0, - 0, - 0, - 0, - declaredCompute, - EXPONENT, - EXPONENT, - generatorData - ); - - // optional to stake during registration itself - if (initialStake != 0) { - STAKING_TOKEN.safeTransferFrom(_generatorAddress, address(this), initialStake); - } - emit RegisteredGenerator(_generatorAddress, declaredCompute, initialStake); - } - - /** - * @notice Change Generator's reward address - */ - function changeRewardAddress(address newRewardAddress) external { - address _generatorAddress = _msgSender(); - Generator storage generator = generatorRegistry[_generatorAddress]; - if (newRewardAddress == address(0) || generator.rewardAddress == address(0)) { - revert Error.CannotBeZero(); - } - - generator.rewardAddress = newRewardAddress; - - emit ChangedGeneratorRewardAddress(_generatorAddress, newRewardAddress); - } - - /** - * @notice Increase generator's compute - */ - function increaseDeclaredCompute(uint256 computeToIncrease) external { - address _generatorAddress = _msgSender(); - Generator storage generator = generatorRegistry[_generatorAddress]; - - if (generator.rewardAddress == address(0) || generator.generatorData.length == 0) { - revert Error.CannotBeZero(); - } - - generator.declaredCompute += computeToIncrease; - - emit IncreasedCompute(_generatorAddress, computeToIncrease); - } - - /** - * @notice Notify matching engine about compute reduction. This will stop matching engine from assigning new tasks till the compute is down - * @param computeToReduce Compute To Reduce - */ - function intendToReduceCompute(uint256 computeToReduce) external { - address _generatorAddress = _msgSender(); - Generator storage generator = generatorRegistry[_generatorAddress]; - - if (generator.rewardAddress == address(0) || generator.generatorData.length == 0 || computeToReduce == 0) { - revert Error.CannotBeZero(); - } - - // if request is already in place, this will ICU will be less than EXP (as per design) - if (generator.intendedComputeUtilization != EXPONENT) { - revert Error.RequestAlreadyInPlace(); - } - - // new utilization after update - uint256 newTotalCompute = generator.declaredCompute - computeToReduce; - - // this is min compute requires for atleast 1 request from each supported market - if (newTotalCompute <= generator.sumOfComputeAllocations) { - revert Error.ExceedsAcceptableRange(); - } - - uint256 newUtilization = (newTotalCompute * EXPONENT) / generator.declaredCompute; - // new utilization should be always less than EXP - if (newUtilization >= EXPONENT) { - revert Error.ExceedsAcceptableRange(); - } - - // temporary value to store the new utilization - generator.intendedComputeUtilization = newUtilization; - - // block number after which this intent which execute - reduceComputeRequestBlock[_generatorAddress] = HELPER.blockNumber() + REDUCTION_REQUEST_BLOCK_GAP; - emit RequestComputeDecrease(_generatorAddress, newUtilization); - } - - /** - * @notice Free up the unused compute. intendToReduceCompute must have been called before this function - */ - function decreaseDeclaredCompute() external { - address generatorAddress = _msgSender(); - - Generator storage generator = generatorRegistry[generatorAddress]; - - if (generator.generatorData.length == 0 || generator.rewardAddress == address(0)) { - revert Error.InvalidGenerator(); - } - - if (generator.intendedComputeUtilization == EXPONENT) { - revert Error.ReduceComputeRequestNotInPlace(); - } - - uint256 newTotalCompute = (generator.intendedComputeUtilization * generator.declaredCompute) / EXPONENT; - uint256 computeToRelease = generator.declaredCompute - newTotalCompute; - - if (newTotalCompute < generator.computeConsumed) { - revert Error.InsufficientGeneratorComputeAvailable(); - } - - if (newTotalCompute < generator.sumOfComputeAllocations) { - revert Error.InsufficientGeneratorComputeAvailable(); - } - - generator.declaredCompute = newTotalCompute; - generator.intendedComputeUtilization = EXPONENT; - - if (!(HELPER.blockNumber() >= reduceComputeRequestBlock[generatorAddress] && reduceComputeRequestBlock[generatorAddress] != 0)) { - revert Error.ReductionRequestNotValid(); - } - - delete reduceComputeRequestBlock[generatorAddress]; - emit DecreaseCompute(generatorAddress, computeToRelease); - } - - /** - * @notice Add/Increase stake - */ - function stake(address generatorAddress, uint256 amount) external override nonReentrant returns (uint256) { - Generator storage generator = generatorRegistry[generatorAddress]; - if (generator.generatorData.length == 0 || generator.rewardAddress == address(0)) { - revert Error.InvalidGenerator(); - } - - if (amount == 0) { - revert Error.CannotBeZero(); - } - - STAKING_TOKEN.safeTransferFrom(_msgSender(), address(this), amount); - generator.totalStake += amount; - - emit AddedStake(generatorAddress, amount); - return generator.totalStake; - } - - /** - * @notice Notify matching engine about stake reduction. This will stop matching engine from assigning new tasks till the locked stake is down - * @param stakeToReduce Stake to Reduce - */ - function intendToReduceStake(uint256 stakeToReduce) external override { - address _generatorAddress = _msgSender(); - Generator storage generator = generatorRegistry[_generatorAddress]; - - if (generator.rewardAddress == address(0) || generator.generatorData.length == 0 || stakeToReduce == 0) { - revert Error.CannotBeZero(); - } - - // if request is already in place, this will ICU will be less than EXP (as per design) - if (generator.intendedComputeUtilization != EXPONENT) { - revert Error.RequestAlreadyInPlace(); - } - - // new utilization after update - uint256 newTotalStake = generator.totalStake - stakeToReduce; - - uint256 newUtilization = (newTotalStake * EXPONENT) / generator.totalStake; - - generator.intendedStakeUtilization = newUtilization; - - unstakeRequestBlock[_generatorAddress] = HELPER.blockNumber() + REDUCTION_REQUEST_BLOCK_GAP; - emit RequestStakeDecrease(_generatorAddress, newUtilization); - } - - /** - * @notice Free up the unused stake. intendToReduceStake must have been called before this function - */ - function unstake(address to) external override nonReentrant { - address generatorAddress = _msgSender(); - - Generator storage generator = generatorRegistry[generatorAddress]; - if (generator.generatorData.length == 0 || generator.rewardAddress == address(0)) { - revert Error.InvalidGenerator(); - } - - if (generator.intendedStakeUtilization == EXPONENT) { - revert Error.UnstakeRequestNotInPlace(); - } - - uint256 newTotalStake = (generator.intendedStakeUtilization * generator.totalStake) / EXPONENT; - - uint256 amountToTransfer = generator.totalStake - newTotalStake; - - // prevent removing amount unless existing stake is not released - if (newTotalStake < generator.stakeLocked) { - revert Error.InsufficientStakeToLock(); - } - - // amountToTransfer will be non-zero - STAKING_TOKEN.safeTransfer(to, amountToTransfer); - - generator.totalStake = newTotalStake; - generator.intendedStakeUtilization = EXPONENT; - - if (!(HELPER.blockNumber() >= unstakeRequestBlock[generatorAddress] && unstakeRequestBlock[generatorAddress] != 0)) { - revert Error.ReductionRequestNotValid(); - } - - delete unstakeRequestBlock[generatorAddress]; - emit RemovedStake(generatorAddress, amountToTransfer); - } - - /** - * @notice Deregister the generator - */ - function deregister(address refundAddress) external nonReentrant { - address _generatorAddress = _msgSender(); - Generator memory generator = generatorRegistry[_generatorAddress]; - - if (generator.sumOfComputeAllocations != 0) { - revert Error.CannotLeaveWithActiveMarket(); - } - - STAKING_TOKEN.safeTransfer(refundAddress, generator.totalStake); - delete generatorRegistry[_generatorAddress]; - - emit DeregisteredGenerator(_generatorAddress); - } - - /** - * @notice update the encryption key - */ - function updateEncryptionKey(uint256 marketId, bytes memory attestationData, bytes calldata enclaveSignature) external { - // generator here is _msgSender() - _updateEncryptionKey(_msgSender(), marketId, attestationData, enclaveSignature); - } - - function _updateEncryptionKey( - address generatorAddress, - uint256 marketId, - bytes memory attestationData, - bytes calldata enclaveSignature - ) internal { - Generator memory generator = generatorRegistry[generatorAddress]; - - // just an extra check to prevent spam - if (generator.rewardAddress == address(0)) { - revert Error.CannotBeZero(); - } - - // only for knowing if the given market is private or public - (, bytes32 generatorImageId) = _readMarketData(marketId); - if (!generatorImageId.IS_ENCLAVE()) { - revert Error.PublicMarketsDontNeedKey(); - } - - if (!ENTITY_KEY_REGISTRY.isImageInFamily(attestationData.GET_IMAGE_ID_FROM_ATTESTATION(), marketId.GENERATOR_FAMILY_ID())) { - revert Error.IncorrectImageId(); - } - - bytes memory pubkey = attestationData.GET_PUBKEY(); - - attestationData.VERIFY_ENCLAVE_SIGNATURE(enclaveSignature, generatorAddress); - - // don't whitelist, because same imageId must be used to update the key - ENTITY_KEY_REGISTRY.updatePubkey(generatorAddress, marketId, pubkey, attestationData); - } - - /** - * @notice Add IVS key for a given market - */ - function addIvsKey(uint256 marketId, bytes memory attestationData, bytes calldata enclaveSignature) external { - // ensure only right image is used - if (!ENTITY_KEY_REGISTRY.isImageInFamily(attestationData.GET_IMAGE_ID_FROM_ATTESTATION(), marketId.IVS_FAMILY_ID())) { - revert Error.IncorrectImageId(); - } - - // confirms that _msgSender() has access to enclave - attestationData.VERIFY_ENCLAVE_SIGNATURE(enclaveSignature, _msgSender()); - - // only whitelist key, after verifying the attestation - ENTITY_KEY_REGISTRY.verifyKey(attestationData); - emit AddIvsKey(marketId, attestationData.GET_ADDRESS()); - } - - /** - * @notice Remove generator's encryption key - */ - function removeEncryptionKey(uint256 marketId) external { - // generatorAddress = _msgSender(); - ENTITY_KEY_REGISTRY.removePubkey(_msgSender(), marketId); - } - - function joinMarketplace( - uint256 marketId, - uint256 computePerRequestRequired, - uint256 proofGenerationCost, - uint256 proposedTime, - bool updateMarketDedicatedKey, // false if not a private market - bytes memory attestationData, // verification ignored if updateMarketDedicatedKey==false - bytes calldata enclaveSignature // ignored if updateMarketDedicatedKey==false - ) external { - address generatorAddress = _msgSender(); - - Generator storage generator = generatorRegistry[generatorAddress]; - GeneratorInfoPerMarket memory info = generatorInfoPerMarket[generatorAddress][marketId]; - - // proof generation time can't be zero. - // compute required per proof can't be zero - if (generator.rewardAddress == address(0) || proposedTime == 0 || computePerRequestRequired == 0) { - revert Error.CannotBeZero(); - } - - // only for checking if any market id valid or not - (address marketVerifierContractAddress, ) = _readMarketData(marketId); - if (marketVerifierContractAddress == address(0)) { - revert Error.InvalidMarket(); - } - - // prevents re-joining - if (info.state != GeneratorState.NULL) { - revert Error.AlreadyJoinedMarket(); - } - - // sum of compute allocation of all supported markets - generator.sumOfComputeAllocations += computePerRequestRequired; - - // ensures that generator will support atleast 1 request for every market - if (generator.sumOfComputeAllocations > generator.declaredCompute) { - revert Error.CannotBeMoreThanDeclaredCompute(); - } - - // increment the number of active market places supported - generator.activeMarketplaces++; - - // update market specific info for the generator - generatorInfoPerMarket[generatorAddress][marketId] = GeneratorInfoPerMarket( - GeneratorState.JOINED, - computePerRequestRequired, - proofGenerationCost, - proposedTime, - 0 - ); - - if (updateMarketDedicatedKey) { - _updateEncryptionKey(generatorAddress, marketId, attestationData, enclaveSignature); - } - emit JoinedMarketplace(generatorAddress, marketId, computePerRequestRequired); - } - - function _readMarketData(uint256 marketId) internal view returns (address, bytes32) { - (IVerifier _verifier, bytes32 generatorImageId, , , , , ) = proofMarketplace.marketData(marketId); - - return (address(_verifier), generatorImageId); - } - - function getGeneratorState(address generatorAddress, uint256 marketId) public view returns (GeneratorState, uint256) { - GeneratorInfoPerMarket memory info = generatorInfoPerMarket[generatorAddress][marketId]; - Generator memory generator = generatorRegistry[generatorAddress]; - - if (info.state == GeneratorState.NULL) { - return (GeneratorState.NULL, 0); - } - - if (info.state == GeneratorState.REQUESTED_FOR_EXIT) { - return (GeneratorState.REQUESTED_FOR_EXIT, 0); - } - - uint256 idleCapacity = _maxReducableCompute(generatorAddress); - - if (info.state != GeneratorState.NULL && idleCapacity == 0) { - return (GeneratorState.NO_COMPUTE_AVAILABLE, 0); - } - - if (idleCapacity == generator.declaredCompute) { - return (GeneratorState.JOINED, idleCapacity); - } - - if (idleCapacity != 0 && idleCapacity < generator.declaredCompute) { - return (GeneratorState.WIP, idleCapacity); - } - return (GeneratorState.NULL, 0); - } - - function _maxReducableCompute(address generatorAddress) internal view returns (uint256) { - Generator memory generator = generatorRegistry[generatorAddress]; - - uint256 maxUsableCompute = (generator.declaredCompute * generator.intendedComputeUtilization) / EXPONENT; - - if (maxUsableCompute < generator.computeConsumed) { - return 0; - } - - return maxUsableCompute - generator.computeConsumed; - } - - function _maxReducableStake(address generatorAddress) internal view returns (uint256) { - Generator memory generator = generatorRegistry[generatorAddress]; - - uint256 maxUsableStake = (generator.totalStake * generator.intendedStakeUtilization) / EXPONENT; - if (maxUsableStake < generator.stakeLocked) { - return 0; - } - - return maxUsableStake - generator.stakeLocked; - } - - function leaveMarketplaces(uint256[] calldata marketIds) external { - for (uint256 index = 0; index < marketIds.length; index++) { - // generatorAddress = _msgSender(); - _leaveMarketplace(_msgSender(), marketIds[index]); - } - } - - function leaveMarketplace(uint256 marketId) external { - // generatorAddress = _msgSender(); - _leaveMarketplace(_msgSender(), marketId); - } - - function requestForExitMarketplaces(uint256[] calldata marketIds) external { - for (uint256 index = 0; index < marketIds.length; index++) { - // generatorAddress = _msgSender(); - _requestForExitMarketplace(_msgSender(), marketIds[index]); - } - } - - function requestForExitMarketplace(uint256 marketId) external { - // generatorAddress = _msgSender(); - _requestForExitMarketplace(_msgSender(), marketId); - } - - function _requestForExitMarketplace(address generatorAddress, uint256 marketId) internal { - (GeneratorState state, ) = getGeneratorState(generatorAddress, marketId); - - // only valid generators can exit the market - if (!(state != GeneratorState.NULL && state != GeneratorState.REQUESTED_FOR_EXIT)) { - revert Error.OnlyValidGeneratorsCanRequestExit(); - } - GeneratorInfoPerMarket storage info = generatorInfoPerMarket[generatorAddress][marketId]; - - info.state = GeneratorState.REQUESTED_FOR_EXIT; - - // alerts matching engine to stop assinging the requests of given market - emit RequestExitMarketplace(generatorAddress, marketId); - - // if there are no active requests, proceed to leave market plaes - if (info.activeRequests == 0) { - _leaveMarketplace(generatorAddress, marketId); - } - } - - function _leaveMarketplace(address generatorAddress, uint256 marketId) internal { - (IVerifier marketVerifier, , , , , , ) = proofMarketplace.marketData(marketId); - - // check if market is valid - if (address(marketVerifier) == address(0)) { - revert Error.InvalidMarket(); - } - - GeneratorInfoPerMarket memory info = generatorInfoPerMarket[generatorAddress][marketId]; - - if (info.state == GeneratorState.NULL) { - revert Error.InvalidGeneratorStatePerMarket(); - } - - // check if there are any active requestsw - if (info.activeRequests != 0) { - revert Error.CannotLeaveMarketWithActiveRequest(); - } - - Generator storage generator = generatorRegistry[generatorAddress]; - - generator.sumOfComputeAllocations -= info.computePerRequestRequired; - generator.activeMarketplaces -= 1; - - delete generatorInfoPerMarket[generatorAddress][marketId]; - emit LeftMarketplace(generatorAddress, marketId); - } - - /** - * @notice Should be called by proof market place only, PMP is assigned SLASHER_ROLE - */ - function slashGenerator( - address generatorAddress, - uint256 marketId, - uint256 slashingAmount, - address rewardAddress - ) external onlyRole(PROOF_MARKET_PLACE_ROLE) returns (uint256) { - (GeneratorState state, ) = getGeneratorState(generatorAddress, marketId); - - // All states = NULL,JOINED,NO_COMPUTE_AVAILABLE,WIP,REQUESTED_FOR_EXIT - // only generators in WIP, REQUESTED_FOR_EXIT, NO_COMPUTE_AVAILABLE can submit the request, NULL and JOINED can't - if (state == GeneratorState.NULL || state == GeneratorState.JOINED) { - revert Error.CannotBeSlashed(); - } - - Generator storage generator = generatorRegistry[generatorAddress]; - GeneratorInfoPerMarket storage info = generatorInfoPerMarket[generatorAddress][marketId]; - - info.activeRequests--; - - generator.totalStake -= slashingAmount; - generator.stakeLocked -= slashingAmount; - - uint256 computeReleased = info.computePerRequestRequired; - generator.computeConsumed -= computeReleased; - - emit StakeSlashed(generatorAddress, slashingAmount); - emit ComputeLockReleased(generatorAddress, computeReleased); - STAKING_TOKEN.safeTransfer(rewardAddress, slashingAmount); - - return generator.totalStake; - } - - function assignGeneratorTask( - address generatorAddress, - uint256 marketId, - uint256 stakeToLock - ) external nonReentrant onlyRole(PROOF_MARKET_PLACE_ROLE) { - (GeneratorState state, uint256 idleCapacity) = getGeneratorState(generatorAddress, marketId); - - if (!(state == GeneratorState.JOINED || state == GeneratorState.WIP)) { - revert Error.AssignOnlyToIdleGenerators(); - } - - Generator storage generator = generatorRegistry[generatorAddress]; - GeneratorInfoPerMarket storage info = generatorInfoPerMarket[generatorAddress][marketId]; - - // requiredCompute <= idleCapacity - if (info.computePerRequestRequired > idleCapacity) { - revert Error.InsufficientGeneratorComputeAvailable(); - } - if (info.activeRequests > PARALLEL_REQUESTS_UPPER_LIMIT) { - revert Error.MaxParallelRequestsPerMarketExceeded(); - } - - uint256 availableStake = _maxReducableStake(generatorAddress); - - if (availableStake < stakeToLock) { - revert Error.InsufficientStakeToLock(); - } - - uint256 computeConsumed = info.computePerRequestRequired; - generator.stakeLocked += stakeToLock; - generator.computeConsumed += computeConsumed; - - emit StakeLockImposed(generatorAddress, stakeToLock); - emit ComputeLockImposed(generatorAddress, computeConsumed); - info.activeRequests++; - } - - function completeGeneratorTask( - address generatorAddress, - uint256 marketId, - uint256 stakeToRelease - ) external onlyRole(PROOF_MARKET_PLACE_ROLE) { - (GeneratorState state, ) = getGeneratorState(generatorAddress, marketId); - - // All states = NULL,JOINED,NO_COMPUTE_AVAILABLE,WIP,REQUESTED_FOR_EXIT - // only generators in WIP, REQUESTED_FOR_EXIT, NO_COMPUTE_AVAILABLE can submit the request, NULL and JOINED can't - if (state == GeneratorState.NULL || state == GeneratorState.JOINED) { - revert Error.OnlyWorkingGenerators(); - } - - Generator storage generator = generatorRegistry[generatorAddress]; - GeneratorInfoPerMarket storage info = generatorInfoPerMarket[generatorAddress][marketId]; - - uint256 computeReleased = info.computePerRequestRequired; - generator.stakeLocked -= stakeToRelease; - generator.computeConsumed -= computeReleased; - - emit StakeLockReleased(generatorAddress, stakeToRelease); - emit ComputeLockReleased(generatorAddress, computeReleased); - - info.activeRequests--; - } - - function getGeneratorAssignmentDetails(address generatorAddress, uint256 marketId) public view returns (uint256, uint256) { - GeneratorInfoPerMarket memory info = generatorInfoPerMarket[generatorAddress][marketId]; - - return (info.proofGenerationCost, info.proposedTime); - } - - function getGeneratorRewardDetails(address generatorAddress, uint256 marketId) public view returns (address, uint256) { - GeneratorInfoPerMarket memory info = generatorInfoPerMarket[generatorAddress][marketId]; - Generator memory generator = generatorRegistry[generatorAddress]; - - return (generator.rewardAddress, info.proofGenerationCost); - } - - // for further increase - uint256[50] private __gap1_0; -} diff --git a/contracts/ProofMarketplace.sol b/contracts/ProofMarketplace.sol index eb4eff1..312dab5 100644 --- a/contracts/ProofMarketplace.sol +++ b/contracts/ProofMarketplace.sol @@ -1,250 +1,163 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.26; -import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; -import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; -import "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol"; -import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol"; -import {IERC20 as IERC20Upgradeable} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import {SafeERC20 as SafeERC20Upgradeable} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; -import "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol"; -import "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol"; +import {AccessControlUpgradeable} from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; +import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import {PausableUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol"; +import {ReentrancyGuardUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol"; -import "./interfaces/IVerifier.sol"; +import {EntityKeyRegistry} from "./EntityKeyRegistry.sol"; +import {ProverManager} from "./ProverManager.sol"; -import "./EntityKeyRegistry.sol"; -import "./GeneratorRegistry.sol"; -import "./lib/Error.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {IProofMarketplace} from "./interfaces/IProofMarketplace.sol"; +import {IVerifier} from "./interfaces/IVerifier.sol"; + +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; +import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import {Error} from "./lib/Error.sol"; +import {HELPER} from "./lib/Helper.sol"; +import {Struct} from "./lib/Struct.sol"; +import {Enum} from "./lib/Enum.sol"; contract ProofMarketplace is - Initializable, - ContextUpgradeable, - ERC165Upgradeable, AccessControlUpgradeable, ReentrancyGuardUpgradeable, PausableUpgradeable, - UUPSUpgradeable + UUPSUpgradeable, + IProofMarketplace { - // in case we add more contracts in the inheritance chain - uint256[500] private __gap_0; - - /// @custom:oz-upgrades-unsafe-allow constructor - constructor( - IERC20Upgradeable _paymentToken, - uint256 _marketCreationCost, - address _treasury, - GeneratorRegistry _generatorRegistry, - EntityKeyRegistry _entityRegistry - ) initializer { - PAYMENT_TOKEN = _paymentToken; - MARKET_CREATION_COST = _marketCreationCost; - TREASURY = _treasury; - GENERATOR_REGISTRY = _generatorRegistry; - ENTITY_KEY_REGISTRY = _entityRegistry; - } - using HELPER for bytes; using HELPER for bytes32; using HELPER for uint256; - using SafeERC20Upgradeable for IERC20Upgradeable; - - //-------------------------------- Overrides start --------------------------------// - - function supportsInterface( - bytes4 interfaceId - ) public view virtual override(ERC165Upgradeable, AccessControlUpgradeable) returns (bool) { - return super.supportsInterface(interfaceId); - } - - /** - @notice Enforces PMP to use only one matching engine image - */ - function setMatchingEngineImage(bytes calldata pcrs) external onlyRole(UPDATER_ROLE) { - ENTITY_KEY_REGISTRY.whitelistImageUsingPcrs(MATCHING_ENGINE_ROLE.MATCHING_ENGINE_FAMILY_ID(), pcrs); - } - - /** - * @notice Verifies the matching engine and its' keys. Can be verified only by UPDATE_ROLE till multi matching engine key sharing is enabled - */ - function verifyMatchingEngine(bytes memory attestationData, bytes calldata meSignature) external onlyRole(UPDATER_ROLE) { - address _thisAddress = address(this); - - // confirms that admin has access to enclave - attestationData.VERIFY_ENCLAVE_SIGNATURE(meSignature, _thisAddress); - - // checks attestation and updates the key - ENTITY_KEY_REGISTRY.updatePubkey(_thisAddress, 0, attestationData.GET_PUBKEY(), attestationData); - } - - function _authorizeUpgrade(address /*account*/) internal view override onlyRole(DEFAULT_ADMIN_ROLE) {} - - //-------------------------------- Overrides end --------------------------------// + using SafeERC20 for IERC20; //-------------------------------- Constants and Immutable start --------------------------------// - bytes32 public constant UPDATER_ROLE = keccak256("UPDATER_ROLE"); - - uint256 public constant MARKET_ACTIVATION_DELAY = 100; // in blocks - - /// @custom:oz-upgrades-unsafe-allow state-variable-immutable - IERC20Upgradeable public immutable PAYMENT_TOKEN; - /// @custom:oz-upgrades-unsafe-allow state-variable-immutable - uint256 public immutable MARKET_CREATION_COST; + bytes32 public constant UPDATER_ROLE = keccak256("UPDATER_ROLE"); // 0x73e573f9566d61418a34d5de3ff49360f9c51fec37f7486551670290f6285dab + bytes32 public constant MATCHING_ENGINE_ROLE = keccak256("MATCHING_ENGINE_ROLE"); // 0x080f5ea84ed1de4c8edb58be651c25581c355a0011b0f9360de5082becd64640 + bytes32 public constant STAKING_MANAGER_ROLE = keccak256("STAKING_MANAGER_ROLE"); // 0xa6b5d83d32632203555cb9b2c2f68a8d94da48cadd9266ac0d17babedb52ea5b + bytes32 public constant SYMBIOTIC_STAKING_ROLE = keccak256("SYMBIOTIC_STAKING_ROLE"); // 0x10a5972a598c4264843f7322e2775a07694fac8a54ef3e471a9e82ed2af9bb58 + bytes32 public constant SYMBIOTIC_STAKING_REWARD_ROLE = keccak256("SYMBIOTIC_STAKING_REWARD_ROLE"); // 0x930acf1b2ff2678c6844aead593a589f81500db101decf9eb8acd3e9ed204beb - /// @custom:oz-upgrades-unsafe-allow state-variable-immutable - address immutable TREASURY; + uint256 public constant MIN_PROVING_TIME = 1 seconds; // 1 second + uint256 public constant MAX_PROVING_TIME = 1 days; // 1 day + uint256 public constant MAX_MATCHING_TIME = 1 days; // 1 day - /// @custom:oz-upgrades-unsafe-allow state-variable-immutable - GeneratorRegistry public immutable GENERATOR_REGISTRY; - - /// @custom:oz-upgrades-unsafe-allow state-variable-immutable - EntityKeyRegistry public immutable ENTITY_KEY_REGISTRY; - - bytes32 public constant MATCHING_ENGINE_ROLE = keccak256("MATCHING_ENGINE_ROLE"); - - //-------------------------------- Constants and Immutable start --------------------------------// + //-------------------------------- Constants and Immutable end --------------------------------// //-------------------------------- State variables start --------------------------------// - Market[] public marketData; - AskWithState[] public listOfAsk; + uint256[500] private __gap_0; - // cost for inputs - mapping(SecretType => uint256) public costPerInputBytes; - // min proving time (in blocks) for each secret type. - mapping(SecretType => uint256) public minProvingTime; + Struct.Market[] public marketData; + Struct.BidWithState[] public listOfBid; - mapping(address => uint256) public claimableAmount; + uint256 public marketCreationCost; + address public paymentToken; + address public treasury; + address public proverManager; + address public entityKeyRegistry; - struct Market { - IVerifier verifier; // verifier address for the market place - bytes32 proverImageId; // use bytes32(0) for public market - uint256 slashingPenalty; - uint256 activationBlock; - bytes32 ivsImageId; - address creator; - bytes marketmetadata; - } + mapping(Enum.SecretType => uint256) public costPerInputBytes; // cost for inputs in payment token + mapping(Enum.SecretType => uint256) public minProvingTime; // min proving time for each secret type. + mapping(address proverRewardAddress => uint256 amount) public proverClaimableFeeReward; + mapping(address transmitter => uint256 amount) public transmitterClaimableFeeReward; - enum AskState { - NULL, - CREATE, - UNASSIGNED, - ASSIGNED, - COMPLETE, - DEADLINE_CROSSED - } + uint256[500] private __gap_1; - enum SecretType { - NULL, - CALLDATA, - EXTERNAL - } - - struct Ask { - uint256 marketId; - uint256 reward; - // the block number by which the ask should be assigned by matching engine - uint256 expiry; - uint256 timeTakenForProofGeneration; - uint256 deadline; - address refundAddress; - bytes proverData; - } - - struct AskWithState { - Ask ask; - AskState state; - address requester; - address generator; - } + // TODO: mapping for `stakePerjob` later //-------------------------------- State variables end --------------------------------// - //-------------------------------- Events start --------------------------------// - - event AskCreated(uint256 indexed askId, bool indexed hasPrivateInputs, bytes secret_data, bytes acl, bytes extraData); - event TaskCreated(uint256 indexed askId, address indexed generator, bytes new_acl); - // TODO: add ask ID also - event ProofCreated(uint256 indexed askId, bytes proof); - event ProofNotGenerated(uint256 indexed askId); + //-------------------------------- Init start --------------------------------// - event InvalidInputsDetected(uint256 indexed askId); - - event MarketplaceCreated(uint256 indexed marketId); - - event AskCancelled(uint256 indexed askId); - - event UpdateCostPerBytes(SecretType indexed secretType, uint256 costPerInputBytes); - event UpdateMinProvingTime(SecretType indexed secretType, uint256 newProvingTime); - event AddExtraProverImage(uint256 indexed marketId, bytes32 indexed imageId); - event AddExtraIVSImage(uint256 indexed marketId, bytes32 indexed imageId); - event RemoveExtraProverImage(uint256 indexed marketId, bytes32 indexed imageId); - event RemoveExtraIVSImage(uint256 indexed marketId, bytes32 indexed imageId); - - //-------------------------------- Events end --------------------------------// + /// @custom:oz-upgrades-unsafe-allow constructor + constructor() { + _disableInitializers(); + } - function initialize(address _admin) public initializer { + // TODO: stake per job + function initialize( + address _admin, + address _paymentToken, + address _treasury, + address _proverManager, + address _entityKeyRegistry, + uint256 _marketCreationCost + ) external initializer { __Context_init_unchained(); __ERC165_init_unchained(); __AccessControl_init_unchained(); __UUPSUpgradeable_init_unchained(); __ReentrancyGuard_init_unchained(); - __ReentrancyGuard_init_unchained(); _grantRole(DEFAULT_ADMIN_ROLE, _admin); _setRoleAdmin(UPDATER_ROLE, DEFAULT_ADMIN_ROLE); - } - function pause() external onlyRole(UPDATER_ROLE) { - _pause(); - } + paymentToken = _paymentToken; + emit PaymentTokenSet(_paymentToken); - function unpause() external onlyRole(UPDATER_ROLE) { - _unpause(); + treasury = _treasury; + emit TreasurySet(_treasury); + + proverManager = _proverManager; + emit ProverManagerSet(_proverManager); + + entityKeyRegistry = _entityKeyRegistry; + emit EntityKeyRegistrySet(_entityKeyRegistry); + + marketCreationCost = _marketCreationCost; + emit MarketCreationCostSet(_marketCreationCost); + + // push empty data for market id 0 so that first market id starts with 1 + marketData.push(Struct.Market(address(0), bytes32(0), 0, address(0), bytes(""))); } + //-------------------------------- Init end --------------------------------// + + //-------------------------------- Market start --------------------------------// + /** * @notice Create a new market. */ - function createMarketplace( + function createMarket( bytes calldata _marketmetadata, - IVerifier _verifier, - uint256 _penalty, + address _verifier, bytes calldata _proverPcrs, bytes calldata _ivsPcrs ) external nonReentrant { - address _msgSender = _msgSender(); - if (_penalty == 0 || _marketmetadata.length == 0 || address(_verifier) == address(0)) { + address msgSender = _msgSender(); + // Note: StakeToken to be locked per task will be set in NativeStaking and SymbioticStaking as of now + if (_marketmetadata.length == 0 || address(_verifier) == address(0)) { revert Error.CannotBeZero(); } - if (!_verifier.checkSampleInputsAndProof()) { + if (!IVerifier(_verifier).checkSampleInputsAndProof()) { revert Error.InvalidInputs(); } - PAYMENT_TOKEN.safeTransferFrom(_msgSender, TREASURY, MARKET_CREATION_COST); + + IERC20(paymentToken).safeTransferFrom(msgSender, treasury, marketCreationCost); uint256 marketId = marketData.length; // Helps skip whitelisting for public provers if (_proverPcrs.GET_IMAGE_ID_FROM_PCRS().IS_ENCLAVE()) { - ENTITY_KEY_REGISTRY.whitelistImageUsingPcrs(marketId.GENERATOR_FAMILY_ID(), _proverPcrs); + EntityKeyRegistry(entityKeyRegistry).whitelistImageUsingPcrs(marketId.PROVER_FAMILY_ID(), _proverPcrs); } // ivs is always enclave, will revert if a non enclave instance is stated as an ivs - ENTITY_KEY_REGISTRY.whitelistImageUsingPcrs(marketId.IVS_FAMILY_ID(), _ivsPcrs); + EntityKeyRegistry(entityKeyRegistry).whitelistImageUsingPcrs(marketId.IVS_FAMILY_ID(), _ivsPcrs); marketData.push( - Market( + Struct.Market( _verifier, _proverPcrs.GET_IMAGE_ID_FROM_PCRS(), - _penalty, - HELPER.blockNumber() + MARKET_ACTIVATION_DELAY, _ivsPcrs.GET_IMAGE_ID_FROM_PCRS(), - _msgSender, + msgSender, _marketmetadata ) ); @@ -254,517 +167,635 @@ contract ProofMarketplace is /** * @notice Feature for market creator to list new prover images and ivs images */ - function addExtraImages(uint256 marketId, bytes[] calldata _proverPcrs, bytes[] calldata _ivsPcrs) external { - Market memory market = marketData[marketId]; - if (market.marketmetadata.length == 0) { - revert Error.InvalidMarket(); - } - - if (_msgSender() != market.creator) { - revert Error.OnlyMarketCreator(); - } + function addExtraImages(uint256 _marketId, bytes[] calldata _proverPcrs, bytes[] calldata _ivsPcrs) external { + Struct.Market memory market = marketData[_marketId]; + require(market.marketmetadata.length > 0, Error.InvalidMarket()); + require(_msgSender() == market.creator, Error.OnlyMarketCreator()); if (_proverPcrs.length != 0) { - if (!market.proverImageId.IS_ENCLAVE()) { - revert Error.CannotModifyImagesForPublicMarkets(); - } + require(market.proverImageId.IS_ENCLAVE(), Error.CannotModifyImagesForPublicMarkets()); for (uint256 index = 0; index < _proverPcrs.length; index++) { - bytes32 familyId = marketId.GENERATOR_FAMILY_ID(); - bytes32 generatorImageId = _proverPcrs[index].GET_IMAGE_ID_FROM_PCRS(); - if (ENTITY_KEY_REGISTRY.isImageInFamily(generatorImageId, familyId)) { - revert Error.ImageAlreadyInFamily(generatorImageId, familyId); + bytes32 familyId = _marketId.PROVER_FAMILY_ID(); + bytes32 proverImageId = _proverPcrs[index].GET_IMAGE_ID_FROM_PCRS(); + + if (EntityKeyRegistry(entityKeyRegistry).isImageInFamily(proverImageId, familyId)) { + revert Error.ImageAlreadyInFamily(proverImageId, familyId); } - ENTITY_KEY_REGISTRY.whitelistImageUsingPcrs(familyId, _proverPcrs[index]); - emit AddExtraProverImage(marketId, generatorImageId); + + EntityKeyRegistry(entityKeyRegistry).whitelistImageUsingPcrs(familyId, _proverPcrs[index]); + emit AddExtraProverImage(_marketId, proverImageId); } } for (uint256 index = 0; index < _ivsPcrs.length; index++) { - bytes32 familyId = marketId.IVS_FAMILY_ID(); + bytes32 familyId = _marketId.IVS_FAMILY_ID(); bytes32 ivsImageId = _ivsPcrs[index].GET_IMAGE_ID_FROM_PCRS(); - if (ENTITY_KEY_REGISTRY.isImageInFamily(ivsImageId, familyId)) { + + if (EntityKeyRegistry(entityKeyRegistry).isImageInFamily(ivsImageId, familyId)) { revert Error.ImageAlreadyInFamily(ivsImageId, familyId); } - ENTITY_KEY_REGISTRY.whitelistImageUsingPcrs(familyId, _ivsPcrs[index]); - emit AddExtraIVSImage(marketId, ivsImageId); + + EntityKeyRegistry(entityKeyRegistry).whitelistImageUsingPcrs(familyId, _ivsPcrs[index]); + emit AddExtraIVSImage(_marketId, ivsImageId); } } /** * @notice Feature for market creator to remove extra provers */ - function removeExtraImages(uint256 marketId, bytes[] calldata _proverPcrs, bytes[] calldata _ivsPcrs) external { - Market memory market = marketData[marketId]; - if (market.marketmetadata.length == 0) { - revert Error.InvalidMarket(); - } - - if (_msgSender() != market.creator) { - revert Error.OnlyMarketCreator(); - } - + function removeExtraImages(uint256 _marketId, bytes[] calldata _proverPcrs, bytes[] calldata _ivsPcrs) external { + Struct.Market memory market = marketData[_marketId]; + require(market.marketmetadata.length > 0, Error.InvalidMarket()); + require(_msgSender() == market.creator, Error.OnlyMarketCreator()); if (_proverPcrs.length != 0) { - if (!market.proverImageId.IS_ENCLAVE()) { - revert Error.CannotModifyImagesForPublicMarkets(); - } + require(market.proverImageId.IS_ENCLAVE(), Error.CannotModifyImagesForPublicMarkets()); for (uint256 index = 0; index < _proverPcrs.length; index++) { bytes32 imageId = _proverPcrs[index].GET_IMAGE_ID_FROM_PCRS(); + if (imageId == market.proverImageId) { - revert Error.CannotRemoveDefaultImageFromMarket(marketId, imageId); + revert Error.CannotRemoveDefaultImageFromMarket(_marketId, imageId); } - ENTITY_KEY_REGISTRY.removeEnclaveImageFromFamily(imageId, marketId.GENERATOR_FAMILY_ID()); - emit RemoveExtraProverImage(marketId, imageId); + + EntityKeyRegistry(entityKeyRegistry).removeEnclaveImageFromFamily(imageId, _marketId.PROVER_FAMILY_ID()); + emit RemoveExtraProverImage(_marketId, imageId); } } for (uint256 index = 0; index < _ivsPcrs.length; index++) { bytes32 imageId = _ivsPcrs[index].GET_IMAGE_ID_FROM_PCRS(); + if (imageId == market.ivsImageId) { - revert Error.CannotRemoveDefaultImageFromMarket(marketId, imageId); + revert Error.CannotRemoveDefaultImageFromMarket(_marketId, imageId); } - ENTITY_KEY_REGISTRY.removeEnclaveImageFromFamily(imageId, marketId.IVS_FAMILY_ID()); - emit RemoveExtraIVSImage(marketId, imageId); + + EntityKeyRegistry(entityKeyRegistry).removeEnclaveImageFromFamily(imageId, _marketId.IVS_FAMILY_ID()); + emit RemoveExtraIVSImage(_marketId, imageId); } } /** * @notice Once called new images can't be added to market */ - function freezeMarket(uint256 marketId) external { - Market memory market = marketData[marketId]; - if (market.marketmetadata.length == 0) { - revert Error.InvalidMarket(); - } + function freezeMarket(uint256 _marketId) external { + Struct.Market memory market = marketData[_marketId]; + require(market.marketmetadata.length > 0, Error.InvalidMarket()); + require(_msgSender() == market.creator, Error.OnlyMarketCreator()); + delete marketData[_marketId].creator; + } - if (_msgSender() != market.creator) { - revert Error.OnlyMarketCreator(); - } + function updateMarketMetadata(uint256 _marketId, bytes calldata _metadata) external { + require(_msgSender() == marketData[_marketId].creator, Error.OnlyMarketCreator()); - delete marketData[marketId].creator; + marketData[_marketId].marketmetadata = _metadata; + + emit MarketMetadataUpdated(_marketId, _metadata); } + //-------------------------------- Market end --------------------------------// + + //-------------------------------- Bid Start --------------------------------// + /** * @notice Create requests. Can be paused to prevent temporary escrowing of unwanted amount - * @param ask: Details of the ASK request - * @param secretType: 0 for purely calldata based secret (1 for Celestia etc, 2 ipfs etc) - * @param privateInputs: Private Inputs to the circuit. - * @param acl: If the private inputs are mean't to be confidential, provide acl using the ME keys + * @param _bid: Details of the BID request + * @param _secretType: 0 for purely calldata based secret (1 for Celestia etc, 2 ipfs etc) + * @param _privateInputs: Private Inputs to the circuit. + * @param _acl: If the private inputs are mean't to be confidential, provide acl using the ME keys */ - function createAsk( - Ask calldata ask, - // TODO: Check if this needs to be removed during review - SecretType secretType, - bytes calldata privateInputs, - bytes calldata acl, - bytes calldata extraData + function createBid( + Struct.Bid calldata _bid, + Enum.SecretType _secretType, + bytes calldata _privateInputs, + bytes calldata _acl, + bytes calldata _extraData ) external whenNotPaused nonReentrant { - _createAsk(ask, msg.sender, secretType, privateInputs, acl, extraData); + _createBid(_bid, _msgSender(), _secretType, _privateInputs, _acl, _extraData); } - function _createAsk( - Ask calldata ask, - address payFrom, - SecretType secretType, - bytes calldata privateInputs, - bytes calldata acl, - bytes calldata extraData + function _createBid( + Struct.Bid calldata _bid, + address _payFrom, + Enum.SecretType _secretType, + bytes calldata _privateInputs, + bytes calldata _acl, + bytes calldata _extraData ) internal { - if (ask.reward == 0 || ask.proverData.length == 0) { - revert Error.CannotBeZero(); - } - if (ask.expiry <= HELPER.blockNumber() + minProvingTime[secretType]) { - revert Error.CannotAssignExpiredTasks(); - } + require(_bid.reward > 0 && _bid.proverData.length > 0, Error.CannotBeZero()); - // ensures that the cipher used is small enough - if (acl.length > 130) { - revert Error.InvalidECIESACL(); - } + require(_bid.expiry > block.timestamp + minProvingTime[_secretType], Error.CannotAssignExpiredTasks()); + require(_bid.expiry <= block.timestamp + MAX_MATCHING_TIME, Error.ExceedsMaximumMatchtime()); + require( + _bid.timeForProofGeneration >= MIN_PROVING_TIME && _bid.timeForProofGeneration <= MAX_PROVING_TIME, + Error.InvalidTimeForProofGeneration() + ); - Market memory market = marketData[ask.marketId]; - if (HELPER.blockNumber() < market.activationBlock) { - revert Error.InactiveMarket(); - } + // ensures that the cipher used is small enough + require(_acl.length <= 130, Error.InvalidECIESACL()); - uint256 platformFee = getPlatformFee(secretType, ask, privateInputs, acl); + Struct.Market memory market = marketData[_bid.marketId]; + require(market.marketmetadata.length > 0, Error.InvalidMarket()); - PAYMENT_TOKEN.safeTransferFrom(payFrom, address(this), ask.reward + platformFee); - _increaseClaimableAmount(TREASURY, platformFee); + uint256 platformFee = getPlatformFee(_secretType, _bid, _privateInputs, _acl); - if (market.marketmetadata.length == 0) { - revert Error.InvalidMarket(); - } + IERC20(paymentToken).safeTransferFrom(_payFrom, address(this), _bid.reward + platformFee); + IERC20(paymentToken).safeTransfer(treasury, platformFee); - uint256 askId = listOfAsk.length; - AskWithState memory askRequest = AskWithState(ask, AskState.CREATE, msg.sender, address(0)); - listOfAsk.push(askRequest); + uint256 bidId = listOfBid.length; + Struct.BidWithState memory bidRequest = + Struct.BidWithState(_bid, Enum.BidState.CREATED, _msgSender(), address(0)); + listOfBid.push(bidRequest); IVerifier inputVerifier = IVerifier(market.verifier); - - if (!inputVerifier.verifyInputs(ask.proverData)) { - revert Error.InvalidInputs(); - } + require(inputVerifier.verifyInputs(_bid.proverData), Error.InvalidInputs()); if (market.proverImageId.IS_ENCLAVE()) { // ACL is emitted if private - emit AskCreated(askId, true, privateInputs, acl, extraData); + emit BidCreated(bidId, true, _privateInputs, _acl, _extraData); } else { // ACL is not emitted if not private - emit AskCreated(askId, false, "", "", extraData); + emit BidCreated(bidId, false, "", "", _extraData); } } /** - * @notice Different secret might have different fee. Hence fee is different - * @param secretType: Secret Type - * @param ask: Details of the ask - * @param privateInputs: Private Inputs to the circuit - * @param acl: Access control Data + * @notice Cancel the unassigned request. Refunds the proof fee back to the requestor */ - function getPlatformFee( - SecretType secretType, - Ask calldata ask, - bytes calldata privateInputs, - bytes calldata acl - ) public view returns (uint256) { - uint256 costperByte = costPerInputBytes[secretType]; - if (costperByte != 0) { - return (ask.proverData.length + privateInputs.length + acl.length) * costperByte; - } - return 0; + function cancelBid(uint256 _bidId) external nonReentrant { + // Only unassigned tasks can be cancelled. + require(getBidState(_bidId) == Enum.BidState.UNASSIGNED, Error.OnlyExpiredBidsCanBeCancelled(_bidId)); + + Struct.BidWithState storage bidWithState = listOfBid[_bidId]; + bidWithState.state = Enum.BidState.COMPLETED; + + IERC20(paymentToken).safeTransfer(bidWithState.bid.refundAddress, bidWithState.bid.reward); + + emit BidCancelled(_bidId); } + //-------------------------------- Bid end --------------------------------// + + //-------------------------------- Prover start --------------------------------// + /** - * @notice Update Cost for inputs + * @notice Submit Single Proof */ - function updateCostPerBytes(SecretType secretType, uint256 costPerByte) public onlyRole(UPDATER_ROLE) { - costPerInputBytes[secretType] = costPerByte; - - emit UpdateCostPerBytes(secretType, costPerByte); + function submitProof(uint256 _bidId, bytes calldata _proof) external nonReentrant { + _submitProof(_bidId, _proof); } /** - * @notice Update Min Proving Time + * @notice Submit Multiple proofs in single transaction */ - function updateMinProvingTime(SecretType secretType, uint256 newProvingTime) public onlyRole(UPDATER_ROLE) { - minProvingTime[secretType] = newProvingTime; + function submitProofs(uint256[] memory _taskIds, bytes[] calldata _proofs) external nonReentrant { + require(_taskIds.length == _proofs.length, Error.ArityMismatch()); - emit UpdateMinProvingTime(secretType, newProvingTime); + for (uint256 index = 0; index < _taskIds.length; index++) { + _submitProof(_taskIds[index], _proofs[index]); + } + } + + function _submitProof(uint256 _bidId, bytes calldata _proof) internal { + Struct.BidWithState memory bidWithState = listOfBid[_bidId]; + + uint256 marketId = bidWithState.bid.marketId; + + (address proverRewardAddress, uint256 proverAskAmount) = + ProverManager(proverManager).getProverRewardDetails(bidWithState.prover, bidWithState.bid.marketId); + + require(proverRewardAddress != address(0), Error.CannotBeZero()); + require(getBidState(_bidId) == Enum.BidState.ASSIGNED, Error.OnlyAssignedBidsCanBeProved(_bidId)); + + // check what needs to be encoded from proof, bid and task for proof to be verified + bytes memory inputAndProof = abi.encode(bidWithState.bid.proverData, _proof); + + // Verify input and _proof against verifier + require(IVerifier(marketData[marketId].verifier).verify(inputAndProof), Error.InvalidProof(_bidId)); + + listOfBid[_bidId].state = Enum.BidState.COMPLETED; + + uint256 toBackToRequestor = bidWithState.bid.reward - proverAskAmount; + + // reward to prover + // Note: initially all the reward will be sent to prover, so feeRewardRemaining will be 0 + uint256 feeRewardRemaining = _distributeProverFeeReward(marketId, bidWithState.prover, proverRewardAddress, proverAskAmount); + + // fraction of amount back to requestor (BidAmount - AskAmount) + IERC20(paymentToken).safeTransfer(bidWithState.bid.refundAddress, toBackToRequestor); + + ProverManager(proverManager).completeProverTask(_bidId, bidWithState.prover, marketId, feeRewardRemaining); + emit ProofCreated(_bidId, _proof); } /** - @notice Possible States: NULL, CREATE, UNASSIGNED, ASSIGNED, COMPLETE, DEADLINE_CROSSED + * @notice Submit Attestation/Proof from the IVS signer that the given inputs are invalid */ - function getAskState(uint256 askId) public view returns (AskState) { - AskWithState memory askWithState = listOfAsk[askId]; + function submitProofForInvalidInputs(uint256 _bidId, bytes calldata _invalidProofSignature) external nonReentrant { + Struct.BidWithState memory bidWithState = listOfBid[_bidId]; + uint256 marketId = bidWithState.bid.marketId; - // time before which matching engine should assign the task to generator - if (askWithState.state == AskState.CREATE) { - if (askWithState.ask.expiry > HELPER.blockNumber()) { - return askWithState.state; - } + (address proverRewardAddress, uint256 minRewardForProver) = _verifyAndGetData(_bidId, bidWithState); - return AskState.UNASSIGNED; - } + require( + _checkDisputeUsingSignature( + _bidId, bidWithState.bid.proverData, _invalidProofSignature, marketId.IVS_FAMILY_ID() + ), + Error.CannotSlashUsingValidInputs(_bidId) + ); - // time before which generator should submit the proof - if (askWithState.state == AskState.ASSIGNED) { - if (askWithState.ask.deadline < HELPER.blockNumber()) { - return AskState.DEADLINE_CROSSED; - } + _completeProofForInvalidRequests(_bidId, bidWithState, proverRewardAddress, minRewardForProver, marketId); + } - return AskState.ASSIGNED; - } + function _verifyAndGetData(uint256 _bidId, Struct.BidWithState memory _bidWithState) + internal + view + returns (address, uint256) + { + (address proverRewardAddress, uint256 minRewardForProver) = + ProverManager(proverManager).getProverRewardDetails(_bidWithState.prover, _bidWithState.bid.marketId); + + require(proverRewardAddress != address(0), Error.CannotBeZero()); + require(getBidState(_bidId) == Enum.BidState.ASSIGNED, Error.OnlyAssignedBidsCanBeProved(_bidId)); + + return (proverRewardAddress, minRewardForProver); + } + + function _checkDisputeUsingSignature( + uint256 _bidId, + bytes memory _proverData, + bytes memory _invalidProofSignature, + bytes32 _familyId + ) internal view returns (bool) { + bytes32 messageHash = keccak256(abi.encode(_bidId, _proverData)); + + bytes32 ethSignedMessageHash = messageHash.GET_ETH_SIGNED_HASHED_MESSAGE(); + + address signer = ECDSA.recover(ethSignedMessageHash, _invalidProofSignature); + require(signer != address(0), Error.InvalidEnclaveSignature(signer)); + + EntityKeyRegistry(entityKeyRegistry).allowOnlyVerifiedFamily(_familyId, signer); + return true; + } + + function _completeProofForInvalidRequests( + uint256 _bidId, + Struct.BidWithState memory _bidWithState, + address _proverRewardAddress, + uint256 _proverAskAmount, + uint256 _marketId + ) internal { + // Only assigned requests can be proved + require(getBidState(_bidId) == Enum.BidState.ASSIGNED, Error.OnlyAssignedBidsCanBeProved(_bidId)); + listOfBid[_bidId].state = Enum.BidState.COMPLETED; + + // tokens related to incorrect request will be sent to treasury + uint256 toTreasury = _bidWithState.bid.reward - _proverAskAmount; + + // transfer the reward to prover + // Note: initially all the reward will be sent to prover, so feeRewardRemaining will be 0 + uint256 feeRewardRemaining = + _distributeProverFeeReward(_marketId, _bidWithState.prover, _proverRewardAddress, _proverAskAmount); - return askWithState.state; + // transfer the amount to treasury collection + IERC20(paymentToken).safeTransfer(treasury, toTreasury); + + ProverManager(proverManager).completeProverTask(_bidId, _bidWithState.prover, _marketId, feeRewardRemaining); + emit InvalidInputsDetected(_bidId); + } + + function _distributeProverFeeReward( + uint256 _marketId, + address _prover, + address _proverRewardAddress, + uint256 _feePaid + ) internal returns (uint256 feeRewardRemaining) { + // calculate prover fee reward + // uint256 proverCommission = ProverManager(proverManager).getProverCommission(_marketId, _prover); + // uint256 proverFeeReward = Math.mulDiv(_feePaid, proverCommission, 1e18); + + // Note: initially all the reward will be sent to prover, so feeRewardRemaining will be 0 + uint256 proverFeeReward = _feePaid; + + // update prover fee reward + proverClaimableFeeReward[_proverRewardAddress] += proverFeeReward; + + feeRewardRemaining = _feePaid - proverFeeReward; + + emit ProverFeeRewardAdded(_prover, proverFeeReward); } /** - * @notice Assign Tasks for Generators. Only Matching Engine Image can call + * @notice Prover can discard assigned request if he choses to. This will however result in slashing */ - function relayBatchAssignTasks( - uint256[] memory askIds, - address[] memory generators, - bytes[] calldata newAcls, - bytes calldata signature - ) external nonReentrant { - if (askIds.length != generators.length || generators.length != newAcls.length) { - revert Error.ArityMismatch(); + function discardRequest(uint256 _bidId) external nonReentrant { + Struct.BidWithState memory bidWithState = listOfBid[_bidId]; + require(getBidState(_bidId) == Enum.BidState.ASSIGNED, Error.ShouldBeInAssignedState(_bidId)); + require(bidWithState.prover == _msgSender(), Error.OnlyProverCanDiscardRequest(_bidId)); + _refundFee(_bidId); + } + + //-------------------------------- Prover end --------------------------------// + + //-------------------------------- Slashing start --------------------------------// + + /** + * @notice Slash Prover for deadline crossed requests + */ + function refundFees(uint256[] calldata _bidIds) external { + for (uint256 i = 0; i < _bidIds.length; i++) { + Enum.BidState bidState = getBidState(_bidIds[i]); + + if (bidState == Enum.BidState.DEADLINE_CROSSED) { + // if `refundFee` hasn't been called + _refundFee(_bidIds[i]); + } else if (bidState == Enum.BidState.COMPLETED) { + // actual slashing be done by StakingManager + continue; + } else { + revert Error.NotSlashableBidId(_bidIds[i]); + } } + } - bytes32 messageHash = keccak256(abi.encode(askIds, generators, newAcls)); - bytes32 ethSignedMessageHash = messageHash.GET_ETH_SIGNED_HASHED_MESSAGE(); + function _refundFee(uint256 _bidId) internal { + Struct.BidWithState storage bidWithState = listOfBid[_bidId]; - address signer = ECDSAUpgradeable.recover(ethSignedMessageHash, signature); + bidWithState.state = Enum.BidState.COMPLETED; + uint256 marketId = bidWithState.bid.marketId; - ENTITY_KEY_REGISTRY.allowOnlyVerifiedFamily(MATCHING_ENGINE_ROLE.MATCHING_ENGINE_FAMILY_ID(), signer); + // Locked Stake will be unlocked when SlashResult is submitted to SymbioticStaking + if (bidWithState.bid.reward != 0) { + // refund fee to requestor + IERC20(paymentToken).safeTransfer(bidWithState.bid.refundAddress, bidWithState.bid.reward); + bidWithState.bid.reward = 0; - for (uint256 index = 0; index < askIds.length; index++) { - _assignTask(askIds[index], generators[index], newAcls[index]); + // TODO: Remove this (i.e. releasing the stake) when slashing is implemented + ProverManager(proverManager).completeProverTask(_bidId, bidWithState.prover, marketId, 0); + // TODO: Uncomment this when slashing is implemented + // ProverManager(proverManager).releaseProverCompute(bidWithState.prover, marketId); + + emit ProofNotGenerated(_bidId); } } + //-------------------------------- Slashing end --------------------------------// + + //-------------------------------- Matching Engine start --------------------------------// + /** - * @notice Assign Tasks for Generators directly if ME signer has the gas + * @notice Assign Tasks for Provers directly if ME signer has the gas */ - function assignTask(uint256 askId, address generator, bytes calldata new_acl) external nonReentrant { - ENTITY_KEY_REGISTRY.allowOnlyVerifiedFamily(MATCHING_ENGINE_ROLE.MATCHING_ENGINE_FAMILY_ID(), _msgSender()); - _assignTask(askId, generator, new_acl); + function assignTask(uint256 _bidId, address _prover, bytes calldata _new_acl) external nonReentrant { + EntityKeyRegistry(entityKeyRegistry).allowOnlyVerifiedFamily( + MATCHING_ENGINE_ROLE.MATCHING_ENGINE_FAMILY_ID(), _msgSender() + ); + _assignTask(_bidId, _prover, _new_acl); } - function _assignTask(uint256 askId, address generator, bytes memory new_acl) internal { + function _assignTask(uint256 _bidId, address _prover, bytes memory _new_acl) internal { // Only tasks in CREATE state can be assigned - if (getAskState(askId) != AskState.CREATE) { - revert Error.ShouldBeInCreateState(); - } + require(getBidState(_bidId) == Enum.BidState.CREATED, Error.ShouldBeInCreateState()); - AskWithState storage askWithState = listOfAsk[askId]; - (uint256 proofGenerationCost, uint256 generatorProposedTime) = GENERATOR_REGISTRY.getGeneratorAssignmentDetails( - generator, - askWithState.ask.marketId - ); + Struct.BidWithState storage bidWithState = listOfBid[_bidId]; + (uint256 proofGenerationCost, uint256 proverProposedTime) = + ProverManager(proverManager).getProverAssignmentDetails(_prover, bidWithState.bid.marketId); // Can not assign task if price mismatch happens - if (askWithState.ask.reward < proofGenerationCost) { - revert Error.ProofPriceMismatch(askId); + if (bidWithState.bid.reward < proofGenerationCost) { + revert Error.ProofPriceMismatch(_bidId); } // Can not assign task if time mismatch happens - if (askWithState.ask.timeTakenForProofGeneration < generatorProposedTime) { - revert Error.ProofTimeMismatch(askId); + if (bidWithState.bid.timeForProofGeneration < proverProposedTime) { + revert Error.ProofTimeMismatch(_bidId); } - askWithState.state = AskState.ASSIGNED; - askWithState.ask.deadline = HELPER.blockNumber() + askWithState.ask.timeTakenForProofGeneration; - askWithState.generator = generator; + bidWithState.state = Enum.BidState.ASSIGNED; + bidWithState.bid.deadline = block.timestamp + bidWithState.bid.timeForProofGeneration; + bidWithState.prover = _prover; - uint256 generatorAmountToLock = _slashingPenalty(askWithState.ask.marketId); - GENERATOR_REGISTRY.assignGeneratorTask(generator, askWithState.ask.marketId, generatorAmountToLock); - emit TaskCreated(askId, generator, new_acl); + ProverManager(proverManager).assignProverTask(_bidId, _prover, bidWithState.bid.marketId); + emit TaskCreated(_bidId, _prover, _new_acl); } /** - * @notice Cancel the unassigned request. Refunds the proof fee back to the requestor + * @notice Assign Tasks for Provers. Only Matching Engine Image can call */ - function cancelAsk(uint256 askId) external nonReentrant { - // Only unassigned tasks can be cancelled. - if (getAskState(askId) != AskState.UNASSIGNED) { - revert Error.OnlyExpiredAsksCanBeCancelled(askId); - } - AskWithState storage askWithState = listOfAsk[askId]; - askWithState.state = AskState.COMPLETE; + function relayBatchAssignTasks( + uint256[] calldata _bidIds, + address[] calldata _provers, + bytes[] calldata _newAcls, + bytes calldata _signature + ) external nonReentrant { + require((_bidIds.length == _provers.length) && (_provers.length == _newAcls.length), Error.ArityMismatch()); - _increaseClaimableAmount(askWithState.ask.refundAddress, askWithState.ask.reward); + bytes32 messageHash = keccak256(abi.encode(_bidIds, _provers, _newAcls)); + bytes32 ethSignedMessageHash = messageHash.GET_ETH_SIGNED_HASHED_MESSAGE(); - emit AskCancelled(askId); - } + address signer = ECDSA.recover(ethSignedMessageHash, _signature); - function _verifyAndGetData(uint256 askId, AskWithState memory askWithState) internal view returns (uint256, address) { - (address generatorRewardAddress, uint256 minRewardForGenerator) = GENERATOR_REGISTRY.getGeneratorRewardDetails( - askWithState.generator, - askWithState.ask.marketId + EntityKeyRegistry(entityKeyRegistry).allowOnlyVerifiedFamily( + MATCHING_ENGINE_ROLE.MATCHING_ENGINE_FAMILY_ID(), signer ); - if (generatorRewardAddress == address(0)) { - revert Error.CannotBeZero(); + for (uint256 index = 0; index < _bidIds.length; index++) { + _assignTask(_bidIds[index], _provers[index], _newAcls[index]); } + } - if (getAskState(askId) != AskState.ASSIGNED) { - revert Error.OnlyAssignedAsksCanBeProved(askId); - } + //-------------------------------- Matching Engine end --------------------------------// - return (minRewardForGenerator, generatorRewardAddress); + //-------------------------------- Reward Claim start --------------------------------// + + function claimProverFeeReward(address proverRewardAddress) external { + uint256 amount = proverClaimableFeeReward[proverRewardAddress]; + require(amount > 0, Error.NoRewardToClaim()); + IERC20(paymentToken).safeTransfer(proverRewardAddress, amount); + delete proverClaimableFeeReward[proverRewardAddress]; } - function _completeProofForInvalidRequests( - uint256 askId, - AskWithState memory askWithState, - uint256 minRewardForGenerator, - address generatorRewardAddress, - uint256 marketId, - uint256 _penalty - ) internal { - // Only assigned requests can be proved - if (getAskState(askId) != AskState.ASSIGNED) { - revert Error.OnlyAssignedAsksCanBeProved(askId); - } - listOfAsk[askId].state = AskState.COMPLETE; + // TODO: seperate RewardAddress + function claimTransmitterFeeReward() external { + uint256 amount = transmitterClaimableFeeReward[_msgSender()]; + require(amount > 0, Error.NoRewardToClaim()); + + IERC20(paymentToken).safeTransfer(_msgSender(), amount); + delete transmitterClaimableFeeReward[_msgSender()]; + } - // tokens related to incorrect request will be sen't to treasury - uint256 toTreasury = askWithState.ask.reward - minRewardForGenerator; + //-------------------------------- Reward Claim start --------------------------------// - // transfer the reward to generator - _increaseClaimableAmount(generatorRewardAddress, minRewardForGenerator); - // transfer the amount to treasury collection - _increaseClaimableAmount(TREASURY, toTreasury); + //-------------------------------- SYMBIOTIC_STAKING_REWARD start --------------------------------// + + /// @notice Called when SymbioticStaking reward distributes fee rewards + function distributeTransmitterFeeReward(address _transmitter, uint256 _feeRewardAmount) + external + onlyRole(SYMBIOTIC_STAKING_ROLE) + { + transmitterClaimableFeeReward[_transmitter] += _feeRewardAmount; + emit TransmitterFeeRewardAdded(_transmitter, _feeRewardAmount); + } - GENERATOR_REGISTRY.completeGeneratorTask(askWithState.generator, marketId, _penalty); - emit InvalidInputsDetected(askId); + function transferFeeToken(address _recipient, uint256 _amount) external onlyRole(SYMBIOTIC_STAKING_REWARD_ROLE) { + IERC20(paymentToken).safeTransfer(_recipient, _amount); } + //-------------------------------- SYMBIOTIC_STAKING_REWARD end --------------------------------// + + //-------------------------------- UPDATER_ROLE start --------------------------------// + /** - * @notice Submit Attestation/Proof from the IVS signer that the given inputs are invalid + * @notice Enforces PMP to use only one matching engine image */ - function submitProofForInvalidInputs(uint256 askId, bytes calldata invalidProofSignature) external nonReentrant { - AskWithState memory askWithState = listOfAsk[askId]; - uint256 marketId = askWithState.ask.marketId; - Market memory currentMarket = marketData[marketId]; + function setMatchingEngineImage(bytes calldata _pcrs) external onlyRole(UPDATER_ROLE) { + EntityKeyRegistry(entityKeyRegistry).whitelistImageUsingPcrs( + MATCHING_ENGINE_ROLE.MATCHING_ENGINE_FAMILY_ID(), _pcrs + ); + } - (uint256 minRewardForGenerator, address generatorRewardAddress) = _verifyAndGetData(askId, askWithState); + /** + * @notice Verifies the matching engine and its' keys. Can be verified only by UPDATE_ROLE till multi matching engine key sharing is enabled + */ + function verifyMatchingEngine(bytes calldata _attestationData, bytes calldata _meSignature) + external + onlyRole(UPDATER_ROLE) + { + address _thisAddress = address(this); - if (!_checkDisputeUsingSignature(askId, askWithState.ask.proverData, invalidProofSignature, marketId.IVS_FAMILY_ID())) { - revert Error.CannotSlashUsingValidInputs(askId); - } + // confirms that admin has access to enclave + _attestationData.VERIFY_ENCLAVE_SIGNATURE(_meSignature, _thisAddress); - _completeProofForInvalidRequests( - askId, - askWithState, - minRewardForGenerator, - generatorRewardAddress, - marketId, - currentMarket.slashingPenalty + // checks attestation and updates the key + EntityKeyRegistry(entityKeyRegistry).updatePubkey( + _thisAddress, 0, _attestationData.GET_PUBKEY(), _attestationData ); } /** - * @notice Submit Multiple proofs in single transaction + * @notice Update Cost for inputs */ - function submitProofs(uint256[] memory taskIds, bytes[] calldata proofs) external nonReentrant { - if (taskIds.length != proofs.length) { - revert Error.ArityMismatch(); - } - for (uint256 index = 0; index < taskIds.length; index++) { - _submitProof(taskIds[index], proofs[index]); - } + function updateCostPerBytes(Enum.SecretType _secretType, uint256 _costPerByte) external onlyRole(UPDATER_ROLE) { + costPerInputBytes[_secretType] = _costPerByte; + + emit UpdateCostPerBytes(_secretType, _costPerByte); } /** - * @notice Submit Single Proof + * @notice Update Min Proving Time */ - function submitProof(uint256 askId, bytes calldata proof) public nonReentrant { - _submitProof(askId, proof); - } + function updateMinProvingTime(Enum.SecretType _secretType, uint256 _newProvingTime) + external + onlyRole(UPDATER_ROLE) + { + minProvingTime[_secretType] = _newProvingTime; - function _submitProof(uint256 askId, bytes calldata proof) internal { - AskWithState memory askWithState = listOfAsk[askId]; + emit UpdateMinProvingTime(_secretType, _newProvingTime); + } - uint256 marketId = askWithState.ask.marketId; + function pause() external onlyRole(UPDATER_ROLE) { + _pause(); + } - (address generatorRewardAddress, uint256 minRewardForGenerator) = GENERATOR_REGISTRY.getGeneratorRewardDetails( - askWithState.generator, - askWithState.ask.marketId - ); + function unpause() external onlyRole(UPDATER_ROLE) { + _unpause(); + } - if (generatorRewardAddress == address(0)) { - revert Error.CannotBeZero(); - } + function setMarketCreationCost(uint256 _marketCreationCost) external onlyRole(UPDATER_ROLE) { + marketCreationCost = _marketCreationCost; + emit MarketCreationCostSet(_marketCreationCost); + } - if (getAskState(askId) != AskState.ASSIGNED) { - revert Error.OnlyAssignedAsksCanBeProved(askId); - } - // check what needs to be encoded from proof, ask and task for proof to be verified + function setPaymentToken(address _paymentToken) external onlyRole(UPDATER_ROLE) { + paymentToken = _paymentToken; + emit PaymentTokenSet(_paymentToken); + } - bytes memory inputAndProof = abi.encode(askWithState.ask.proverData, proof); + function setTreasury(address _treasury) external onlyRole(UPDATER_ROLE) { + treasury = _treasury; + emit TreasurySet(_treasury); + } - // Verify input and proof against verifier - if (!marketData[marketId].verifier.verify(inputAndProof)) { - revert Error.InvalidProof(askId); - } - listOfAsk[askId].state = AskState.COMPLETE; + function setProverManager(address _proverManager) external onlyRole(UPDATER_ROLE) { + proverManager = _proverManager; + emit ProverManagerSet(_proverManager); + } - uint256 toBackToRequestor = askWithState.ask.reward - minRewardForGenerator; + function setEntityKeyRegistry(address _entityKeyRegistry) external onlyRole(UPDATER_ROLE) { + entityKeyRegistry = _entityKeyRegistry; + emit EntityKeyRegistrySet(_entityKeyRegistry); + } - // reward to generator - _increaseClaimableAmount(generatorRewardAddress, minRewardForGenerator); - // fraction of amount back to requestor - _increaseClaimableAmount(askWithState.ask.refundAddress, toBackToRequestor); + //-------------------------------- UPDATER_ROLE end --------------------------------// - uint256 generatorAmountToRelease = _slashingPenalty(marketId); - GENERATOR_REGISTRY.completeGeneratorTask(askWithState.generator, marketId, generatorAmountToRelease); - emit ProofCreated(askId, proof); - } + //-------------------------------- Getter start --------------------------------// /** - * @notice Slash Generator for deadline crossed requests + * @notice Different secret might have different fee. Hence fee is different + * @param _secretType: Secret Type + * @param _bid: Details of the bid + * @param _privateInputs: Private Inputs to the circuit + * @param _acl: Access control Data */ - function slashGenerator(uint256 askId, address rewardAddress) external nonReentrant returns (uint256) { - if (getAskState(askId) != AskState.DEADLINE_CROSSED) { - revert Error.ShouldBeInCrossedDeadlineState(askId); + function getPlatformFee( + Enum.SecretType _secretType, + Struct.Bid calldata _bid, + bytes calldata _privateInputs, + bytes calldata _acl + ) public view returns (uint256) { + uint256 costperByte = costPerInputBytes[_secretType]; + if (costperByte != 0) { + return (_bid.proverData.length + _privateInputs.length + _acl.length) * costperByte; } - return _slashGenerator(askId, rewardAddress); + return 0; } /** - * @notice Generator can discard assigned request if he choses to. This will however result in slashing + * @notice Possible States: NULL, CREATE, UNASSIGNED, ASSIGNED, COMPLETE, DEADLINE_CROSSED */ - function discardRequest(uint256 askId) external nonReentrant returns (uint256) { - AskWithState memory askWithState = listOfAsk[askId]; - if (getAskState(askId) != AskState.ASSIGNED) { - revert Error.ShouldBeInAssignedState(askId); - } - if (askWithState.generator != _msgSender()) { - revert Error.OnlyGeneratorCanDiscardRequest(askId); - } - return _slashGenerator(askId, TREASURY); - } + function getBidState(uint256 _bidId) public view returns (Enum.BidState) { + Struct.BidWithState memory bidWithState = listOfBid[_bidId]; - function _slashGenerator(uint256 askId, address rewardAddress) internal returns (uint256) { - AskWithState storage askWithState = listOfAsk[askId]; - - askWithState.state = AskState.COMPLETE; - uint256 marketId = askWithState.ask.marketId; + // time before which matching engine should assign the task to prover + if (bidWithState.state == Enum.BidState.CREATED) { + if (bidWithState.bid.expiry > block.timestamp) { + return bidWithState.state; + } - _increaseClaimableAmount(askWithState.ask.refundAddress, askWithState.ask.reward); - emit ProofNotGenerated(askId); - return GENERATOR_REGISTRY.slashGenerator(askWithState.generator, marketId, _slashingPenalty(marketId), rewardAddress); - } + return Enum.BidState.UNASSIGNED; + } - function _slashingPenalty(uint256 marketId) internal view returns (uint256) { - return marketData[marketId].slashingPenalty; - } + // time before which prover should submit the proof + if (bidWithState.state == Enum.BidState.ASSIGNED) { + if (bidWithState.bid.deadline < block.timestamp) { + return Enum.BidState.DEADLINE_CROSSED; + } - function flush(address _address) public { - uint256 amount = claimableAmount[_address]; - if (amount != 0) { - PAYMENT_TOKEN.safeTransfer(_address, amount); - delete claimableAmount[_address]; + return Enum.BidState.ASSIGNED; } + + return bidWithState.state; } - function _increaseClaimableAmount(address _address, uint256 _amount) internal { - if (_amount != 0) { - claimableAmount[_address] += _amount; - } + function bidCounter() external view returns (uint256) { + return listOfBid.length; } - function _checkDisputeUsingSignature( - uint256 askId, - bytes memory proverData, - bytes memory invalidProofSignature, - bytes32 familyId - ) internal view returns (bool) { - bytes32 messageHash = keccak256(abi.encode(askId, proverData)); + function marketCounter() external view returns (uint256) { + return marketData.length; + } - bytes32 ethSignedMessageHash = messageHash.GET_ETH_SIGNED_HASHED_MESSAGE(); + //-------------------------------- Getter end --------------------------------// - address signer = ECDSAUpgradeable.recover(ethSignedMessageHash, invalidProofSignature); - if (signer == address(0)) { - revert Error.InvalidEnclaveSignature(signer); - } + //-------------------------------- Overrides start --------------------------------// - ENTITY_KEY_REGISTRY.allowOnlyVerifiedFamily(familyId, signer); - return true; + function supportsInterface(bytes4 _interfaceId) public view virtual override returns (bool) { + return super.supportsInterface(_interfaceId); } - function askCounter() public view returns (uint256) { - return listOfAsk.length; - } + function _authorizeUpgrade(address /*account*/ ) internal view override onlyRole(DEFAULT_ADMIN_ROLE) {} - function marketCounter() public view returns (uint256) { - return marketData.length; - } + //-------------------------------- Overrides end --------------------------------// // for further increase uint256[50] private __gap1_0; diff --git a/contracts/ProverManager.sol b/contracts/ProverManager.sol new file mode 100644 index 0000000..cb46c87 --- /dev/null +++ b/contracts/ProverManager.sol @@ -0,0 +1,590 @@ +// SPDX-License-Identifier: MIT + +pragma solidity 0.8.26; + +import {AccessControlUpgradeable} from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; +import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import {ReentrancyGuardUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; + +import {EntityKeyRegistry} from "./EntityKeyRegistry.sol"; +import {Error} from "./lib/Error.sol"; +import {Struct} from "./lib/Struct.sol"; +import {Enum} from "./lib/Enum.sol"; +import {HELPER} from "./lib/Helper.sol"; +import {ProofMarketplace} from "./ProofMarketplace.sol"; +import {IStakingManager} from "./interfaces/staking/IStakingManager.sol"; +import {IVerifier} from "./interfaces/IVerifier.sol"; +import {IProverManager} from "./interfaces/IProverManager.sol"; + +contract ProverManager is AccessControlUpgradeable, UUPSUpgradeable, ReentrancyGuardUpgradeable, IProverManager { + using HELPER for bytes; + using HELPER for bytes32; + using HELPER for uint256; + using SafeERC20 for IERC20; + + //-------------------------------- Constants and Immutable start --------------------------------// + + bytes32 public constant PROOF_MARKET_PLACE_ROLE = keccak256("PROOF_MARKET_PLACE_ROLE"); // 0xc79b502a8525f583d129c14570e17ce9bca26110a5c41ab7e2556f95e081fec5 + + uint256 internal constant EXPONENT = 10 ** 18; + + uint256 public constant PARALLEL_REQUESTS_UPPER_LIMIT = 100; + uint256 internal constant REDUCTION_REQUEST_DELAY = 100 seconds; // in seconds + uint256 public constant MIN_PROVING_TIME = 1 seconds; // 1 second + uint256 public constant MAX_PROVING_TIME = 1 days; // 1 day + + //-------------------------------- Constants and Immutable start --------------------------------// + + //-------------------------------- State variables start --------------------------------// + + uint256[500] private __gap_0; + + address public proofMarketplace; + address public stakingManager; + address public entityKeyRegistry; + + mapping(address => Struct.Prover) public proverRegistry; + mapping(address prover => mapping(uint256 marketId => Struct.ProverInfoPerMarket)) public proverInfoPerMarket; + mapping(address prover => uint256 timestamp) public reduceComputeRequestTimestamp; + + uint256[500] private __gap_1; + + //-------------------------------- State variables end --------------------------------// + + //-------------------------------- Init start --------------------------------// + + /// @custom:oz-upgrades-unsafe-allow constructor + constructor() { + _disableInitializers(); + } + + function initialize(address _admin, address _proofMarketplace, address _stakingManager, address _entityKeyRegistry) + public + initializer + { + __Context_init_unchained(); + __ERC165_init_unchained(); + __AccessControl_init_unchained(); + __UUPSUpgradeable_init_unchained(); + + _grantRole(DEFAULT_ADMIN_ROLE, _admin); + _grantRole(PROOF_MARKET_PLACE_ROLE, _proofMarketplace); + + proofMarketplace = _proofMarketplace; + stakingManager = _stakingManager; + entityKeyRegistry = _entityKeyRegistry; + } + + //-------------------------------- Init end --------------------------------// + + //-------------------------------- Prover Info start --------------------------------// + + /** + * @notice Register Prover + */ + function register(address _rewardAddress, uint256 _declaredCompute, bytes calldata _proverData) + external + nonReentrant + { + address _proverAddress = _msgSender(); + Struct.Prover memory prover = proverRegistry[_proverAddress]; + + require(_proverData.length > 0 && _rewardAddress > address(0) && _declaredCompute > 0, Error.CannotBeZero()); + + // prevents registering multiple times, unless deregistered + require(prover.rewardAddress == address(0), Error.ProverAlreadyExists()); + + proverRegistry[_proverAddress] = Struct.Prover(_rewardAddress, 0, 0, 0, _declaredCompute, EXPONENT, _proverData); + + emit ProverRegistered(_proverAddress, _declaredCompute, _proverData); + } + + /** + * @notice Deregister the prover + */ + function deregister() external nonReentrant { + address _proverAddress = _msgSender(); + Struct.Prover memory prover = proverRegistry[_proverAddress]; + + require(prover.sumOfComputeAllocations == 0, Error.CannotLeaveWithActiveMarket()); + + delete proverRegistry[_proverAddress]; + + emit ProverDeregistered(_proverAddress); + } + + /** + * @notice Change Prover's reward address + */ + function updateProverRewardAddress(address _newRewardAddress) external { + require(_newRewardAddress != address(0), Error.ZeroNewRewardAddress()); + + address _proverAddress = _msgSender(); + Struct.Prover storage prover = proverRegistry[_proverAddress]; + require(prover.rewardAddress != address(0), Error.ProverNotRegistered()); + + prover.rewardAddress = _newRewardAddress; + + emit ProverRewardAddressChanged(_proverAddress, _newRewardAddress); + } + + /** + * @notice Increase prover's compute + */ + function increaseDeclaredCompute(uint256 _computeToIncrease) external { + require(_computeToIncrease > 0, Error.ZeroComputeToIncrease()); + + address _proverAddress = _msgSender(); + Struct.Prover storage prover = proverRegistry[_proverAddress]; + require(prover.rewardAddress != address(0) && prover.proverData.length != 0, Error.ProverNotRegistered()); + + prover.declaredCompute += _computeToIncrease; + + emit ComputeIncreased(_proverAddress, _computeToIncrease); + } + + /** + * @notice Notify matching engine about compute reduction. This will stop matching engine from assigning new tasks till the compute is down + * @param _computeToReduce Compute To Reduce + */ + function intendToReduceCompute(uint256 _computeToReduce) external { + require(_computeToReduce != 0, Error.ZeroComputeToReduce()); + + address _proverAddress = _msgSender(); + Struct.Prover storage prover = proverRegistry[_proverAddress]; + + require(prover.rewardAddress != address(0) && prover.proverData.length > 0, Error.ProverNotRegistered()); + + // if request is already in place, this will ICU will be less than EXP (as per design) + require(prover.intendedComputeUtilization == EXPONENT, Error.RequestAlreadyInPlace()); + + // new utilization after update + uint256 newTotalCompute = prover.declaredCompute - _computeToReduce; + + // this is min compute requires for atleast 1 request from each supported market + require(newTotalCompute > prover.sumOfComputeAllocations, Error.ExceedsAcceptableRange()); + + uint256 newUtilization = (newTotalCompute * EXPONENT) / prover.declaredCompute; + // new utilization should be always less than EXP + require(newUtilization < EXPONENT, Error.ExceedsAcceptableRange()); + + // temporary value to store the new utilization + prover.intendedComputeUtilization = newUtilization; + + // block number after which this intent which execute + reduceComputeRequestTimestamp[_proverAddress] = block.timestamp + REDUCTION_REQUEST_DELAY; + emit ComputeDecreaseRequested(_proverAddress, newUtilization); + } + + /** + * @notice Free up the unused compute. intendToReduceCompute must have been called before this function + */ + function decreaseDeclaredCompute() external { + address _proverAddress = _msgSender(); + + Struct.Prover storage prover = proverRegistry[_proverAddress]; + + require(prover.proverData.length != 0 && prover.rewardAddress != address(0), Error.InvalidProver()); + + if (prover.intendedComputeUtilization == EXPONENT) { + revert Error.ReduceComputeRequestNotInPlace(); + } + + uint256 newTotalCompute = (prover.intendedComputeUtilization * prover.declaredCompute) / EXPONENT; + uint256 computeToRelease = prover.declaredCompute - newTotalCompute; + + if (newTotalCompute < prover.computeConsumed) { + revert Error.InsufficientProverComputeAvailable(); + } + + if (newTotalCompute < prover.sumOfComputeAllocations) { + revert Error.InsufficientProverComputeAvailable(); + } + + prover.declaredCompute = newTotalCompute; + prover.intendedComputeUtilization = EXPONENT; + + if ( + !( + block.timestamp >= reduceComputeRequestTimestamp[_proverAddress] + && reduceComputeRequestTimestamp[_proverAddress] != 0 + ) + ) { + revert Error.ReductionRequestNotValid(); + } + + delete reduceComputeRequestTimestamp[_proverAddress]; + emit ComputeDecreased(_proverAddress, computeToRelease); + } + + function updateProverData(bytes calldata _proverData) external nonReentrant { + require(_proverData.length > 0, Error.ZeroProverDataLength()); + + address _proverAddress = _msgSender(); + Struct.Prover storage prover = proverRegistry[_proverAddress]; + require(prover.rewardAddress != address(0), Error.ProverNotRegistered()); + + prover.proverData = _proverData; + + emit ProverDataUpdated(_proverAddress, _proverData); + } + + //-------------------------------- Prover Info end --------------------------------// + + //-------------------------------- Prover-Marketplace start --------------------------------// + + function joinMarketplace( + uint256 _marketId, + uint256 _computePerRequestRequired, + uint256 _proofGenerationCost, + uint256 _proposedTime, + uint256 _commission, + bool _updateMarketDedicatedKey, // false if not a private market + bytes memory _attestationData, // verification ignored if updateMarketDedicatedKey==false + bytes calldata _enclaveSignature // ignored if updateMarketDedicatedKey==false + ) external { + address proverAddress = _msgSender(); + + Struct.Prover storage prover = proverRegistry[proverAddress]; + Struct.ProverInfoPerMarket memory info = proverInfoPerMarket[proverAddress][_marketId]; + + // proof generation time can't be zero. + // compute required per proof can't be zero + if (prover.rewardAddress == address(0) || _computePerRequestRequired == 0) { + revert Error.CannotBeZero(); + } + + require( + _proposedTime >= MIN_PROVING_TIME && _proposedTime <= MAX_PROVING_TIME, Error.InvalidProverProposedTime() + ); + + // commission can't be more than 1e18 (100%) + if (_commission > 1e18) { + revert Error.InvalidProverCommission(); + } + + // only for checking if any market id valid or not + (address marketVerifierContractAddress,) = _readMarketData(_marketId); + if (marketVerifierContractAddress == address(0)) { + revert Error.InvalidMarket(); + } + + // prevents re-joining + require(info.state == Enum.ProverState.NULL, Error.AlreadyJoinedMarket()); + + // sum of compute allocation of all supported markets + prover.sumOfComputeAllocations += _computePerRequestRequired; + + // ensures that prover will support atleast 1 request for every market + require(prover.sumOfComputeAllocations <= prover.declaredCompute, Error.CannotBeMoreThanDeclaredCompute()); + + // increment the number of active market places supported + prover.activeMarketplaces++; + + // update market specific info for the prover + proverInfoPerMarket[proverAddress][_marketId] = Struct.ProverInfoPerMarket( + Enum.ProverState.JOINED, _computePerRequestRequired, _commission, _proofGenerationCost, _proposedTime, 0 + ); + + if (_updateMarketDedicatedKey) { + _updateEncryptionKey(proverAddress, _marketId, _attestationData, _enclaveSignature); + } + + emit ProverJoinedMarketplace(proverAddress, _marketId, _computePerRequestRequired, _commission); + } + + // TODO: Add methods to update prover commission for a market + + function _readMarketData(uint256 _marketId) internal view returns (address, bytes32) { + (address _verifier, bytes32 proverImageId,,,) = ProofMarketplace(proofMarketplace).marketData(_marketId); + + return (_verifier, proverImageId); + } + + function leaveMarketplaces(uint256[] calldata marketIds) external { + for (uint256 index = 0; index < marketIds.length; index++) { + // proverAddress = _msgSender(); + _leaveMarketplace(_msgSender(), marketIds[index]); + } + } + + function leaveMarketplace(uint256 _marketId) external { + // proverAddress = _msgSender(); + _leaveMarketplace(_msgSender(), _marketId); + } + + function getProverCommission(uint256 _marketId, address _proverAddress) public view returns (uint256) { + return proverInfoPerMarket[_proverAddress][_marketId].commission; + } + + function _leaveMarketplace(address _proverAddress, uint256 _marketId) internal { + (address marketVerifier,,,,) = ProofMarketplace(proofMarketplace).marketData(_marketId); + + require(marketVerifier != address(0), Error.InvalidMarket()); + + Struct.ProverInfoPerMarket memory info = proverInfoPerMarket[_proverAddress][_marketId]; + + require(info.state != Enum.ProverState.NULL, Error.InvalidProverStatePerMarket()); + + // check if there is any active requests + require(info.activeRequests == 0, Error.CannotLeaveMarketWithActiveRequest()); + + Struct.Prover storage prover = proverRegistry[_proverAddress]; + + prover.sumOfComputeAllocations -= info.computePerRequestRequired; + prover.activeMarketplaces -= 1; + + delete proverInfoPerMarket[_proverAddress][_marketId]; + emit ProverLeftMarketplace(_proverAddress, _marketId); + } + + function requestForExitMarketplace(uint256 _marketId) external { + _requestForExitMarketplace(_msgSender(), _marketId); + } + + function requestForExitMarketplaces(uint256[] calldata _marketIds) external { + for (uint256 index = 0; index < _marketIds.length; index++) { + _requestForExitMarketplace(_msgSender(), _marketIds[index]); + } + } + + function _requestForExitMarketplace(address _proverAddress, uint256 _marketId) internal { + (Enum.ProverState state,) = getProverState(_proverAddress, _marketId); + + // only valid provers can exit the market + if (!(state != Enum.ProverState.NULL && state != Enum.ProverState.REQUESTED_FOR_EXIT)) { + revert Error.OnlyValidProversCanRequestExit(); + } + Struct.ProverInfoPerMarket storage info = proverInfoPerMarket[_proverAddress][_marketId]; + + info.state = Enum.ProverState.REQUESTED_FOR_EXIT; + + // alerts matching engine to stop assinging the requests of given market + emit ProverRequestedMarketplaceExit(_proverAddress, _marketId); + + // if there are no active requests, proceed to leave market plaes + if (info.activeRequests == 0) { + _leaveMarketplace(_proverAddress, _marketId); + } + } + + /** + * @notice update the encryption key + */ + function updateEncryptionKey(uint256 _marketId, bytes memory _attestationData, bytes calldata _enclaveSignature) + external + { + // msg.sender is prover + _updateEncryptionKey(_msgSender(), _marketId, _attestationData, _enclaveSignature); + } + + function _updateEncryptionKey( + address _proverAddress, + uint256 _marketId, + bytes memory _attestationData, + bytes calldata _enclaveSignature + ) internal { + Struct.Prover memory prover = proverRegistry[_proverAddress]; + + // just an extra check to prevent spam + require(prover.rewardAddress != address(0), Error.CannotBeZero()); + + // only for knowing if the given market is private or public + (, bytes32 proverImageId) = _readMarketData(_marketId); + + require(proverImageId.IS_ENCLAVE(), Error.PublicMarketsDontNeedKey()); + + require( + EntityKeyRegistry(entityKeyRegistry).isImageInFamily( + _attestationData.GET_IMAGE_ID_FROM_ATTESTATION(), _marketId.PROVER_FAMILY_ID() + ), + Error.IncorrectImageId() + ); + + bytes memory pubkey = _attestationData.GET_PUBKEY(); + + _attestationData.VERIFY_ENCLAVE_SIGNATURE(_enclaveSignature, _proverAddress); + + // don't whitelist, because same imageId must be used to update the key + EntityKeyRegistry(entityKeyRegistry).updatePubkey(_proverAddress, _marketId, pubkey, _attestationData); + } + + /** + * @notice Add IVS key for a given market + */ + function addIvsKey(uint256 _marketId, bytes memory _attestationData, bytes calldata _enclaveSignature) external { + // ensure only right image is used + require( + EntityKeyRegistry(entityKeyRegistry).isImageInFamily( + _attestationData.GET_IMAGE_ID_FROM_ATTESTATION(), _marketId.IVS_FAMILY_ID() + ), + Error.IncorrectImageId() + ); + + // confirms that _msgSender() has access to enclave + _attestationData.VERIFY_ENCLAVE_SIGNATURE(_enclaveSignature, _msgSender()); + + // only whitelist key, after verifying the attestation + EntityKeyRegistry(entityKeyRegistry).verifyKey(_attestationData); + emit IvKeyAdded(_marketId, _attestationData.GET_ADDRESS()); + } + + /** + * @notice Remove prover's encryption key + */ + function removeEncryptionKey(uint256 _marketId) external { + // msg.sender is prover + EntityKeyRegistry(entityKeyRegistry).removePubkey(_msgSender(), _marketId); + } + + //-------------------------------- Prover-Marketplace end --------------------------------// + + //-------------------------------- PROOF_MARKET_PLACE_ROLE start --------------------------------// + + function assignProverTask(uint256 _bidId, address _proverAddress, uint256 _marketId) + external + nonReentrant + onlyRole(PROOF_MARKET_PLACE_ROLE) + { + (Enum.ProverState state, uint256 idleCapacity) = getProverState(_proverAddress, _marketId); + + if (!(state == Enum.ProverState.JOINED || state == Enum.ProverState.WIP)) { + revert Error.AssignOnlyToIdleProvers(); + } + + Struct.Prover storage prover = proverRegistry[_proverAddress]; + Struct.ProverInfoPerMarket storage info = proverInfoPerMarket[_proverAddress][_marketId]; + + require(info.computePerRequestRequired <= idleCapacity, Error.InsufficientProverComputeAvailable()); + require(info.activeRequests <= PARALLEL_REQUESTS_UPPER_LIMIT, Error.MaxParallelRequestsPerMarketExceeded()); + + uint256 computeConsumed = info.computePerRequestRequired; + prover.computeConsumed += computeConsumed; + + IStakingManager(stakingManager).onTaskAssignment(_bidId, _proverAddress); + + info.activeRequests++; + emit ComputeLocked(_proverAddress, computeConsumed); + } + + function completeProverTask(uint256 _bidId, address _proverAddress, uint256 _marketId, uint256 _feeReward) + external + onlyRole(PROOF_MARKET_PLACE_ROLE) + { + _releaseProverCompute(_proverAddress, _marketId); + + IStakingManager(stakingManager).onTaskCompletion(_bidId, _proverAddress, _feeReward); + } + + /** + * @notice Should be called by proof market place only, PMP is assigned SLASHER_ROLE, called when provers is about to be slashed + */ + function releaseProverCompute(address _proverAddress, uint256 _marketId) + external + onlyRole(PROOF_MARKET_PLACE_ROLE) + { + _releaseProverCompute(_proverAddress, _marketId); + } + + function _releaseProverCompute(address _proverAddress, uint256 _marketId) internal { + (Enum.ProverState state,) = getProverState(_proverAddress, _marketId); + + // All states = NULL,JOINED,NO_COMPUTE_AVAILABLE,WIP,REQUESTED_FOR_EXIT + // only provers in WIP, REQUESTED_FOR_EXIT, NO_COMPUTE_AVAILABLE can submit the request, NULL and JOINED can't + if (state == Enum.ProverState.NULL || state == Enum.ProverState.JOINED) { + revert Error.OnlyWorkingProvers(); + } + + Struct.Prover storage prover = proverRegistry[_proverAddress]; + Struct.ProverInfoPerMarket storage info = proverInfoPerMarket[_proverAddress][_marketId]; + + uint256 computeReleased = info.computePerRequestRequired; + prover.computeConsumed -= computeReleased; + + info.activeRequests--; + emit ComputeReleased(_proverAddress, computeReleased); + } + + //-------------------------------- PROOF_MARKET_PLACE_ROLE end --------------------------------// + + //-------------------------------- Getters start --------------------------------// + + function getProverState(address _proverAddress, uint256 _marketId) + public + view + returns (Enum.ProverState, uint256) + { + Struct.ProverInfoPerMarket memory info = proverInfoPerMarket[_proverAddress][_marketId]; + Struct.Prover memory prover = proverRegistry[_proverAddress]; + + if (info.state == Enum.ProverState.NULL) { + return (Enum.ProverState.NULL, 0); + } + + if (info.state == Enum.ProverState.REQUESTED_FOR_EXIT) { + return (Enum.ProverState.REQUESTED_FOR_EXIT, 0); + } + + uint256 idleCapacity = _maxReducableCompute(_proverAddress); + + if (info.state != Enum.ProverState.NULL && idleCapacity == 0) { + return (Enum.ProverState.NO_COMPUTE_AVAILABLE, 0); + } + + if (idleCapacity == prover.declaredCompute) { + return (Enum.ProverState.JOINED, idleCapacity); + } + + if (idleCapacity != 0 && idleCapacity < prover.declaredCompute) { + return (Enum.ProverState.WIP, idleCapacity); + } + return (Enum.ProverState.NULL, 0); + } + + function _maxReducableCompute(address _proverAddress) internal view returns (uint256) { + Struct.Prover memory prover = proverRegistry[_proverAddress]; + + uint256 maxUsableCompute = (prover.declaredCompute * prover.intendedComputeUtilization) / EXPONENT; + + if (maxUsableCompute < prover.computeConsumed) { + return 0; + } + + return maxUsableCompute - prover.computeConsumed; + } + + function getProverAssignmentDetails(address _proverAddress, uint256 _marketId) + external + view + returns (uint256, uint256) + { + Struct.ProverInfoPerMarket memory info = proverInfoPerMarket[_proverAddress][_marketId]; + + return (info.proofGenerationCost, info.proposedTime); + } + + function getProverRewardDetails(address _proverAddress, uint256 _marketId) + external + view + returns (address, uint256) + { + Struct.ProverInfoPerMarket memory info = proverInfoPerMarket[_proverAddress][_marketId]; + Struct.Prover memory prover = proverRegistry[_proverAddress]; + + return (prover.rewardAddress, info.proofGenerationCost); + } + + //-------------------------------- Getters end --------------------------------// + + //-------------------------------- Overrides start --------------------------------// + + function supportsInterface(bytes4 _interfaceId) public view virtual override returns (bool) { + return super.supportsInterface(_interfaceId); + } + + function _authorizeUpgrade(address /*account*/ ) internal view override onlyRole(DEFAULT_ADMIN_ROLE) {} + + //-------------------------------- Overrides end --------------------------------// +} diff --git a/contracts/bindings_generator/binding_matching_engine.sol b/contracts/bindings_generator/binding_matching_engine.sol deleted file mode 100644 index f3ef929..0000000 --- a/contracts/bindings_generator/binding_matching_engine.sol +++ /dev/null @@ -1,9 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.9; - -import "../EntityKeyRegistry.sol"; -import "../GeneratorRegistry.sol"; -import "../ProofMarketplace.sol"; - -contract BindginMatchingEngine {} diff --git a/contracts/interfaces/IL2Staking.sol b/contracts/interfaces/IL2Staking.sol index 4513590..4411251 100644 --- a/contracts/interfaces/IL2Staking.sol +++ b/contracts/interfaces/IL2Staking.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.26; interface IL2Staking { - function stake(address generatorAddress, uint256 amount) external returns (uint256); - function intendToReduceStake(uint256 stakeToReduce) external; + function stake(address proverAddress, uint256 amount) external returns (uint256); + function unstake(address receiver) external; } diff --git a/contracts/interfaces/IProofMarketplace.sol b/contracts/interfaces/IProofMarketplace.sol new file mode 100644 index 0000000..2b5d293 --- /dev/null +++ b/contracts/interfaces/IProofMarketplace.sol @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: MIT + +pragma solidity 0.8.26; + +import {Enum} from "../lib/Enum.sol"; + +interface IProofMarketplace { + function refundFees(uint256[] calldata bidIds) external; + + + //-------------------------------- Events start --------------------------------// + + /* setter */ + event MarketCreationCostSet(uint256 marketCreationCost); + event PaymentTokenSet(address indexed paymentToken); + event TreasurySet(address indexed treasury); + event ProverManagerSet(address indexed proverManager); + event EntityKeyRegistrySet(address indexed entityRegistry); + + + event BidCreated(uint256 indexed bidId, bool indexed hasPrivateInputs, bytes secret_data, bytes acl, bytes extra_data); + event TaskCreated(uint256 indexed bidId, address indexed prover, bytes new_acl); + event ProofCreated(uint256 indexed bidId, bytes proof); + event ProofNotGenerated(uint256 indexed bidId); + + event InvalidInputsDetected(uint256 indexed bidId); + + event MarketplaceCreated(uint256 indexed marketId); + + event BidCancelled(uint256 indexed bidId); + + event UpdateCostPerBytes(Enum.SecretType indexed secretType, uint256 costPerInputBytes); + event UpdateMinProvingTime(Enum.SecretType indexed secretType, uint256 newProvingTime); + event AddExtraProverImage(uint256 indexed marketId, bytes32 indexed imageId); + event AddExtraIVSImage(uint256 indexed marketId, bytes32 indexed imageId); + event RemoveExtraProverImage(uint256 indexed marketId, bytes32 indexed imageId); + event RemoveExtraIVSImage(uint256 indexed marketId, bytes32 indexed imageId); + + event ProverRewardShareSet(address indexed prover, uint256 rewardShare); + event ProverFeeRewardAdded(address indexed prover, uint256 feeRewardAmount); + + event TransmitterFeeRewardAdded(address indexed transmitter, uint256 feeRewardAmount); + + event MarketMetadataUpdated(uint256 indexed marketId, bytes metadata); + + //-------------------------------- Events end --------------------------------// +} diff --git a/contracts/interfaces/IProverManager.sol b/contracts/interfaces/IProverManager.sol new file mode 100644 index 0000000..ca1359f --- /dev/null +++ b/contracts/interfaces/IProverManager.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT + +pragma solidity 0.8.26; + +contract IProverManager { + //-------------------------------- Events end --------------------------------// + + event ProverRegistered(address indexed prover, uint256 initialCompute, bytes proverData); + event ProverDeregistered(address indexed prover); + event ProverDataUpdated(address indexed prover, bytes proverData); + + event ProverRewardAddressChanged(address indexed prover, address indexed newRewardAddress); + + event ProverJoinedMarketplace(address indexed prover, uint256 indexed marketId, uint256 computeAllocation, uint256 commission); + event ProverRequestedMarketplaceExit(address indexed prover, uint256 indexed marketId); + event ProverLeftMarketplace(address indexed prover, uint256 indexed marketId); + + event IvKeyAdded(uint256 indexed marketId, address indexed signer); + + event ComputeIncreased(address indexed prover, uint256 compute); + event ComputeDecreaseRequested(address indexed prover, uint256 intendedUtilization); + event ComputeDecreased(address indexed prover, uint256 compute); + + event ComputeLocked(address indexed prover, uint256 compute); + event ComputeReleased(address indexed prover, uint256 compute); + + //-------------------------------- Events end --------------------------------// +} diff --git a/contracts/interfaces/IVerifier.sol b/contracts/interfaces/IVerifier.sol index 7064ba7..b8a2839 100644 --- a/contracts/interfaces/IVerifier.sol +++ b/contracts/interfaces/IVerifier.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.26; interface IVerifier { function verify(bytes calldata encodedPublicInputsAndProofs) external view returns (bool); diff --git a/contracts/interfaces/SetPmp.sol b/contracts/interfaces/SetPmp.sol index c0edd73..e5a31ee 100644 --- a/contracts/interfaces/SetPmp.sol +++ b/contracts/interfaces/SetPmp.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.26; -import "../ProofMarketplace.sol"; +import {ProofMarketplace} from "../ProofMarketplace.sol"; abstract contract SetPmp { ProofMarketplace public proofMarketplace; diff --git a/contracts/interfaces/staking/INativeStaking.sol b/contracts/interfaces/staking/INativeStaking.sol new file mode 100644 index 0000000..1ecd941 --- /dev/null +++ b/contracts/interfaces/staking/INativeStaking.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.26; + +import {IStakingPool} from "../staking/IStakingPool.sol"; + +interface INativeStaking is IStakingPool { + + /*====================================================== events =======================================================*/ + + event Staked(address indexed account, address indexed prover, address indexed token, uint256 amount); + + event StakeWithdrawalRequested(address indexed account, address indexed prover, address token, uint256 indexed index, uint256 amount); + + event StakeWithdrawn(address indexed account, address indexed prover, address token, uint256 indexed index, uint256 amount); + + event WithdrawalDurationSet(uint256 duration); + + /*===================================================== functions =====================================================*/ + function stake(address stakeToken, address prover, uint256 amount) external; + + function requestStakeWithdrawal(address prover, address stakeToken, uint256 amount) external; + + function withdrawStake(address prover, uint256[] calldata index) external; +} diff --git a/contracts/interfaces/staking/INativeStakingReward.sol b/contracts/interfaces/staking/INativeStakingReward.sol new file mode 100644 index 0000000..a31dfeb --- /dev/null +++ b/contracts/interfaces/staking/INativeStakingReward.sol @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.26; + +import {IRewardDistributor} from "./IRewardDistributor.sol"; + +interface INativeStakingReward is IRewardDistributor { + function update(address account, address _stakeToken, address _prover) external; +} \ No newline at end of file diff --git a/contracts/interfaces/staking/IRewardDistributor.sol b/contracts/interfaces/staking/IRewardDistributor.sol new file mode 100644 index 0000000..7b60cfa --- /dev/null +++ b/contracts/interfaces/staking/IRewardDistributor.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.26; + +interface IRewardDistributor { + function updateFeeReward(address _stakeToken, address _prover, uint256 _rewardAmount) external; + + function updateInflationReward(address _prover, uint256 _rewardAmount) external; + + function onStakeUpdate(address _account, address _stakeToken, address _prover) external; + + function onClaimReward(address _account, address _prover) external; + + function onSlash() external; + + function setStakeToken(address _stakingPool, bool _isSupported) external; +} \ No newline at end of file diff --git a/contracts/interfaces/staking/IStakingManager.sol b/contracts/interfaces/staking/IStakingManager.sol new file mode 100644 index 0000000..cbbde87 --- /dev/null +++ b/contracts/interfaces/staking/IStakingManager.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT + +import {Struct} from "../../lib/Struct.sol"; + +pragma solidity ^0.8.26; + +interface IStakingManager { + /*===================================================== events ======================================================*/ + + event StakingPoolAdded(address indexed pool); + + event StakingPoolRemoved(address indexed pool); + + event ProofMarketplaceSet(address indexed proofMarketplace); + + event SymbioticStakingSet(address indexed symbioticStaking); + + event FeeTokenSet(address indexed feeToken); + + event PoolEnabledSet(address indexed pool, bool enabled); + + event PoolRewardShareSet(address indexed pool, uint256 share); + + /*===================================================== functions =====================================================*/ + + function onTaskAssignment(uint256 bidId, address prover) external; + + function onTaskCompletion(uint256 bidId, address prover, uint256 feePaid) external; + + function onSlashResultSubmission(Struct.TaskSlashed[] calldata slashedTasks) external; + + function getPoolConfig(address pool) external view returns (Struct.PoolConfig memory); +} \ No newline at end of file diff --git a/contracts/interfaces/staking/IStakingPool.sol b/contracts/interfaces/staking/IStakingPool.sol new file mode 100644 index 0000000..068a17a --- /dev/null +++ b/contracts/interfaces/staking/IStakingPool.sol @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.26; + +import {Struct} from "../../lib/Struct.sol"; + +interface IStakingPool { + /*====================================================== events =======================================================*/ + + /* Task */ + + event StakeLocked(uint256 indexed bidId, address indexed prover, address indexed token, uint256 amount); + + event StakeUnlocked(uint256 indexed bidId, address indexed prover, address indexed token, uint256 amount); + + event TaskSlashed(uint256 indexed bidId, address indexed prover, address indexed token, uint256 amount); + + /* Stake Token */ + + event StakeTokenAdded(address indexed token, uint256 weight); + + event StakeTokenRemoved(address indexed token); + + event StakeTokenSelectionWeightSet(address indexed token, uint256 weight); + + event AmountToLockSet(address indexed token, uint256 amount); + + /* Contracts Set */ + + event StakingManagerSet(address indexed stakingManager); + + event FeeRewardTokenSet(address indexed token); + + + /*===================================================== functions =====================================================*/ + + function lockStake(uint256 bidId, address prover) external; + + function onTaskCompletion(uint256 bidId, address prover, uint256 feeRewardAmount) external; + + function slash(Struct.TaskSlashed[] calldata slashedTasks) external; + + function rewardDistributor() external view returns (address); + + function getStakeTokenList() external view returns (address[] memory); + + function getStakeTokenWeights() external view returns (address[] memory, uint256[] memory); + + function stakeTokenSelectionWeightSum() external view returns (uint256); + + function isSupportedStakeToken(address stakeToken) external view returns (bool); + + function getProverStakeAmount(address stakeToken, address prover) external view returns (uint256); + + function getStakeAmount(address stakeToken, address staker, address prover) external view returns (uint256); + + function getProverActiveStakeAmount(address stakeToken, address prover) external view returns (uint256); + +} \ No newline at end of file diff --git a/contracts/interfaces/staking/ISymbioticStaking.sol b/contracts/interfaces/staking/ISymbioticStaking.sol new file mode 100644 index 0000000..10accda --- /dev/null +++ b/contracts/interfaces/staking/ISymbioticStaking.sol @@ -0,0 +1,63 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.26; + +import {IStakingPool} from "./IStakingPool.sol"; +import {Struct} from "../../lib/Struct.sol"; +import {Enum} from "../../lib/Enum.sol"; + +interface ISymbioticStaking is IStakingPool { + + /*====================================================== events =======================================================*/ + + event VaultSnapshotSubmitted( + address indexed transmitter, uint256 indexed captureTimestamp, uint256 index, uint256 numOfTxs, bytes32 indexed imageId, bytes vaultSnapshotData, bytes proof + ); + event SlashResultSubmitted( + address indexed transmitter, uint256 indexed captureTimestamp, uint256 index, uint256 numOfTxs, bytes32 indexed imageId, bytes slashResultData, bytes proof + ); + event SnapshotConfirmed(address indexed transmitter, uint256 indexed confirmedTimestamp); + event SubmissionCooldownSet(uint256 cooldown); + event BaseTransmitterComissionRateSet(uint256 rate); + event ProofMarketplaceSet(address indexed proofMarketplace); + event RewardDistributorSet(address indexed rewardDistributor); + event EnclaveImageAdded(bytes32 indexed imageId, bytes PCR0, bytes PCR1, bytes PCR2); + event EnclaveImageRemoved(bytes32 indexed imageId); + event AttestationVerifierSet(address indexed attestationVerifier); + + /*===================================================== functions =====================================================*/ + + function submitVaultSnapshot( + uint256 index, + uint256 numOfTxs, // number of total transactions + uint256 captureTimestamp, + bytes32 imageId, + bytes calldata vaultSnapshotData, + bytes calldata proof + ) external; + + function submitSlashResult( + uint256 index, + uint256 numOfTxs, // number of total transactions + uint256 captureTimestamp, + uint256 lastBlockNumber, + bytes32 imageId, + bytes calldata slashResultData, + bytes calldata proof + ) external; + + function lockInfo(uint256 bidId) external view returns (address stakeToken, uint256 amount); + + function txCountInfo(uint256 captureTimestamp, bytes32 _txType) external view returns (uint256 idxToSubmit, uint256 numOfTxs); + + function getSubmissionStatus(uint256 captureTimestamp, address transmitter) external view returns (bytes32); + + function confirmedTimestampInfo(uint256 idx) external view returns (Struct.ConfirmedTimestamp memory); + + /// @notice Returns the captureTimestamp of latest completed snapshot submission + function latestConfirmedTimestamp() external view returns (uint256); + + function latestConfirmedTimestampInfo() external view returns (Struct.ConfirmedTimestamp memory); + + /// @notice Returns the timestampIdx of latest completed snapshot submission + function latestConfirmedTimestampIdx() external view returns (uint256); +} diff --git a/contracts/interfaces/staking/ISymbioticStakingReward.sol b/contracts/interfaces/staking/ISymbioticStakingReward.sol new file mode 100644 index 0000000..3002efd --- /dev/null +++ b/contracts/interfaces/staking/ISymbioticStakingReward.sol @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: MIT + +import {Struct} from "../../lib/Struct.sol"; + +pragma solidity ^0.8.26; + +interface ISymbioticStakingReward { + + /*====================================================== events =======================================================*/ + + event RewardDistributed(address indexed stakeToken, address indexed prover, uint256 amount); + + event RewardClaimed(address indexed prover, uint256 amount); + + event StakingPoolSet(address indexed stakingPool); + + event ProofMarketplaceSet(address indexed proofMarketplace); + + event SymbioticStakingSet(address indexed symbioticStaking); + + event FeeRewardTokenSet(address indexed feeRewardToken); + + event RewardAccrued(address indexed rewardToken, address indexed vault, uint256 amount); + + event RewardPerTokenUpdated(address indexed stakeToken, address indexed rewardToken, address indexed prover, uint256 rewardPerTokenStoredUpdated); + + /*===================================================== functions =====================================================*/ + + function rewardPerTokenPaid(address _stakeToken, address _rewardToken, address _vault, address _prover) external view returns (uint256); + + function rewardPerTokenStored(address _stakeToken, address _rewardToken, address _prover) external view returns (uint256); + + function rewardAccrued(address _rewardToken, address _vault) external view returns (uint256); + + function claimReward(address _prover) external; + + function updateFeeReward(address _stakeToken, address _prover, uint256 _amount) external; + + function onSnapshotSubmission(address _vault, address _prover) external; +} \ No newline at end of file diff --git a/contracts/interfaces/staking/symbiotic/IInstantSlasher.sol b/contracts/interfaces/staking/symbiotic/IInstantSlasher.sol new file mode 100644 index 0000000..c9f0928 --- /dev/null +++ b/contracts/interfaces/staking/symbiotic/IInstantSlasher.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IInstantSlasher { + function vault() external view returns (address); + + function slash( + bytes32 subnetwork, + address operator, + uint256 amount, + uint48 captureTimestamp, + bytes calldata hints + ) external; +} \ No newline at end of file diff --git a/contracts/interfaces/staking/symbiotic/IVault.sol b/contracts/interfaces/staking/symbiotic/IVault.sol new file mode 100644 index 0000000..41863e4 --- /dev/null +++ b/contracts/interfaces/staking/symbiotic/IVault.sol @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IVault { + function slasher() external view returns (address); + function collateral() external view returns (address); +} \ No newline at end of file diff --git a/contracts/interfaces/staking/symbiotic/IVetoSlasher.sol b/contracts/interfaces/staking/symbiotic/IVetoSlasher.sol new file mode 100644 index 0000000..067b38c --- /dev/null +++ b/contracts/interfaces/staking/symbiotic/IVetoSlasher.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IVetoSlasher { + function requestSlash( + bytes32 subnetwork, + address operator, + uint256 amount, + uint48 captureTimestamp, + bytes calldata hints + ) external; + + function executeSlash( + uint256 slashIndex, + bytes calldata hints + ) external; +} \ No newline at end of file diff --git a/contracts/lib/Dispute.sol b/contracts/lib/Dispute.sol index 650a039..6f5ce4e 100644 --- a/contracts/lib/Dispute.sol +++ b/contracts/lib/Dispute.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.26; -import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; -import "../EntityKeyRegistry.sol"; -import "./Error.sol"; -import "./Helper.sol"; +import {EntityKeyRegistry} from "../EntityKeyRegistry.sol"; +import {Error} from "./Error.sol"; +import {HELPER} from "./Helper.sol"; contract Dispute { using HELPER for bytes; @@ -19,12 +19,12 @@ contract Dispute { } function checkDisputeUsingSignature( - uint256 askId, + uint256 bidId, bytes calldata proverData, bytes memory invalidProofSignature, bytes32 familyId ) internal view returns (bool) { - bytes32 messageHash = keccak256(abi.encode(askId, proverData)); + bytes32 messageHash = keccak256(abi.encode(bidId, proverData)); bytes32 ethSignedMessageHash = messageHash.GET_ETH_SIGNED_HASHED_MESSAGE(); @@ -38,11 +38,11 @@ contract Dispute { } function checkDispute( - uint256 askId, + uint256 bidId, bytes calldata proverData, bytes calldata invalidProofSignature, bytes32 expectedFamilyId ) public view returns (bool) { - return checkDisputeUsingSignature(askId, proverData, invalidProofSignature, expectedFamilyId); + return checkDisputeUsingSignature(bidId, proverData, invalidProofSignature, expectedFamilyId); } } diff --git a/contracts/lib/Enum.sol b/contracts/lib/Enum.sol new file mode 100644 index 0000000..7d40a28 --- /dev/null +++ b/contracts/lib/Enum.sol @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.26; + +library Enum { + /* ProofMarketplace */ + enum BidState { + NULL, + CREATED, + UNASSIGNED, + ASSIGNED, + COMPLETED, + DEADLINE_CROSSED + } + + enum SecretType { + NULL, + CALLDATA, + EXTERNAL + } + + /* ProverManager */ + enum ProverState { + NULL, + JOINED, + NO_COMPUTE_AVAILABLE, + WIP, + REQUESTED_FOR_EXIT + } + + + /* Priority Log */ + enum Priority { + NONE, + COST, + TIME, + DEADLINE + } +} + diff --git a/contracts/lib/Error.sol b/contracts/lib/Error.sol index 0776c0b..3c89083 100644 --- a/contracts/lib/Error.sol +++ b/contracts/lib/Error.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.26; library Error { // Administrative and Miscellaneous Errors @@ -25,16 +25,17 @@ library Error { error InferredImageIdIsDifferent(); error ImageAlreadyInFamily(bytes32 imageId, bytes32 familyId); - // Generator-related Errors - error GeneratorAlreadyExists(); - error InvalidGenerator(); + // Prover-related Errors + error ProverAlreadyExists(); + error InvalidProver(); + error InvalidProverCommission(); error CannotLeaveWithActiveMarket(); - error AssignOnlyToIdleGenerators(); - error InsufficientGeneratorComputeAvailable(); - error OnlyWorkingGenerators(); + error AssignOnlyToIdleProvers(); + error InsufficientProverComputeAvailable(); + error OnlyWorkingProvers(); error InvalidEnclaveKey(); - error OnlyValidGeneratorsCanRequestExit(); - error InvalidGeneratorStatePerMarket(); + error OnlyValidProversCanRequestExit(); + error InvalidProverStatePerMarket(); error UnstakeRequestNotInPlace(); error ReduceComputeRequestNotInPlace(); error MaxParallelRequestsPerMarketExceeded(); @@ -52,26 +53,111 @@ library Error { error InactiveMarket(); error OnlyMarketCreator(); error CannotRemoveDefaultImageFromMarket(uint256 marketId, bytes32 imageId); + error NoRewardToClaim(); // Task and Request Errors error CannotAssignExpiredTasks(); + error ExceedsMaximumMatchtime(); error InvalidInputs(); error ArityMismatch(); error OnlyMatchingEngineCanAssign(); error RequestAlreadyInPlace(); - error CannotSlashUsingValidInputs(uint256 askId); + error CannotSlashUsingValidInputs(uint256 bidId); // Proof and State Errors error ShouldBeInCreateState(); - error ProofPriceMismatch(uint256 askId); - error ProofTimeMismatch(uint256 askId); - error OnlyExpiredAsksCanBeCancelled(uint256 askId); - error OnlyAssignedAsksCanBeProved(uint256 askId); - error InvalidProof(uint256 askId); - error ShouldBeInCrossedDeadlineState(uint256 askId); - error ShouldBeInAssignedState(uint256 askId); - error OnlyGeneratorCanDiscardRequest(uint256 askId); + error ProofPriceMismatch(uint256 bidId); + error ProofTimeMismatch(uint256 bidId); + error OnlyExpiredBidsCanBeCancelled(uint256 bidId); + error OnlyAssignedBidsCanBeProved(uint256 bidId); + error InvalidProof(uint256 bidId); + error DeadlineNotCrossed(uint256 bidId); + error ShouldBeInAssignedState(uint256 bidId); + error OnlyProverCanDiscardRequest(uint256 bidId); - // Tee Verifier Errors - error TeeVerifierEnclaveKeyNotVerified(bytes PCR0, bytes PCR1, bytes PCR2); + // ProverManager + error ZeroProverDataLength(); + error ZeroComputeToIncrease(); + error ZeroComputeToReduce(); + error ZeroRewardAddress(); + error ZeroDeclaredCompute(); + error ZeroNewRewardAddress(); + error ProverNotRegistered(); + + // ProofMarketplace + error InvalidProverRewardShare(); + error NotSlashableBidId(uint256 bidId); + error InvalidProverProposedTime(); + error InvalidTimeForProofGeneration(); + + // Staking + error InsufficientStakeAmount(); + error NoStakeTokenAvailableToLock(); + error ZeroTokenAddress(); + error ZeroToAddress(); + + // StakingManager + error InvalidPool(); + error PoolAlreadyExists(); + error PoolDoesNotExist(); + error InvalidLength(); + error InvalidShares(); + error ZeroRewardShare(); + error PoolAlreadyEnabled(); + error PoolAlreadyDisabled(); + + // Symbiotic Staking + error InvalidSlashResultBlockRange(); + error EndBlockBeforeStartBlock(); + error NotRegisteredBlockNumber(); + error NotRegisteredTransmitter(); + error SubmissionAlreadyCompleted(); + error InvalidIndex(); + error InvalidNumOfTxs(); + error ZeroNumOfTxs(); + error InvalidCaptureTimestamp(); + error CooldownPeriodNotPassed(); + error NotIdxToSubmit(); + error ImageNotFound(); + error InvalidSignatureLength(); + error EnclaveKeyMismatch(); + error InvalidImage(); + error InvalidPublicKeyLength(); + error InvalidLastBlockNumber(); + error ImageAlreadyExists(); + error InvalidPCR0Length(); + error InvalidPCR1Length(); + error InvalidPCR2Length(); + error ZeroStakeTokenSelectionWeightSum(); + error NoStakeTokensAvailable(); + error TokenAlreadyExists(); + error TokenDoesNotExist(); + error InvalidComissionRate(); + error NoConfirmedTimestamp(); + + // Native Staking + error OnlyProverCanStake(); + error InsufficientStake(); + error InvalidIndexLength(); + error OnlyProverCanWithdrawStake(); + error WithdrawalTimeNotReached(); + error InvalidWithdrawalAmount(); + error TokenNotSupported(); + error InvalidWithdrawalDuration(); + error ZeroAmount(); + + // SymbioticStakingReward + error OnlyStakingManager(); + error ZeroProofMarketplaceAddress(); + error ZeroSymbioticStakingAddress(); + + // Contract Address + error InvalidAdmin(); + error InvalidFeeToken(); + error InvalidAttestationVerifier(); + error InvalidProofMarketplace(); + error InvalidProverManager(); + error InvalidSymbioticStaking(); + error InvalidStakingManager(); + error InvalidRewardDistributor(); } diff --git a/contracts/lib/Helper.sol b/contracts/lib/Helper.sol index 27866f8..747a75b 100644 --- a/contracts/lib/Helper.sol +++ b/contracts/lib/Helper.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT -import {ECDSA as ECDSAUpgradeable} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; -import "./Error.sol"; +import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import {Error} from "./Error.sol"; pragma solidity ^0.8.0; @@ -79,7 +79,7 @@ library HELPER { bytes32 messageHash = keccak256(abi.encode(attestationData, addressToVerify)); bytes32 ethSignedMessageHash = GET_ETH_SIGNED_HASHED_MESSAGE(messageHash); - address signer = ECDSAUpgradeable.recover(ethSignedMessageHash, enclaveSignature); + address signer = ECDSA.recover(ethSignedMessageHash, enclaveSignature); if (signer != GET_ADDRESS(attestationData)) { revert Error.InvalidEnclaveSignature(signer); } @@ -89,8 +89,8 @@ library HELPER { return keccak256(abi.encode(roleId)); } - function GENERATOR_FAMILY_ID(uint256 marketId) internal pure returns (bytes32) { - return keccak256(abi.encode("gen", marketId)); + function PROVER_FAMILY_ID(uint256 marketId) internal pure returns (bytes32) { + return keccak256(abi.encode("prov", marketId)); } function IVS_FAMILY_ID(uint256 marketId) internal pure returns (bytes32) { @@ -100,17 +100,4 @@ library HELPER { bytes32 internal constant NO_ENCLAVE_ID = 0xcd2e66bf0b91eeedc6c648ae9335a78d7c9a4ab0ef33612a824d91cdc68a4f21; uint256 internal constant ACCEPTABLE_ATTESTATION_DELAY = 60000; // 60 seconds, 60,000 milliseconds - - function blockNumber() internal view returns (uint256) { - // return ArbSys(100).arbBlockNumber(); - return block.number; - } -} - -interface ArbSys { - /** - * @notice Get Arbitrum block number (distinct from L1 block number; Arbitrum genesis block has block number 0) - * @return block number as int - */ - function arbBlockNumber() external view returns (uint256); } diff --git a/contracts/lib/Struct.sol b/contracts/lib/Struct.sol new file mode 100644 index 0000000..43b8d83 --- /dev/null +++ b/contracts/lib/Struct.sol @@ -0,0 +1,131 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.26; + +import {Enum} from "./Enum.sol"; + +library Struct { + + /*=========================== Proof Marketplace =============================*/ + struct Market { + address verifier; // verifier address for the market place + bytes32 proverImageId; // use bytes32(0) for public market + bytes32 ivsImageId; + address creator; + bytes marketmetadata; + } + struct Bid { + uint256 marketId; + uint256 reward; + uint256 expiry; // block.timestamp by which the bid should be assigned by matching engine + uint256 timeForProofGeneration; + uint256 deadline; + address refundAddress; + bytes proverData; + } + + struct BidWithState { + Bid bid; + Enum.BidState state; + address requester; + address prover; + } + + struct TaskInfo { + address requester; + address prover; + uint256 feePaid; + uint256 deadline; + } + + /*========================= Prover Registry =========================*/ + + struct Prover { + address rewardAddress; + uint256 sumOfComputeAllocations; + uint256 computeConsumed; + uint256 activeMarketplaces; + uint256 declaredCompute; + uint256 intendedComputeUtilization; + bytes proverData; + } + + struct ProverInfoPerMarket { + Enum.ProverState state; + uint256 computePerRequestRequired; + uint256 commission; + uint256 proofGenerationCost; + uint256 proposedTime; + uint256 activeRequests; + } + + /*========================= Staking Manager ===========================*/ + + struct PoolConfig { + uint256 rewardShare; + bool enabled; + } + + /*=========================== Staking Pool ============================*/ + + struct PoolLockInfo { + address token; + uint256 amount; + address transmitter; + } + + /*========================== Native Staking ===========================*/ + + struct NativeStakingLock { + address token; + uint256 amount; + } + + struct TaskSlashed { + uint256 bidId; + address prover; + address rewardAddress; + } + + struct WithdrawalRequest { + address stakeToken; + uint256 amount; + uint256 withdrawalTime; + } + + /*========================= Symbiotic Staking =========================*/ + + struct VaultSnapshot { + address prover; + address vault; + address stakeToken; + uint256 stakeAmount; + } + + struct SnapshotTxCountInfo { + uint256 idxToSubmit; // idx of pratial snapshot tx to submit + uint256 numOfTxs; // total number of txs for the snapshot + } + + struct CaptureTimestampInfo { + uint256 blockNumber; // L1 Block Number for parsing slash result + address transmitter; + } + + struct ConfirmedTimestamp { + uint256 captureTimestamp; + uint256 blockNumber; // L1 Block Number for parsing slash result + address transmitter; + uint256 transmitterComissionRate; + } + + struct SymbioticStakingLock { + address stakeToken; + uint256 amount; + } + + struct EnclaveImage { + bytes PCR0; + bytes PCR1; + bytes PCR2; + } +} \ No newline at end of file diff --git a/contracts/mock/MockAttestationVerifier.sol b/contracts/mock/MockAttestationVerifier.sol index e5c47cb..f5cc3c9 100644 --- a/contracts/mock/MockAttestationVerifier.sol +++ b/contracts/mock/MockAttestationVerifier.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.26; import "../periphery/interfaces/IAttestationVerifier.sol"; diff --git a/contracts/mock/MockToken.sol b/contracts/mock/MockToken.sol index 0fe14e5..689258a 100644 --- a/contracts/mock/MockToken.sol +++ b/contracts/mock/MockToken.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.26; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; diff --git a/contracts/mock/MockVerifier.sol b/contracts/mock/MockVerifier.sol index 964f2a3..69dc258 100644 --- a/contracts/mock/MockVerifier.sol +++ b/contracts/mock/MockVerifier.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.26; import "../interfaces/IVerifier.sol"; diff --git a/contracts/mock/POND.sol b/contracts/mock/POND.sol new file mode 100644 index 0000000..5b48bf1 --- /dev/null +++ b/contracts/mock/POND.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.26; + +import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +contract POND is ERC20 { + + uint256 constant INITIAL_SUPPLY = 100_000_000 ether; + + constructor(address admin) ERC20("POND", "POND") { + _mint(admin, INITIAL_SUPPLY); + } + + function mint(address to, uint256 amount) external { + _mint(to, amount); + } +} diff --git a/contracts/mock/UC.sol b/contracts/mock/UC.sol index baeef55..0416bfa 100644 --- a/contracts/mock/UC.sol +++ b/contracts/mock/UC.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.26; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; diff --git a/contracts/mock/UCNew.sol b/contracts/mock/UCNew.sol index 5320ae0..383bfd2 100644 --- a/contracts/mock/UCNew.sol +++ b/contracts/mock/UCNew.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.26; import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol"; import "./UC.sol"; diff --git a/contracts/mock/UC_Rekt.sol b/contracts/mock/UC_Rekt.sol index a0eb2cc..6b6f9d8 100644 --- a/contracts/mock/UC_Rekt.sol +++ b/contracts/mock/UC_Rekt.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.26; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; diff --git a/contracts/mock/USDC.sol b/contracts/mock/USDC.sol new file mode 100644 index 0000000..72dc2ff --- /dev/null +++ b/contracts/mock/USDC.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.26; + +import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +contract USDC is ERC20 { + + uint256 constant INITIAL_SUPPLY = 100_000_000 ether; + + constructor(address admin) ERC20("USDC", "USDC") { + _mint(admin, INITIAL_SUPPLY); + } + + function mint(address to, uint256 amount) external { + _mint(to, amount); + } +} diff --git a/contracts/mock/WETH.sol b/contracts/mock/WETH.sol new file mode 100644 index 0000000..185083b --- /dev/null +++ b/contracts/mock/WETH.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.26; + +import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +contract WETH is ERC20 { + + uint256 constant INITIAL_SUPPLY = 100_000_000 ether; + + constructor(address admin) ERC20("WETH", "WETH") { + _mint(admin, INITIAL_SUPPLY); + } + + function mint(address to, uint256 amount) external { + _mint(to, amount); + } +} diff --git a/contracts/mock/binding_generator.sol b/contracts/mock/binding_generator.sol new file mode 100644 index 0000000..84770f1 --- /dev/null +++ b/contracts/mock/binding_generator.sol @@ -0,0 +1,14 @@ +// // SPDX-License-Identifier: MIT + +// pragma solidity 0.8.26; + +// import "./EntityKeyRegistry.sol"; +// import "./ProverManager.sol"; +// import "./ProofMarketplace.sol"; +// import "./staking/l2_contracts/NativeStaking.sol"; +// import "./staking/l2_contracts/StakingManager.sol"; +// import "./staking/l2_contracts/SymbioticStaking.sol"; + +// contract binding_prover { + +// } \ No newline at end of file diff --git a/contracts/mock/staking/InstantSlasherMock.sol b/contracts/mock/staking/InstantSlasherMock.sol new file mode 100644 index 0000000..ce47c1e --- /dev/null +++ b/contracts/mock/staking/InstantSlasherMock.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "../../interfaces/staking/symbiotic/IInstantSlasher.sol"; + +contract InstantSlasherMock is IInstantSlasher { + address private _vault; + + event InstantSlashExecuted(bytes32 subnetwork, address operator, uint256 amount, uint48 captureTimestamp, bytes hints); + + constructor(address vault) { + _vault = vault; + } + + function vault() external view override returns (address) { + return _vault; + } + + function slash( + bytes32 subnetwork, + address operator, + uint256 amount, + uint48 captureTimestamp, + bytes calldata hints + ) external override { + emit InstantSlashExecuted(subnetwork, operator, amount, captureTimestamp, hints); + } +} \ No newline at end of file diff --git a/contracts/mock/staking/MockCollateralToken.sol b/contracts/mock/staking/MockCollateralToken.sol new file mode 100644 index 0000000..514845c --- /dev/null +++ b/contracts/mock/staking/MockCollateralToken.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +contract OpenMintToken is ERC20 { + constructor() ERC20("Open Mint Token", "OMT") {} + + function mint(uint256 amount) public { + _mint(msg.sender, amount); + } +} \ No newline at end of file diff --git a/contracts/mock/staking/VaultMock.sol b/contracts/mock/staking/VaultMock.sol new file mode 100644 index 0000000..77c470b --- /dev/null +++ b/contracts/mock/staking/VaultMock.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "../../interfaces/staking/symbiotic/IVault.sol"; + +contract VaultMock is IVault { + address private _collateral; + address private _slasher; + + constructor(address collateral) { + _collateral = collateral; + } + + function setSlasher(address slasher) external { + _slasher = slasher; + } + + function slasher() external view override returns (address) { + return _slasher; + } + + function collateral() external view override returns (address) { + return _collateral; + } +} \ No newline at end of file diff --git a/contracts/mock/staking/VetoSlasherMock.sol b/contracts/mock/staking/VetoSlasherMock.sol new file mode 100644 index 0000000..b0a40ef --- /dev/null +++ b/contracts/mock/staking/VetoSlasherMock.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "../../interfaces/staking/symbiotic/IVetoSlasher.sol"; + +contract VetoSlasherMock is IVetoSlasher { + event VetoSlashRequestPlaced(bytes32 subnetwork, address operator, uint256 amount, uint48 captureTimestamp, bytes hints); + event VetoSlashExecuted(uint256 slashIndex, bytes hints); + + function requestSlash( + bytes32 subnetwork, + address operator, + uint256 amount, + uint48 captureTimestamp, + bytes calldata hints + ) external override { + emit VetoSlashRequestPlaced(subnetwork, operator, amount, captureTimestamp, hints); + } + + function executeSlash( + uint256 slashIndex, + bytes calldata hints + ) external override { + emit VetoSlashExecuted(slashIndex, hints); + } +} \ No newline at end of file diff --git a/contracts/periphery/.DS_Store b/contracts/periphery/.DS_Store deleted file mode 100644 index 150f68c..0000000 Binary files a/contracts/periphery/.DS_Store and /dev/null differ diff --git a/contracts/periphery/AttestationAuther.sol b/contracts/periphery/AttestationAuther.sol index 1913f33..40bf9db 100644 --- a/contracts/periphery/AttestationAuther.sol +++ b/contracts/periphery/AttestationAuther.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.26; import "./interfaces/IAttestationVerifier.sol"; diff --git a/contracts/periphery/AttestationAutherUpgradeable.sol b/contracts/periphery/AttestationAutherUpgradeable.sol index fcc30a9..bac8f0c 100644 --- a/contracts/periphery/AttestationAutherUpgradeable.sol +++ b/contracts/periphery/AttestationAutherUpgradeable.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.26; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "./interfaces/IAttestationVerifier.sol"; diff --git a/contracts/periphery/AttestationVerifier.sol b/contracts/periphery/AttestationVerifier.sol index 1f6234e..c14df15 100644 --- a/contracts/periphery/AttestationVerifier.sol +++ b/contracts/periphery/AttestationVerifier.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.26; import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; diff --git a/contracts/periphery/InputAndProofFormatRegistry.sol b/contracts/periphery/InputAndProofFormatRegistry.sol index 6a3542d..baf4379 100644 --- a/contracts/periphery/InputAndProofFormatRegistry.sol +++ b/contracts/periphery/InputAndProofFormatRegistry.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.26; /// This is an optional contract that will store the format of inputs and proofs of circuits /// which can be read by external tools diff --git a/contracts/periphery/PriorityLog.sol b/contracts/periphery/PriorityLog.sol index 7608954..ff4fac8 100644 --- a/contracts/periphery/PriorityLog.sol +++ b/contracts/periphery/PriorityLog.sol @@ -1,22 +1,15 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.26; -// import "./interfaces/IPriorityLog.sol"; +import {Enum} from "../lib/Enum.sol"; /// Optional contract to be used by request creator where /// he can set on what priority his requests should be processed by matching engine contract PriorityLog { - enum Priority { - NONE, - COST, - TIME, - DEADLINE - } - - mapping(address => Priority) public priorityStore; + mapping(address => Enum.Priority) public priorityStore; - function setPriority(Priority priority) external { + function setPriority(Enum.Priority priority) external { address _msgSender = msg.sender; priorityStore[_msgSender] = priority; } diff --git a/contracts/periphery/interfaces/IAttestationVerifier.sol b/contracts/periphery/interfaces/IAttestationVerifier.sol index fe145b9..1197b26 100644 --- a/contracts/periphery/interfaces/IAttestationVerifier.sol +++ b/contracts/periphery/interfaces/IAttestationVerifier.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.26; interface IAttestationVerifier { struct Attestation { diff --git a/contracts/staking/Middleware/Middleware.sol b/contracts/staking/Middleware/Middleware.sol new file mode 100644 index 0000000..d023078 --- /dev/null +++ b/contracts/staking/Middleware/Middleware.sol @@ -0,0 +1,464 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/access/extensions/AccessControlEnumerableUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; + +import "../../interfaces/staking/symbiotic/IVetoSlasher.sol"; +import "../../interfaces/staking/symbiotic/IInstantSlasher.sol"; +import "../../interfaces/staking/symbiotic/IVault.sol"; +import "../../periphery/interfaces/IAttestationVerifier.sol"; + +contract Middleware is Initializable, // initializer + ContextUpgradeable, // _msgSender, _msgData + ERC165Upgradeable, // supportsInterface + AccessControlUpgradeable, // RBAC + AccessControlEnumerableUpgradeable, // RBAC enumeration + UUPSUpgradeable // public upgrade +{ + // in case we add more contracts in the inheritance chain + uint256[500] private __gap_0; + + /// @custom:oz-upgrades-unsafe-allow constructor + // initializes the logic contract without any admins + // safeguard against takeover of the logic contract + constructor() + initializer {} + + /** + * @dev Modifier to restrict access to only admins. + */ + modifier onlyAdmin() { + require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "only admin"); + _; + } + +//-------------------------------- Overrides start --------------------------------// + + /** + * @dev See {IERC165-supportsInterface}. + * @param interfaceId The interface identifier. + * @return True if the contract supports the given interface. + */ + function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, AccessControlUpgradeable, AccessControlEnumerableUpgradeable) returns (bool) { + return super.supportsInterface(interfaceId); + } + + /** + * @dev Grants `role` to `account`. + * @param role The role identifier. + * @param account The account to grant the role to. + */ + function _grantRole(bytes32 role, address account) internal virtual override(AccessControlUpgradeable, AccessControlEnumerableUpgradeable) returns(bool) { + return super._grantRole(role, account); + } + + /** + * @dev Revokes `role` from `account`. + * @param role The role identifier. + * @param account The account to revoke the role from. + */ + function _revokeRole(bytes32 role, address account) internal virtual override(AccessControlUpgradeable, AccessControlEnumerableUpgradeable) returns(bool) { + bool status = super._revokeRole(role, account); + + // protect against accidentally removing all admins + require(getRoleMemberCount(DEFAULT_ADMIN_ROLE) != 0, "M:RR-All admins cant be removed"); + + return status; + } + + /** + * @dev Authorizes an upgrade to the new implementation. + */ + function _authorizeUpgrade(address /*account*/) onlyAdmin internal view override {} + +//-------------------------------- Overrides end --------------------------------// + +//-------------------------------- Initializer start --------------------------------// + + /** + * @dev Initializes the contract with the given parameters. + * @param _networkId The network identifier that Middleware represents. + * @param _attestationVerifier The address of the attestation verifier contract. + * @param _admin The address of the admin. + */ + function initialize(bytes32 _networkId, address _attestationVerifier, address _admin) external initializer { + require(_networkId != bytes32(0), "M:I-Network id cannot be zero"); + require(_attestationVerifier != address(0), "M:I-Attestation verifier cannot be zero address"); + require(_admin != address(0), "M:I-At least one admin necessary"); + + __Context_init_unchained(); + __ERC165_init_unchained(); + __AccessControl_init_unchained(); + __AccessControlEnumerable_init_unchained(); + __UUPSUpgradeable_init_unchained(); + + _grantRole(DEFAULT_ADMIN_ROLE, _admin); + _revokeRole(DEFAULT_ADMIN_ROLE, msg.sender); + + _updateNetworkId(_networkId); + _updateAttestationVerifier(_attestationVerifier); + + _setSlashingEnabled(false); + } + +//-------------------------------- Initializer start --------------------------------// + +//-------------------------------- Slashing config start --------------------------------// + + /** + * @dev Enumeration for slasher types. + */ + enum SlasherType {UNDEFINED, NO_SLASH, INSTANT_SLASH, VETO_SLASH} + + /** + * @dev Struct to hold vault information. + */ + struct VaultInfo { + uint80 index; + SlasherType slasherType; + address collateral; + address slasher; + } + + /** + * @dev Struct to hold slash information. + */ + struct SlashInfo { + address operator; + uint256 amount; + uint256 captureTimestamp; + address rewardAddress; + } + + bytes32 public constant VAULT_CONFIG_SET_ROLE = keccak256("VAULT_CONFIG_SET_ROLE"); + bytes32 public constant MIDDLEWARE_CONFIG_SET_ROLE = keccak256("MIDDLEWARE_CONFIG_SET_ROLE"); + uint256 private constant SIGNATURE_LENGTH = 65; + uint256 private constant PUBLIC_KEY_LENGTH = 64; + + bytes32 public networkId; + address public attestationVerifier; + mapping(address vault => VaultInfo) public vaultInfo; + mapping(address vault => mapping(uint256 jobId => SlashInfo)) public slashInfo; + address[] public vaults; + mapping(address operator => address delegate) delegates; + bool public isSlashingEnabled; + + uint256[500] private __gap_1; + + /** + * @dev Emitted when the network ID is updated. + * @param networkId The new network ID. + */ + event NetworkIdUpdated(bytes32 indexed networkId); + + /** + * @dev Emitted when the attestation verifier contract address is updated. + * @param attestationVerifier The address of the attestation verifier contract. + */ + event AttestationVerifierUpdated(address indexed attestationVerifier); + + /** + * @dev Emitted when vault information is configured in Middleware. + * @param vault The address of the vault. + * @param collateral The address of the collateral used in the vault. + * @param slasherType The type of slasher configured for the vault. + */ + event VaultConfigured(address indexed vault, address indexed collateral, SlasherType indexed slasherType); + + /** + * @dev Emitted when a slash is proposed. + * @param jobId The job identifier. + * @param vault The address of the vault. + * @param operator The address of the operator. + * @param amount The amount to slash. + * @param captureTimestamp The timestamp when the stake used for slashing was captured. + * @param rewardAddress The address to receive the reward for transmitting the slash to Symbiotic contracts. + */ + event SlashProposed(uint256 indexed jobId, address indexed vault, address indexed operator, uint256 amount, uint256 captureTimestamp, address rewardAddress); + + /** + * @dev Emitted when a delegate is set for an operator. + * @param operator The address of the operator. + * @param delegate The address of the delegate. + */ + event DelegateSet(address indexed operator, address indexed delegate); + + /** + * @dev Emitted when slashing is enabled or disabled. + * @param isEnabled True if slashing is enabled, false otherwise. + */ + event SlashingEnabled(bool isEnabled); + + /** + * @dev Enables or disables slashing. + * @param _isEnabled True to enable slashing, false to disable. + */ + function setSlashingEnabled(bool _isEnabled) external onlyAdmin() { + _setSlashingEnabled(_isEnabled); + } + + /** + * @dev Internal function to enable or disable slashing. + * @param _isEnabled True to enable slashing, false to disable. + */ + function _setSlashingEnabled(bool _isEnabled) internal { + isSlashingEnabled = _isEnabled; + emit SlashingEnabled(_isEnabled); + } + + /** + * @dev Sets a delegate for an operator. + * @param _delegate The address of the delegate. + */ + function setDelegate(address _delegate) external { + require(_delegate != address(0), "M:SD-Delegate cannot be zero address"); + address _operator = _msgSender(); + delegates[_operator] = _delegate; + + emit DelegateSet(_operator, _delegate); + } + + /** + * @dev Returns the delegate for an operator. + * @param _operator The address of the operator. + * @return The address of the delegate. + */ + function getDelegate(address _operator) external view returns (address) { + if(delegates[_operator] == address(0)) { + return _operator; + } + return delegates[_operator]; + } + + /** + * @dev Configures a vault with the given slasher type. It is possible to override the existing configuration for a vault. + * @param _vault The address of the vault. + * @param _type The slasher type. + */ + function configureVault(address _vault, SlasherType _type) external onlyRole(VAULT_CONFIG_SET_ROLE) { + require(_vault != address(0), "M:CV-Vault cannot be zero address"); + require(_type != SlasherType(0), "M:CV-Invalid slasher type"); + + address collateral = IVault(_vault).collateral(); + require(collateral != address(0), "M:CV-Collateral cannot be zero address"); + address slasher = IVault(_vault).slasher(); + if(_type == SlasherType.NO_SLASH) { + require(slasher == address(0), "M:CV-Slasher not allowed for NO_SLASH"); + } else { + require(slasher != address(0), "M:CV-Slasher cannot be zero address"); + } + if(vaultInfo[_vault].collateral == address(0)) { + // Add the vault to the list if it is not already present + vaults.push(_vault); + } + vaultInfo[_vault] = VaultInfo(uint80(vaults.length), _type, collateral, slasher); + + emit VaultConfigured(_vault, collateral, _type); + } + + /** + * @dev Removes the configuration for a vault. + * @param _vault The address of the vault. + */ + function removeVault(address _vault) external onlyRole(VAULT_CONFIG_SET_ROLE) { + require(_vault != address(0), "M:RV-Vault cannot be zero address"); + require(vaultInfo[_vault].collateral != address(0), "M:RV-Vault not configured"); + + delete vaultInfo[_vault]; + for(uint256 i = 0; i < vaults.length; i++) { + if(vaults[i] == _vault) { + vaults[i] = vaults[vaults.length - 1]; + vaults.pop(); + break; + } + } + + emit VaultConfigured(_vault, address(0), SlasherType.UNDEFINED); + } + + /** + * @dev Updates the network ID. + * @param _networkId The new network ID. + */ + function updateNetworkId(bytes32 _networkId) external onlyRole(MIDDLEWARE_CONFIG_SET_ROLE) { + _updateNetworkId(_networkId); + } + + /** + * @dev Internal function to update the network ID. + * @param _networkId The new network ID. + */ + function _updateNetworkId(bytes32 _networkId) internal { + require(_networkId != bytes32(0), "M:UN-Network id cannot be zero"); + networkId = _networkId; + emit NetworkIdUpdated(_networkId); + } + + /** + * @dev Updates the attestation verifier contract address. + * @param _attestationVerifier The address of the attestation verifier contract. + */ + function updateAttestationVerifier(address _attestationVerifier) external onlyRole(MIDDLEWARE_CONFIG_SET_ROLE) { + _updateAttestationVerifier(_attestationVerifier); + } + + /** + * @dev Internal function to update the attestation verifier contract address. + * @param _attestationVerifier The address of the attestation verifier contract. + */ + function _updateAttestationVerifier(address _attestationVerifier) internal { + require(_attestationVerifier != address(0), "M:UAV-Attestation verifier cannot be zero address"); + attestationVerifier = _attestationVerifier; + emit AttestationVerifierUpdated(_attestationVerifier); + } + +//-------------------------------- Slashing config end --------------------------------// + +//-------------------------------- Instant Slashing start --------------------------------// + + /** + * @dev Performs an instant slash on an operator for a vault. + * @param _jobId The job identifier. + * @param _rewardAddress The address for transmitter to receive the reward. + * @param _vault The address of the vault. + * @param _operator The address of the operator. + * @param _amount The amount to slash. + * @param _captureTimestamp The timestamp when the stake used for slashing was captured. + * @param _hints Additional hints to optimize search. + * @param _proof The proof that slashing was invoked on Kalypso contracts with the given parameters. + */ + function slash( + uint256 _jobId, + address _rewardAddress, + address _vault, + address _operator, + uint256 _amount, + uint48 _captureTimestamp, + bytes calldata _hints, + bytes calldata _proof + ) external { + require(isSlashingEnabled, "M:S-Slashing disabled"); + require(vaultInfo[_vault].slasherType == SlasherType.INSTANT_SLASH, "M:S-Invalid slasher type"); + require(_amount != 0, "M:S-Invalid amount"); + require(slashInfo[_vault][_jobId].amount == 0, "M:S-Already slashed"); + + _verifyProof(abi.encode(_jobId, _rewardAddress, _vault, _operator, _amount, _captureTimestamp), _proof); + + slashInfo[_vault][_jobId] = SlashInfo(_operator, _amount, _captureTimestamp, _rewardAddress); + + IInstantSlasher(vaultInfo[_vault].slasher).slash(networkId, _operator, _amount, _captureTimestamp, _hints); + + emit SlashProposed(_jobId, _vault, _operator, _amount, _captureTimestamp, _rewardAddress); + } + +//-------------------------------- Instant Slashing end --------------------------------// + +//-------------------------------- Veto Slashing start --------------------------------// + + /** + * @dev Requests a slash on an operator from a vault, subject to veto period. + * @param _jobId The job identifier. + * @param _rewardAddress The address to receive the reward. + * @param _vault The address of the vault. + * @param _operator The address of the operator. + * @param _amount The amount to slash. + * @param _captureTimestamp The timestamp when the stake used for slashing was captured. + * @param _hints Additional hints to optimize search. + * @param _proof The proof that slashing was invoked on Kalypso contracts with the given parameters. + */ + function requestSlash( + uint256 _jobId, + address _rewardAddress, + address _vault, + address _operator, + uint256 _amount, + uint48 _captureTimestamp, + bytes calldata _hints, + bytes calldata _proof + ) external { + require(isSlashingEnabled, "M:S-Slashing disabled"); + require(vaultInfo[_vault].slasherType == SlasherType.VETO_SLASH, "M:RS-Invalid slasher type"); + require(_amount != 0, "M:RS-Invalid amount"); + require(slashInfo[_vault][_jobId].amount == 0, "M:RS-Already slashed"); + + _verifyProof(abi.encode(_jobId, _rewardAddress, _vault, _operator, _amount, _captureTimestamp), _proof); + + slashInfo[_vault][_jobId] = SlashInfo(_operator, _amount, _captureTimestamp, _rewardAddress); + + IVetoSlasher(vaultInfo[_vault].slasher).requestSlash(networkId, _operator, _amount, _captureTimestamp, _hints); + + emit SlashProposed(_jobId, _vault, _operator, _amount, _captureTimestamp, _rewardAddress); + } + +//-------------------------------- Veto Slashing end --------------------------------// + +//-------------------------------- Slashing utils start --------------------------------// + + /** + * @dev Internal function to verify the proof. + * The function performs the following steps: + * - Decodes the proof into the signature and attestation data. + * - Verifies the signature over the provided data using the enclave key. + * - Verifies the attestation to ensure the enclave key is valid. + * - Ensures the enclave key used to sign the data matches the one in the attestation. + * @param _data The parameters used for slashing. + * @param _proof The proof that contains the signature on the parameters used for slashing and + attestation data which proves that the key used for signing is securely generated within the enclave. + */ + function _verifyProof(bytes memory _data, bytes memory _proof) internal view { + (bytes memory _signature, bytes memory _attestationData) = abi.decode(_proof, (bytes, bytes)); + require(_signature.length == SIGNATURE_LENGTH, "M:VP-Signature length mismatch"); + address _enclaveKey = ECDSA.recover(MessageHashUtils.toEthSignedMessageHash(keccak256(_data)), _signature); + + (bytes memory attestationSig, IAttestationVerifier.Attestation memory attestation) = abi.decode( + _attestationData, + (bytes, IAttestationVerifier.Attestation) + ); + IAttestationVerifier(attestationVerifier).verify(attestationSig, attestation); + + address _verifiedKey = _pubKeyToAddress(attestation.enclavePubKey); + require(_verifiedKey == _enclaveKey, "M:VP-Enclave key mismatch"); + } + + /** + * @dev Internal function to convert a public key to an address. + * @param publicKey The public key bytes. + * @return The address derived from the public key. + */ + function _pubKeyToAddress(bytes memory publicKey) internal pure returns (address) { + require(publicKey.length == PUBLIC_KEY_LENGTH, "M:IPTA-Invalid enclave key"); + + bytes32 hash = keccak256(publicKey); + return address(uint160(uint256(hash))); + } + +//-------------------------------- Slashing utils end --------------------------------// + +//-------------------------------- utils start --------------------------------// + + /** + * @dev Returns the list of vault addresses. + * @return An array of vault addresses. + */ + function getVaults() external view returns (address[] memory) { + return vaults; + } + + /** + * @dev Returns the number of vaults. + * @return The number of vaults. + */ + function getNoOfVaults() external view returns (uint256) { + return vaults.length; + } + +//-------------------------------- utils end --------------------------------// +} \ No newline at end of file diff --git a/contracts/staking/Middleware/MiddlewareFactory.sol b/contracts/staking/Middleware/MiddlewareFactory.sol new file mode 100644 index 0000000..65b21cc --- /dev/null +++ b/contracts/staking/Middleware/MiddlewareFactory.sol @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; + +contract MiddlewareFactory is Ownable { + /// @dev Address of the Middleware implementation contract. + address public implementation; + + /// @dev Emitted when a new Middleware proxy is deployed. + /// @param proxyAddress The address of the deployed proxy contract. + /// @param admin The admin address for the new contract. + event ContractDeployed(address indexed proxyAddress, address indexed admin); + + /** + * @dev Constructor sets the implementation address. + * @param _implementation The address of the Middleware implementation contract. + */ + constructor(address owner, address _implementation) Ownable(owner) { + require(_implementation != address(0), "Factory: Implementation address cannot be zero"); + implementation = _implementation; + } + + /** + * @dev Deploys and initializes a new Middleware proxy contract. + * @param _networkId The network identifier. + * @param _attestationVerifier The address of the attestation verifier contract. + * @param _admin The address of the admin for the new contract. + * @return proxyAddress The address of the newly deployed proxy contract. + */ + function deployMiddleware( + bytes32 _networkId, + address _attestationVerifier, + address _admin + ) external returns (address proxyAddress) { + require(_admin != address(0), "Factory: Admin address cannot be zero"); + require(_attestationVerifier != address(0), "Factory: Attestation verifier address cannot be zero"); + + // Encode the initialize function call with parameters + bytes memory initializeData = abi.encodeWithSignature( + "initialize(bytes32,address,address)", + _networkId, + _attestationVerifier, + _admin + ); + + // Deploy a new proxy contract pointing to the implementation + ERC1967Proxy proxy = new ERC1967Proxy( + implementation, + initializeData + ); + + proxyAddress = address(proxy); + + emit ContractDeployed(proxyAddress, _admin); + } + + /** + * @dev Updates the implementation address. + * @param _newImplementation The address of the new implementation contract. + */ + function updateImplementation(address _newImplementation) external onlyOwner { + require(_newImplementation != address(0), "Factory: Implementation address cannot be zero"); + implementation = _newImplementation; + } +} \ No newline at end of file diff --git a/contracts/staking/l2_contracts/NativeStaking.sol b/contracts/staking/l2_contracts/NativeStaking.sol new file mode 100644 index 0000000..c3a8d11 --- /dev/null +++ b/contracts/staking/l2_contracts/NativeStaking.sol @@ -0,0 +1,361 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.26; + +/* Contracts */ +import {AccessControlUpgradeable} from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; +import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import {PausableUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol"; +import {ReentrancyGuardUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol"; + + +/* Interfaces */ +import {INativeStaking} from "../../interfaces/staking/INativeStaking.sol"; +import {ISymbioticStaking} from "../../interfaces/staking/ISymbioticStaking.sol"; + +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +/* Libraries */ +import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; +import {Struct} from "../../lib/Struct.sol"; +import {Error} from "../../lib/Error.sol"; + +contract NativeStaking is AccessControlUpgradeable, ReentrancyGuardUpgradeable, PausableUpgradeable, UUPSUpgradeable, INativeStaking { + using EnumerableSet for EnumerableSet.AddressSet; + using SafeERC20 for IERC20; + + bytes32 public constant STAKING_MANAGER_ROLE = keccak256("STAKING_MANAGER_ROLE"); // 0xa6b5d83d32632203555cb9b2c2f68a8d94da48cadd9266ac0d17babedb52ea5b + + //---------------------------------------- State Variable start ----------------------------------------// + + uint256[500] private __gap_0; + + EnumerableSet.AddressSet private stakeTokenSet; + address public rewardDistributor; + + /* Config */ + uint256 public withdrawalDuration; + uint256 public stakeTokenSelectionWeightSum; + + mapping(address stakeToken => uint256 lockAmount) public amountToLock; // amount of token to lock for each task assignment + mapping(address stakeToken => uint256 weight) public stakeTokenSelectionWeight; + + /* Stake */ + // staked amount for each account + mapping(address stakeToken => mapping(address account => mapping(address prover => uint256 amount))) public + stakeAmounts; + // total staked amounts for each prover + mapping(address stakeToken => mapping(address prover => uint256 amount)) public proverstakeAmounts; + + mapping(address account => mapping(address prover => Struct.WithdrawalRequest[] withdrawalRequest)) public + withdrawalRequests; + + /* Locked Stakes */ + mapping(uint256 bi => Struct.NativeStakingLock lock) public lockInfo; + mapping(address stakeToken => mapping(address prover => uint256 amount)) public proverLockedAmounts; + + uint256[500] private __gap_1; + + //---------------------------------------- State Variable end ----------------------------------------// + + //---------------------------------------- Modifier start ----------------------------------------// + + modifier onlySupportedToken(address _stakeToken) { + require(isSupportedStakeToken(_stakeToken), Error.TokenNotSupported()); + _; + } + + //---------------------------------------- Modifier end ----------------------------------------// + + //---------------------------------------- Init start ----------------------------------------// + + /// @custom:oz-upgrades-unsafe-allow constructor + constructor() { + _disableInitializers(); + } + + function initialize(address _admin, address _stakingManager, uint256 _withdrawalDuration) + public + initializer + { + __Context_init_unchained(); + __ERC165_init_unchained(); + __AccessControl_init_unchained(); + __UUPSUpgradeable_init_unchained(); + __Pausable_init_unchained(); + + require(_admin != address(0), Error.InvalidAdmin()); + _grantRole(DEFAULT_ADMIN_ROLE, _admin); + + require(_stakingManager != address(0), Error.InvalidStakingManager()); + _grantRole(STAKING_MANAGER_ROLE, _stakingManager); + + _setWithdrawalDuration(_withdrawalDuration); + } + + //---------------------------------------- Init end ----------------------------------------// + + //---------------------------------------- Stake/Unstake start ----------------------------------------// + + function stake(address _stakeToken, address _prover, uint256 _amount) + external + onlySupportedToken(_stakeToken) + whenNotPaused + nonReentrant + { + // this check can be removed in the future to allow delegatedStake + require(_msgSender() == _prover, Error.OnlyProverCanStake()); + + IERC20(_stakeToken).safeTransferFrom(_msgSender(), address(this), _amount); + + stakeAmounts[_stakeToken][_msgSender()][_prover] += _amount; + proverstakeAmounts[_stakeToken][_prover] += _amount; + + emit Staked(_msgSender(), _prover, _stakeToken, _amount); + } + + function requestStakeWithdrawal(address _prover, address _stakeToken, uint256 _amount) external whenNotPaused nonReentrant { + require(getProverActiveStakeAmount(_stakeToken, _prover) >= _amount, Error.InsufficientStakeAmount()); + require(_amount > 0, Error.ZeroAmount()); + + stakeAmounts[_stakeToken][_msgSender()][_prover] -= _amount; + proverstakeAmounts[_stakeToken][_prover] -= _amount; + + withdrawalRequests[_msgSender()][_prover].push( + Struct.WithdrawalRequest(_stakeToken, _amount, block.timestamp + withdrawalDuration) + ); + + uint256 index = withdrawalRequests[_msgSender()][_prover].length - 1; + + emit StakeWithdrawalRequested(_msgSender(), _prover, _stakeToken, index, _amount); + } + + function withdrawStake(address _prover, uint256[] calldata _index) external whenNotPaused nonReentrant { + // TODO: _msgSender() should be claim address of the prover later + require(_msgSender() == _prover, Error.OnlyProverCanWithdrawStake()); + require(_index.length > 0, Error.InvalidIndexLength()); + + for (uint256 i = 0; i < _index.length; i++) { + Struct.WithdrawalRequest memory request = withdrawalRequests[_msgSender()][_prover][_index[i]]; + + require(request.withdrawalTime <= block.timestamp, Error.WithdrawalTimeNotReached()); + + require(request.amount > 0, Error.InvalidWithdrawalAmount()); + + delete withdrawalRequests[_msgSender()][_prover][_index[i]]; + + IERC20(request.stakeToken).safeTransfer(_msgSender(), request.amount); + + emit StakeWithdrawn(_msgSender(), _prover, request.stakeToken, _index[i], request.amount); + } + } + + //---------------------------------------- STAKING_MANAGER_ROLE start ----------------------------------------// + + function lockStake(uint256 _bidId, address _prover) external onlyRole(STAKING_MANAGER_ROLE) { + address _stakeToken = _selectStakeToken(_prover); + uint256 _amountToLock = amountToLock[_stakeToken]; + require(getProverActiveStakeAmount(_stakeToken, _prover) >= _amountToLock, Error.InsufficientStakeAmount()); + + // lock stake + lockInfo[_bidId] = Struct.NativeStakingLock(_stakeToken, _amountToLock); + proverLockedAmounts[_stakeToken][_prover] += _amountToLock; + + emit StakeLocked(_bidId, _prover, _stakeToken, _amountToLock); + } + + /// @notice unlock stake and distribute reward + /// @dev called by StakingManager when assigned task is completed + function onTaskCompletion(uint256 _bidId, address _prover, uint256 /* _feeRewardAmount */ ) + external + onlyRole(STAKING_MANAGER_ROLE) + { + Struct.NativeStakingLock memory lock = lockInfo[_bidId]; + + if (lock.amount == 0) return; + + _unlockStake(_bidId, lock.token, _prover, lock.amount); + + emit StakeUnlocked(_bidId, _prover, lock.token, lock.amount); + } + + function slash(Struct.TaskSlashed[] calldata _slashedTasks) external onlyRole(STAKING_MANAGER_ROLE) { + uint256 len = _slashedTasks.length; + for (uint256 i = 0; i < len; i++) { + Struct.NativeStakingLock memory lock = lockInfo[_slashedTasks[i].bidId]; + + uint256 lockedAmount = lock.amount; + if (lockedAmount == 0) continue; // if already slashed + + _unlockStake(_slashedTasks[i].bidId, lock.token, _slashedTasks[i].prover, lockedAmount); + IERC20(lock.token).safeTransfer(_slashedTasks[i].rewardAddress, lockedAmount); + + emit TaskSlashed(_slashedTasks[i].bidId, _slashedTasks[i].prover, lock.token, lockedAmount); + } + } + + function _unlockStake(uint256 _bidId, address _stakeToken, address _prover, uint256 _amount) internal { + proverLockedAmounts[_stakeToken][_prover] -= _amount; + delete lockInfo[_bidId]; + } + + //---------------------------------------- STAKING_MANAGER_ROLE end ----------------------------------------// + + //---------------------------------------- Getter start ----------------------------------------// + + function getProverStakeAmount(address _stakeToken, address _prover) public view returns (uint256) { + return proverstakeAmounts[_stakeToken][_prover]; + } + + function getProverLockedAmount(address _stakeToken, address _prover) public view returns (uint256) { + return proverLockedAmounts[_stakeToken][_prover]; + } + + function getProverActiveStakeAmount(address _stakeToken, address _prover) public view returns (uint256) { + return getProverStakeAmount(_stakeToken, _prover) - getProverLockedAmount(_stakeToken, _prover); + } + + function getStakeTokenList() external view returns (address[] memory) { + return stakeTokenSet.values(); + } + + function getStakeTokenWeights() external view returns (address[] memory, uint256[] memory) { + uint256[] memory weights = new uint256[](stakeTokenSet.length()); + for (uint256 i = 0; i < stakeTokenSet.length(); i++) { + weights[i] = stakeTokenSelectionWeight[stakeTokenSet.at(i)]; + } + return (stakeTokenSet.values(), weights); + } + + function getStakeAmount(address _stakeToken, address _account, address _prover) external view returns (uint256) { + return stakeAmounts[_stakeToken][_account][_prover]; + } + + function isSupportedStakeToken(address _stakeToken) public view returns (bool) { + return stakeTokenSet.contains(_stakeToken); + } + + //---------------------------------------- Getter end ----------------------------------------// + + //---------------------------------------- Token Selection start ----------------------------------------// + + function _selectStakeToken(address _prover) internal view returns (address) { + require(stakeTokenSelectionWeightSum > 0, "Total weight must be greater than zero"); + require(stakeTokenSet.length() > 0, "No tokens available"); + + uint256 len = stakeTokenSet.length(); + address[] memory tokens = new address[](len); + uint256[] memory weights = new uint256[](len); + + uint256 weightSum = stakeTokenSelectionWeightSum; + uint256 idx = 0; + for (uint256 i = 0; i < len; i++) { + address token = stakeTokenSet.at(i); + uint256 weight = stakeTokenSelectionWeight[token]; + // ignore if weight is 0 + if (weight > 0) { + tokens[idx] = token; + weights[idx] = weight; + idx++; + } + } + + // repeat until a valid token is selected + while (true) { + require(idx > 0, Error.NoStakeTokenAvailableToLock()); + + // random number in range [0, weightSum - 1] + uint256 random = uint256( + keccak256(abi.encodePacked(block.timestamp, blockhash(block.number - 1), _msgSender())) + ) % weightSum; + + uint256 cumulativeWeight = 0; + address selectedToken; + + uint256 i; + // select token based on weight + for (i = 0; i < idx; i++) { + cumulativeWeight += weights[i]; + if (random < cumulativeWeight) { + selectedToken = tokens[i]; + break; + } + } + + // check if the selected token has enough active stake amount + if (getProverActiveStakeAmount(selectedToken, _prover) >= amountToLock[selectedToken]) { + return selectedToken; + } + + weightSum -= weights[i]; + tokens[i] = tokens[idx - 1]; + weights[i] = weights[idx - 1]; + idx--; // reduce the array size + } + + // this should be returned + return address(0); + } + + //---------------------------------------- Token Selection end ----------------------------------------// + + //---------------------------------------- DEFAULT_ADMIN_ROLE start ----------------------------------------// + + function addStakeToken(address _token, uint256 _weight) external onlyRole(DEFAULT_ADMIN_ROLE) { + require(stakeTokenSet.add(_token), Error.TokenAlreadyExists()); + stakeTokenSelectionWeight[_token] = _weight; + stakeTokenSelectionWeightSum += _weight; + emit StakeTokenAdded(_token, _weight); + } + + function removeStakeToken(address _token) external onlyRole(DEFAULT_ADMIN_ROLE) { + require(stakeTokenSet.remove(_token), Error.TokenDoesNotExist()); + stakeTokenSelectionWeightSum -= stakeTokenSelectionWeight[_token]; + delete stakeTokenSelectionWeight[_token]; + emit StakeTokenRemoved(_token); + } + + function setWithdrawalDuration(uint256 _duration) external onlyRole(DEFAULT_ADMIN_ROLE) { + _setWithdrawalDuration(_duration); + } + + function _setWithdrawalDuration(uint256 _duration) internal { + require(_duration > 0, Error.InvalidWithdrawalDuration()); + withdrawalDuration = _duration; + emit WithdrawalDurationSet(_duration); + } + + function setStakeTokenSelectionWeight(address _token, uint256 _weight) external onlyRole(DEFAULT_ADMIN_ROLE) { + stakeTokenSelectionWeightSum -= stakeTokenSelectionWeight[_token]; + stakeTokenSelectionWeight[_token] = _weight; + stakeTokenSelectionWeightSum += _weight; + + emit StakeTokenSelectionWeightSet(_token, _weight); + } + + function setStakeAmountToLock(address _token, uint256 _amount) external onlyRole(DEFAULT_ADMIN_ROLE) { + amountToLock[_token] = _amount; + + emit AmountToLockSet(_token, _amount); + } + + function emergencyWithdraw(address _token, address _to) public onlyRole(DEFAULT_ADMIN_ROLE) { + require(_token != address(0), Error.ZeroTokenAddress()); + require(_to != address(0), Error.ZeroToAddress()); + + IERC20(_token).safeTransfer(_to, IERC20(_token).balanceOf(address(this))); + } + + //---------------------------------------- DEFAULT_ADMIN_ROLE end ----------------------------------------// + + //---------------------------------------- Override start ----------------------------------------// + + function supportsInterface(bytes4 _interfaceId) public view virtual override returns (bool) { + return super.supportsInterface(_interfaceId); + } + + function _authorizeUpgrade(address /*account*/ ) internal view override onlyRole(DEFAULT_ADMIN_ROLE) {} + + //---------------------------------------- Override end ----------------------------------------// +} diff --git a/contracts/staking/l2_contracts/StakingManager.sol b/contracts/staking/l2_contracts/StakingManager.sol new file mode 100644 index 0000000..978abfe --- /dev/null +++ b/contracts/staking/l2_contracts/StakingManager.sol @@ -0,0 +1,265 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.26; + +/* Contracts */ +import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; +import {AccessControlUpgradeable} from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; +import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import {ReentrancyGuardUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol"; + +/* Interfaces */ +import {IProofMarketplace} from "../../interfaces/IProofMarketplace.sol"; +import {IStakingManager} from "../../interfaces/staking/IStakingManager.sol"; +import {IStakingPool} from "../../interfaces/staking/IStakingPool.sol"; + +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +/* Libraries */ +import {Struct} from "../../lib/Struct.sol"; +import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import {Error} from "../../lib/Error.sol"; + +contract StakingManager is AccessControlUpgradeable, UUPSUpgradeable, ReentrancyGuardUpgradeable, IStakingManager { + using EnumerableSet for EnumerableSet.AddressSet; + using SafeERC20 for IERC20; + + //---------------------------------------- Constant start ----------------------------------------// + + bytes32 public constant PROVER_MANAGER_ROLE = keccak256("PROVER_MANAGER"); // 0xa761a3d842ba56907e019d308ac5d6a410a849e235f38df4d3ac13b1e8714714 + bytes32 public constant SYMBIOTIC_STAKING_ROLE = keccak256("SYMBIOTIC_STAKING"); // 0x470cc73029982e5259cad3b0b46af8575cc034941e1ff27fe1fb7e55101a341f + + //---------------------------------------- Constant end ----------------------------------------// + + //---------------------------------------- State Variable start ----------------------------------------// + + uint256[500] private __gap_0; + + EnumerableSet.AddressSet private stakingPoolSet; + + address public proofMarketplace; + address public feeToken; + + uint256 public poolRewardShareSum; + + mapping(address pool => Struct.PoolConfig config) private poolConfig; + + uint256[500] private __gap_1; + + //---------------------------------------- State Variable end ----------------------------------------// + + //---------------------------------------- Init start ----------------------------------------// + + /// @custom:oz-upgrades-unsafe-allow constructor + constructor() { + _disableInitializers(); + } + + function initialize( + address _admin, + address _proofMarketplace, + address _proverManager, + address _symbioticStaking, + address _feeToken + ) public initializer { + __Context_init_unchained(); + __ERC165_init_unchained(); + __AccessControl_init_unchained(); + __UUPSUpgradeable_init_unchained(); + + require(_admin != address(0), Error.InvalidAdmin()); + _grantRole(DEFAULT_ADMIN_ROLE, _admin); + + require(_proverManager != address(0), Error.InvalidProverManager()); + _grantRole(PROVER_MANAGER_ROLE, _proverManager); + + require(_symbioticStaking != address(0), Error.InvalidSymbioticStaking()); + _grantRole(SYMBIOTIC_STAKING_ROLE, _symbioticStaking); + + _setProofMarketplace(_proofMarketplace); + _setFeeToken(_feeToken); + } + + //---------------------------------------- Init end ----------------------------------------// + + //---------------------------------------- PROVER_MANAGER_ROLE start ----------------------------------------// + + /// @notice lock stake for the task for all enabled pools + /// @dev called by ProofMarketplace contract when a task is created + function onTaskAssignment(uint256 _bidId, address _prover) external onlyRole(PROVER_MANAGER_ROLE) { + uint256 len = stakingPoolSet.length(); + + for (uint256 i = 0; i < len; i++) { + address pool = stakingPoolSet.at(i); + if (!isEnabledPool(pool)) continue; // skip if the pool is not enabled + + IStakingPool(pool).lockStake(_bidId, _prover); + } + } + + /** + * @notice called when task is completed to unlock the locked stakes + * @dev called by ProofMarketplace contract when a task is completed + */ + function onTaskCompletion(uint256 _bidId, address _prover, uint256 _feeRewardAmount) + external + onlyRole(PROVER_MANAGER_ROLE) + { + uint256 len = stakingPoolSet.length(); + for (uint256 i = 0; i < len; i++) { + address pool = stakingPoolSet.at(i); + + if (!isEnabledPool(pool)) continue; + + uint256 poolFeeRewardAmount = _calcFeeRewardAmount(pool, _feeRewardAmount); + IStakingPool(pool).onTaskCompletion(_bidId, _prover, poolFeeRewardAmount); + } + } + + function _calcFeeRewardAmount(address _pool, uint256 _feeRewardAmount) internal view returns (uint256) { + uint256 poolRewardShare = poolConfig[_pool].rewardShare; + + uint256 poolFeeRewardAmount = _feeRewardAmount > 0 ? Math.mulDiv(_feeRewardAmount, poolRewardShare, poolRewardShareSum) : 0; + + return poolFeeRewardAmount; + } + + //---------------------------------------- PROVER_MANAGER_ROLE end ----------------------------------------// + + //---------------------------------------- SYMBIOTIC_STAKING_ROLE start ----------------------------------------// + + /// @notice called by SymbioticStaking contract when slash result is submitted + function onSlashResultSubmission(Struct.TaskSlashed[] calldata _tasksSlashed) + external + onlyRole(SYMBIOTIC_STAKING_ROLE) + { + // msg.sender will most likely be SymbioticStaking contract + require(stakingPoolSet.contains(msg.sender), Error.InvalidPool()); + + uint256[] memory bidIds = new uint256[](_tasksSlashed.length); + for (uint256 i = 0; i < _tasksSlashed.length; i++) { + bidIds[i] = _tasksSlashed[i].bidId; + } + + // this will do nothing for bidIds that are already refunded + IProofMarketplace(proofMarketplace).refundFees(bidIds); + + uint256 len = stakingPoolSet.length(); + for (uint256 i = 0; i < len; i++) { + address pool = stakingPoolSet.at(i); + // this will do nothing for bidIds that are already slashed (if same data has been submitted before) + IStakingPool(pool).slash(_tasksSlashed); + } + } + + //---------------------------------------- SYMBIOTIC_STAKING_ROLE end ----------------------------------------// + + //---------------------------------------- Getter start ----------------------------------------// + + function isEnabledPool(address _pool) public view returns (bool) { + return poolConfig[_pool].enabled; + } + + function getPoolConfig(address _pool) external view returns (Struct.PoolConfig memory) { + return poolConfig[_pool]; + } + + //---------------------------------------- Getter end ----------------------------------------// + + //---------------------------------------- DEFAULT_ADMIN_ROLE start ----------------------------------------// + + /** + * @notice add new staking pool, share will be applied once the pool is enabled + */ + function addStakingPool(address _pool, uint256 _share) external onlyRole(DEFAULT_ADMIN_ROLE) { + require(stakingPoolSet.add(_pool), Error.PoolAlreadyExists()); + + poolConfig[_pool].rewardShare = _share; // Note: this will be applied once the pool is enabled + + emit StakingPoolAdded(_pool); + emit PoolRewardShareSet(_pool, _share); + } + + function removeStakingPool(address _pool) external onlyRole(DEFAULT_ADMIN_ROLE) { + require(stakingPoolSet.remove(_pool), Error.PoolDoesNotExist()); + + poolRewardShareSum -= poolConfig[_pool].rewardShare; + delete poolConfig[_pool]; + + emit StakingPoolRemoved(_pool); + } + + function setPoolRewardShare(address _pool, uint256 _rewardShare) external onlyRole(DEFAULT_ADMIN_ROLE) { + require(stakingPoolSet.contains(_pool), Error.PoolDoesNotExist()); + + poolRewardShareSum -= poolConfig[_pool].rewardShare; + poolConfig[_pool].rewardShare = _rewardShare; + poolRewardShareSum += _rewardShare; + + emit PoolRewardShareSet(_pool, _rewardShare); + } + + function setPoolEnabled(address _pool, bool _enabled) external onlyRole(DEFAULT_ADMIN_ROLE) { + require(stakingPoolSet.contains(_pool), Error.PoolAlreadyExists()); + + if(poolConfig[_pool].enabled == _enabled) { + if(_enabled) { + revert Error.PoolAlreadyEnabled(); + } else { + revert Error.PoolAlreadyDisabled(); + } + } + + if(_enabled) { + poolRewardShareSum += poolConfig[_pool].rewardShare; + } else { + poolRewardShareSum -= poolConfig[_pool].rewardShare; + } + poolConfig[_pool].enabled = _enabled; + + emit PoolEnabledSet(_pool, _enabled); + } + + function setProofMarketplace(address _proofMarketplace) external onlyRole(DEFAULT_ADMIN_ROLE) { + _setProofMarketplace(_proofMarketplace); + } + + function _setProofMarketplace(address _proofMarketplace) internal { + require(_proofMarketplace != address(0), Error.InvalidProofMarketplace()); + + proofMarketplace = _proofMarketplace; + + emit ProofMarketplaceSet(_proofMarketplace); + } + + function setFeeToken(address _feeToken) external onlyRole(DEFAULT_ADMIN_ROLE) { + _setFeeToken(_feeToken); + } + + function _setFeeToken(address _feeToken) internal { + require(_feeToken != address(0), Error.InvalidFeeToken()); + + feeToken = _feeToken; + + emit FeeTokenSet(_feeToken); + } + + function emergencyWithdraw(address _token, address _to) public onlyRole(DEFAULT_ADMIN_ROLE) { + require(_token != address(0), Error.ZeroTokenAddress()); + require(_to != address(0), Error.ZeroToAddress()); + + IERC20(_token).safeTransfer(_to, IERC20(_token).balanceOf(address(this))); + } + + //---------------------------------------- DEFAULT_ADMIN_ROLE end ----------------------------------------// + + //---------------------------------------- Override start ----------------------------------------// + + function supportsInterface(bytes4 _interfaceId) public view virtual override returns (bool) { + return super.supportsInterface(_interfaceId); + } + + function _authorizeUpgrade(address /*account*/ ) internal view override onlyRole(DEFAULT_ADMIN_ROLE) {} + + //---------------------------------------- Override end ----------------------------------------// +} diff --git a/contracts/staking/l2_contracts/SymbioticStaking.sol b/contracts/staking/l2_contracts/SymbioticStaking.sol new file mode 100644 index 0000000..7b00a7e --- /dev/null +++ b/contracts/staking/l2_contracts/SymbioticStaking.sol @@ -0,0 +1,719 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +/* Contracts */ +import {AccessControlUpgradeable} from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; +import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import {PausableUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol"; +import {ReentrancyGuardUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol"; +import {ProofMarketplace} from "../../ProofMarketplace.sol"; + +/* Interfaces */ +import {IStakingManager} from "../../interfaces/staking/IStakingManager.sol"; +import {ISymbioticStaking} from "../../interfaces/staking/ISymbioticStaking.sol"; +import {ISymbioticStakingReward} from "../../interfaces/staking/ISymbioticStakingReward.sol"; +import {IAttestationVerifier} from "../../periphery/interfaces/IAttestationVerifier.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; + +/* Libraries */ +import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; +import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import {MessageHashUtils} from "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; + +import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; +import {Enum} from "../../lib/Enum.sol"; +import {Error} from "../../lib/Error.sol"; +import {Struct} from "../../lib/Struct.sol"; + +contract SymbioticStaking is + AccessControlUpgradeable, + ReentrancyGuardUpgradeable, + PausableUpgradeable, + UUPSUpgradeable, + ISymbioticStaking +{ + using EnumerableSet for EnumerableSet.AddressSet; + using SafeERC20 for IERC20; + + //---------------------------------- Constant/Immutable start ----------------------------------// + + /* Submission Type */ + bytes32 public constant STAKE_SNAPSHOT_TYPE = keccak256("STAKE_SNAPSHOT_TYPE"); // 0x1333028fe2c67747e7c1ef0a711cbd0288f29c0059f66b8560d4ee5c6792b4a3 + bytes32 public constant SLASH_RESULT_TYPE = keccak256("SLASH_RESULT_TYPE"); // 0xc89837a6ea06308d6a2f41007d2d0af18fc34c85ac214bc95f0f56c191db8707 + + /* Submission Status */ + bytes32 public constant STAKE_SNAPSHOT_DONE = 0x0000000000000000000000000000000000000000000000000000000000000001; + bytes32 public constant SLASH_RESULT_DONE = 0x0000000000000000000000000000000000000000000000000000000000000010; + bytes32 public constant SUBMISSION_COMPLETE = 0x0000000000000000000000000000000000000000000000000000000000000011; + + /* Roles */ + bytes32 public constant STAKING_MANAGER_ROLE = keccak256("STAKING_MANAGER_ROLE"); // 0xa6b5d83d32632203555cb9b2c2f68a8d94da48cadd9266ac0d17babedb52ea5b + bytes32 public constant BRIDGE_ENCLAVE_UPDATER_ROLE = keccak256("BRIDGE_ENCLAVE_UPDATER_ROLE"); // 0x86e48cde700dd7fd18603644944b13787cc9ae42d34a21f8bfb69bc2eab7ede1 + + uint256 public constant SIGNATURE_LENGTH = 65; + + //---------------------------------- Constant/Immutable end ----------------------------------// + + //---------------------------------- State Variable start ----------------------------------// + + uint256[500] private __gap_0; + + /* Config */ + uint256 public submissionCooldown; // in seconds + uint256 public baseTransmitterComissionRate; // 18 decimal (in percentage) + + /* Stake Token */ + EnumerableSet.AddressSet stakeTokenSet; + uint256 public stakeTokenSelectionWeightSum; + + /* Contracts */ + address public stakingManager; + address public proofMarketplace; + address public rewardDistributor; + address public attestationVerifier; + + /* Submission */ + Struct.ConfirmedTimestamp[] public confirmedTimestamps; // timestamp is added once all types of partial txs are received + + /* Config */ + mapping(address stakeToken => uint256 amount) public amountToLock; + mapping(address stakeToken => uint256 weight) public stakeTokenSelectionWeight; + + /* Symbiotic Snapshot */ + // to track if all partial txs are received + mapping(uint256 captureTimestamp => mapping(bytes32 submissionType => Struct.SnapshotTxCountInfo snapshot)) public + txCountInfo; + // to track if all partial txs are received + mapping(uint256 captureTimestamp => mapping(address transmitter => bytes32 status)) public submissionStatus; + + // staked amount for each prover + mapping(uint256 captureTimestamp => mapping(address stakeToken => mapping(address prover => uint256 stakeAmount))) + proverStakeAmounts; + // staked amount for each vault + mapping( + uint256 captureTimestamp + => mapping(address stakeToken => mapping(address vault => mapping(address prover => uint256 stakeAmount))) + ) vaultStakeAmounts; + + mapping(uint256 bidId => Struct.SymbioticStakingLock lockInfo) public lockInfo; // note: this does not actually affect L1 Symbiotic stake + mapping(address stakeToken => mapping(address prover => uint256 locked)) public proverLockedAmounts; + + // once a certain captureTimestamp is submitted, transmitter and block number will be set and cannot be overwritten + // once the captureTimestamp is confirmed, this will be stored in `confirmedTimestamps` + mapping(uint256 captureTimestamp => Struct.CaptureTimestampInfo) public captureTimestampInfo; + + mapping(bytes32 imageId => Struct.EnclaveImage) public enclaveImages; + + //---------------------------------- State Variable end ----------------------------------// + + uint256[500] private __gap_1; + + //---------------------------------- Init start ----------------------------------// + + /// @custom:oz-upgrades-unsafe-allow constructor + constructor() { + _disableInitializers(); + } + + function initialize( + address _admin, + address _attestationVerifier, + address _proofMarketplace, + address _stakingManager, + address _rewardDistributor + ) public initializer { + __AccessControl_init_unchained(); + __ReentrancyGuard_init_unchained(); + __Pausable_init_unchained(); + __UUPSUpgradeable_init_unchained(); + + // Note: BRIDGE_ENCLAVE_ROLE should be set manaully + + require(_admin != address(0), Error.InvalidAdmin()); + _grantRole(DEFAULT_ADMIN_ROLE, _admin); + + require(_attestationVerifier != address(0), Error.InvalidAttestationVerifier()); + _setAttestationVerifier(_attestationVerifier); + + require(_proofMarketplace != address(0), Error.InvalidProofMarketplace()); + _setProofMarketplace(_proofMarketplace); + + require(_stakingManager != address(0), Error.InvalidStakingManager()); + _grantRole(STAKING_MANAGER_ROLE, _stakingManager); + + require(_rewardDistributor != address(0), Error.InvalidRewardDistributor()); + _setRewardDistributor(_rewardDistributor); + } + + //---------------------------------- Init end ----------------------------------// + + //---------------------------------- Submission start ----------------------------------// + + function submitVaultSnapshot( + uint256 _index, + uint256 _numOfTxs, // number of total transactions + uint256 _captureTimestamp, + bytes32 _imageId, + bytes calldata _vaultSnapshotData, + bytes calldata _proof + ) external whenNotPaused { + Struct.VaultSnapshot[] memory _vaultSnapshots = abi.decode(_vaultSnapshotData, (Struct.VaultSnapshot[])); + + _checkCaptureTimestampInfo(_captureTimestamp, msg.sender, 0); + + _checkValidity(_index, _numOfTxs, _captureTimestamp, STAKE_SNAPSHOT_TYPE); + + _verifyProof(_imageId, STAKE_SNAPSHOT_TYPE, _index, _numOfTxs, _captureTimestamp, _vaultSnapshotData, _proof); + + // update Vault and Prover stake amount + // update rewardPerToken for each vault and prover in SymbioticStakingReward + _submitVaultSnapshot(_captureTimestamp, _vaultSnapshots); + + _updateTxCountInfo(_numOfTxs, _captureTimestamp, STAKE_SNAPSHOT_TYPE); + + // when all chunks of VaultSnapshots are submitted + if (_index == _numOfTxs - 1) { + submissionStatus[_captureTimestamp][msg.sender] |= STAKE_SNAPSHOT_DONE; + } + + emit VaultSnapshotSubmitted( + msg.sender, _captureTimestamp, _index, _numOfTxs, _imageId, _vaultSnapshotData, _proof + ); + + // when all chunks of Snapshots are submitted + if (submissionStatus[_captureTimestamp][msg.sender] == SUBMISSION_COMPLETE) { + _completeSubmission(_captureTimestamp); + } + } + + function _submitVaultSnapshot(uint256 _captureTimestamp, Struct.VaultSnapshot[] memory _vaultSnapshots) internal { + for (uint256 i = 0; i < _vaultSnapshots.length; i++) { + Struct.VaultSnapshot memory _vaultSnapshot = _vaultSnapshots[i]; + + // update vault staked amount + vaultStakeAmounts[_captureTimestamp][_vaultSnapshot.stakeToken][_vaultSnapshot.vault][_vaultSnapshot.prover] + = _vaultSnapshot.stakeAmount; + + // update prover staked amount + proverStakeAmounts[_captureTimestamp][_vaultSnapshot.stakeToken][_vaultSnapshot.prover] += + _vaultSnapshot.stakeAmount; + + ISymbioticStakingReward(rewardDistributor).onSnapshotSubmission(_vaultSnapshot.vault, _vaultSnapshot.prover); + } + } + + function submitSlashResult( + uint256 _index, + uint256 _numOfTxs, // number of total transactions + uint256 _captureTimestamp, + uint256 _lastBlockNumber, // last block number of the range + bytes32 _imageId, + bytes calldata _slashResultData, + bytes calldata _proof + ) external whenNotPaused { + require(_lastBlockNumber > 0, Error.CannotBeZero()); + // the range must include at least one block after the block number of the latest confirmed block + require(_lastBlockNumber > latestConfirmedTimestampBlockNumber(), Error.InvalidLastBlockNumber()); + + Struct.TaskSlashed[] memory _taskSlashed; + if (_slashResultData.length > 0) { + _taskSlashed = abi.decode(_slashResultData, (Struct.TaskSlashed[])); + } + + _checkCaptureTimestampInfo(_captureTimestamp, msg.sender, _lastBlockNumber); + + _checkValidity(_index, _numOfTxs, _captureTimestamp, SLASH_RESULT_TYPE); + + // TODO: Should include latestBlockNumber + _verifyProof(_imageId, SLASH_RESULT_TYPE, _index, _numOfTxs, _captureTimestamp, _slashResultData, _proof); + + _updateTxCountInfo(_numOfTxs, _captureTimestamp, SLASH_RESULT_TYPE); + + // there could be no operator slashed + if (_taskSlashed.length > 0) IStakingManager(stakingManager).onSlashResultSubmission(_taskSlashed); + + if (_index == _numOfTxs - 1) { + submissionStatus[_captureTimestamp][msg.sender] |= SLASH_RESULT_DONE; + } + + emit SlashResultSubmitted( + _msgSender(), _captureTimestamp, _index, _numOfTxs, _imageId, _slashResultData, _proof + ); + + // when all chunks of Snapshots are submitted + if (submissionStatus[_captureTimestamp][msg.sender] == SUBMISSION_COMPLETE) { + _completeSubmission(_captureTimestamp); + } + } + + function _checkCaptureTimestampInfo(uint256 _captureTimestamp, address _transmitter, uint256 _blockNumber) + internal + { + address registeredTransmitter = captureTimestampInfo[_captureTimestamp].transmitter; + if (registeredTransmitter == address(0)) { + // once transmitter is registered, other transmitters cannot submit the snapshot for the same capturetimestamp + captureTimestampInfo[_captureTimestamp].transmitter = _transmitter; + } else { + require(registeredTransmitter == _transmitter, Error.NotRegisteredTransmitter()); + } + + if (_blockNumber != 0) { + uint256 registeredBlockNumber = captureTimestampInfo[_captureTimestamp].blockNumber; + if (registeredBlockNumber == 0) { + captureTimestampInfo[_captureTimestamp].blockNumber = _blockNumber; + } else { + require(registeredBlockNumber == _blockNumber, Error.NotRegisteredBlockNumber()); + } + } + } + + function _updateTxCountInfo(uint256 _numOfTxs, uint256 _captureTimestamp, bytes32 _type) internal { + Struct.SnapshotTxCountInfo memory _snapshot = txCountInfo[_captureTimestamp][_type]; + + // update length if 0 + if (_snapshot.numOfTxs == 0) { + txCountInfo[_captureTimestamp][_type].numOfTxs = _numOfTxs; + } else { + require(_snapshot.numOfTxs == _numOfTxs, Error.InvalidNumOfTxs()); + } + + // increase count by 1 + txCountInfo[_captureTimestamp][_type].idxToSubmit += 1; + } + + //---------------------------------- Submission end ----------------------------------// + + //---------------------------------- Stake lock/unlock start ------------------------------------// + + function lockStake(uint256 _bidId, address _prover) external onlyRole(STAKING_MANAGER_ROLE) { + address _stakeToken = _selectStakeToken(_prover); + uint256 _amountToLock = amountToLock[_stakeToken]; + + lockInfo[_bidId] = Struct.SymbioticStakingLock(_stakeToken, _amountToLock); + proverLockedAmounts[_stakeToken][_prover] += _amountToLock; + + emit StakeLocked(_bidId, _prover, _stakeToken, _amountToLock); + } + + function onTaskCompletion(uint256 _bidId, address _prover, uint256 _feeRewardAmount) + external + onlyRole(STAKING_MANAGER_ROLE) + { + Struct.SymbioticStakingLock memory lock = lockInfo[_bidId]; + + // distribute fee reward + // Note: initially all the reward will be sent to prover, so _feeRewardAmount will be 0 + if (_feeRewardAmount > 0) { + uint256 currentTimestampIdx = latestConfirmedTimestampIdx(); + uint256 transmitterComission = + Math.mulDiv(_feeRewardAmount, confirmedTimestamps[currentTimestampIdx].transmitterComissionRate, 1e18); + uint256 feeRewardRemaining = _feeRewardAmount - transmitterComission; + + // reward the transmitter who created the latestConfirmedTimestamp at the time of task assignment + ProofMarketplace(proofMarketplace).distributeTransmitterFeeReward( + confirmedTimestamps[currentTimestampIdx].transmitter, transmitterComission + ); + + // distribute the remaining fee reward + ISymbioticStakingReward(rewardDistributor).updateFeeReward(lock.stakeToken, _prover, feeRewardRemaining); + } + + // unlock the stake locked during task assignment + uint256 lockedAmount = lock.amount; + proverLockedAmounts[lock.stakeToken][_prover] -= lockedAmount; + delete lockInfo[_bidId]; + + emit StakeUnlocked(_bidId, _prover, lock.stakeToken, lockedAmount); + } + + //------------------------------------- Stake lock/unlock end ------------------------------------// + + //----------------------------------------- Slash start ------------------------------------------// + + function slash(Struct.TaskSlashed[] calldata _slashedTasks) external onlyRole(STAKING_MANAGER_ROLE) { + uint256 len = _slashedTasks.length; + for (uint256 i = 0; i < len; i++) { + Struct.SymbioticStakingLock memory lock = lockInfo[_slashedTasks[i].bidId]; + + uint256 lockedAmount = lock.amount; + if (lockedAmount == 0) continue; // if already slashed + + // unlock the stake locked during task assignment + proverLockedAmounts[lock.stakeToken][_slashedTasks[i].prover] -= lockedAmount; + delete lockInfo[_slashedTasks[i].bidId]; + + emit TaskSlashed(_slashedTasks[i].bidId, _slashedTasks[i].prover, lock.stakeToken, lockedAmount); + } + } + + //----------------------------------------- Slash end ------------------------------------------// + + function _completeSubmission(uint256 _captureTimestamp) internal { + uint256 transmitterComission = _calcTransmitterComissionRate(_captureTimestamp); + + Struct.ConfirmedTimestamp memory confirmedTimestamp = Struct.ConfirmedTimestamp( + _captureTimestamp, captureTimestampInfo[_captureTimestamp].blockNumber, msg.sender, transmitterComission + ); + confirmedTimestamps.push(confirmedTimestamp); + + emit SnapshotConfirmed(msg.sender, _captureTimestamp); + } + + //------------------------------- Getter start ----------------------------// + + function latestConfirmedTimestamp() public view returns (uint256) { + uint256 len = confirmedTimestamps.length; + return len > 0 ? confirmedTimestamps[len - 1].captureTimestamp : 0; + } + + function latestConfirmedTimestampBlockNumber() public view returns (uint256) { + uint256 len = confirmedTimestamps.length; + return len > 0 ? confirmedTimestamps[len - 1].blockNumber : 0; + } + + function latestConfirmedTimestampInfo() external view returns (Struct.ConfirmedTimestamp memory) { + uint256 len = confirmedTimestamps.length; + require(len > 0, Error.NoConfirmedTimestamp()); + return confirmedTimestamps[len - 1]; + } + + function confirmedTimestampInfo(uint256 _idx) public view returns (Struct.ConfirmedTimestamp memory) { + return confirmedTimestamps[_idx]; + } + + function latestConfirmedTimestampIdx() public view returns (uint256) { + uint256 len = confirmedTimestamps.length; + return len > 0 ? len - 1 : 0; + } + + function getProverStakeAmount(address _stakeToken, address prover) public view returns (uint256) { + return proverStakeAmounts[latestConfirmedTimestamp()][_stakeToken][prover]; + } + + /// @notice this can return 0 if nothing was submitted at the timestamp + function getProverStakeAmountAt(uint256 _captureTimestamp, address _stakeToken, address prover) + public + view + returns (uint256) + { + return proverStakeAmounts[_captureTimestamp][_stakeToken][prover]; + } + + function getProverActiveStakeAmount(address _stakeToken, address prover) public view returns (uint256) { + uint256 proverStakeAmount = getProverStakeAmount(_stakeToken, prover); + uint256 proverLockedAmount = proverLockedAmounts[_stakeToken][prover]; + return proverStakeAmount > proverLockedAmount ? proverStakeAmount - proverLockedAmount : 0; + } + + function getStakeAmount(address _stakeToken, address _vault, address prover) external view returns (uint256) { + return vaultStakeAmounts[latestConfirmedTimestamp()][_stakeToken][_vault][prover]; + } + + function getStakeTokenList() external view returns (address[] memory) { + return stakeTokenSet.values(); + } + + function getStakeTokenWeights() external view returns (address[] memory, uint256[] memory) { + uint256[] memory weights = new uint256[](stakeTokenSet.length()); + for (uint256 i = 0; i < stakeTokenSet.length(); i++) { + weights[i] = stakeTokenSelectionWeight[stakeTokenSet.at(i)]; + } + return (stakeTokenSet.values(), weights); + } + + function isSupportedStakeToken(address _stakeToken) public view returns (bool) { + return stakeTokenSet.contains(_stakeToken); + } + + function getSubmissionStatus(uint256 _captureTimestamp, address _transmitter) external view returns (bytes32) { + return submissionStatus[_captureTimestamp][_transmitter]; + } + + function getImageId(bytes memory PCR0, bytes memory PCR1, bytes memory PCR2) public pure returns (bytes32) { + return keccak256(abi.encodePacked(PCR0, PCR1, PCR2)); + } + + //------------------------------- Getter end ----------------------------// + + //------------------------------ Internal View start -----------------------------// + + function _checkValidity(uint256 _index, uint256 _numOfTxs, uint256 _captureTimestamp, bytes32 _type) + internal + view + { + require( + submissionStatus[_captureTimestamp][msg.sender] != SUBMISSION_COMPLETE, Error.SubmissionAlreadyCompleted() + ); + + require(_index < _numOfTxs, Error.InvalidIndex()); // here we assume enclave submis the correct data + require(_numOfTxs > 0, Error.ZeroNumOfTxs()); + + // snapshot cannot be submitted before the cooldown period from the last confirmed timestamp (completed snapshot submission) + require(_captureTimestamp >= (latestConfirmedTimestamp() + submissionCooldown), Error.CooldownPeriodNotPassed()); + require(_captureTimestamp <= block.timestamp, Error.InvalidCaptureTimestamp()); + + require(_index == txCountInfo[_captureTimestamp][_type].idxToSubmit, Error.NotIdxToSubmit()); + } + + /** + * @dev Internal function to verify the proof. + * The function performs the following steps: + * - Decodes the proof into the signature and attestation data. + * - Verifies the signature over the provided data using the enclave key. + * - Verifies the attestation to ensure the enclave key is valid. + * - Ensures the enclave key used to sign the data matches the one in the attestation. + * @param _data The parameters used for slashing. + * @param _proof The proof that contains the signature on the parameters used for slashing and + * attestation data which proves that the key used for signing is securely generated within the enclave. + */ + function _verifyProof( + bytes32 _imageId, + bytes32 _type, + uint256 _index, + uint256 _numOfTxs, + uint256 _captureTimestamp, + bytes memory _data, + bytes memory _proof + ) internal view { + require(enclaveImages[_imageId].PCR0.length != 0, Error.ImageNotFound()); + bytes memory dataToSign = abi.encode(_type, _index, _numOfTxs, _captureTimestamp, _data); + (bytes memory _signature, bytes memory _attestationData) = abi.decode(_proof, (bytes, bytes)); + require(_signature.length == SIGNATURE_LENGTH, Error.InvalidSignatureLength()); + address _enclaveKey = ECDSA.recover(MessageHashUtils.toEthSignedMessageHash(keccak256(dataToSign)), _signature); + + (bytes memory attestationSig, IAttestationVerifier.Attestation memory attestation) = + abi.decode(_attestationData, (bytes, IAttestationVerifier.Attestation)); + IAttestationVerifier(attestationVerifier).verify(attestationSig, attestation); + + address _verifiedKey = _pubKeyToAddress(attestation.enclavePubKey); + require(_verifiedKey == _enclaveKey, Error.EnclaveKeyMismatch()); + require(getImageId(attestation.PCR0, attestation.PCR1, attestation.PCR2) == _imageId, Error.InvalidImage()); + } + + function _pubKeyToAddress(bytes memory _pubKey) internal pure returns (address) { + require(_pubKey.length == 64, Error.InvalidPublicKeyLength()); + return address(uint160(uint256(keccak256(_pubKey)))); + } + + function _calcTransmitterComissionRate(uint256 /* _confirmedTimestamp */ ) internal view returns (uint256) { + // TODO: (block.timestamp - _lastConfirmedTimestamp) * X + return baseTransmitterComissionRate; + } + + function _currentTransmitter() internal view returns (address) { + return confirmedTimestamps[latestConfirmedTimestampIdx()].transmitter; + } + + function _selectStakeToken(address _prover) internal view returns (address) { + require(stakeTokenSelectionWeightSum > 0, Error.ZeroStakeTokenSelectionWeightSum()); + require(stakeTokenSet.length() > 0, Error.NoStakeTokensAvailable()); + + address[] memory tokens = new address[](stakeTokenSet.length()); + uint256[] memory weights = new uint256[](stakeTokenSet.length()); + + uint256 weightSum = stakeTokenSelectionWeightSum; + + uint256 idx = 0; + uint256 len = stakeTokenSet.length(); + for (uint256 i = 0; i < len; i++) { + address token = stakeTokenSet.at(i); + uint256 weight = stakeTokenSelectionWeight[token]; + // ignore if weight is 0 + if (weight > 0) { + tokens[idx] = token; + weights[idx] = weight; + idx++; + } + } + + // repeat until a valid token is selected + while (true) { + require(idx > 0, Error.NoStakeTokenAvailableToLock()); + + // random number in range [0, weightSum - 1] + uint256 random = uint256( + keccak256(abi.encodePacked(block.timestamp, blockhash(block.number - 1), msg.sender)) + ) % weightSum; + + uint256 cumulativeWeight = 0; + address selectedToken; + + uint256 i; + // select token based on weight + for (i = 0; i < idx; i++) { + cumulativeWeight += weights[i]; + if (random < cumulativeWeight) { + selectedToken = tokens[i]; + break; + } + } + + // check if the selected token has enough active stake amount + if (getProverActiveStakeAmount(selectedToken, _prover) >= amountToLock[selectedToken]) { + return selectedToken; + } + + weightSum -= weights[i]; + tokens[i] = tokens[idx - 1]; + weights[i] = weights[idx - 1]; + idx--; // reduce the array size + } + + // this should be returned + return address(0); + } + + //------------------------------ Internal View end -----------------------------// + + + //---------------------------------- BRIDGE_ENCLAVE_UPDATER_ROLE start ----------------------------------// + + function addEnclaveImage(bytes memory PCR0, bytes memory PCR1, bytes memory PCR2) + external + onlyRole(BRIDGE_ENCLAVE_UPDATER_ROLE) + { + _addEnclaveImage(abi.encode(PCR0, PCR1, PCR2)); + } + + function addEnclaveImage(bytes memory PCRs) external onlyRole(BRIDGE_ENCLAVE_UPDATER_ROLE) { + _addEnclaveImage(PCRs); + } + + function _addEnclaveImage(bytes memory _PCRs) internal { + (bytes memory PCR0, bytes memory PCR1, bytes memory PCR2) = abi.decode(_PCRs, (bytes, bytes, bytes)); + bytes32 imageId = getImageId(PCR0, PCR1, PCR2); + require(enclaveImages[imageId].PCR0.length == 0, Error.ImageAlreadyExists()); + require(PCR0.length == 48, Error.InvalidPCR0Length()); + require(PCR1.length == 48, Error.InvalidPCR1Length()); + require(PCR2.length == 48, Error.InvalidPCR2Length()); + + Struct.EnclaveImage memory enclaveImage = Struct.EnclaveImage(PCR0, PCR1, PCR2); + enclaveImages[imageId] = enclaveImage; + + emit EnclaveImageAdded(imageId, PCR0, PCR1, PCR2); + } + + function removeEnclaveImage(bytes32 _imageId) external onlyRole(BRIDGE_ENCLAVE_UPDATER_ROLE) { + _removeEnclaveImage(_imageId); + } + + function _removeEnclaveImage(bytes32 _imageId) internal { + delete enclaveImages[_imageId]; + + emit EnclaveImageRemoved(_imageId); + } + + function setAttestationVerifier(address _attestationVerifier) external onlyRole(BRIDGE_ENCLAVE_UPDATER_ROLE) { + _setAttestationVerifier(_attestationVerifier); + } + + function _setAttestationVerifier(address _attestationVerifier) internal { + require(_attestationVerifier != address(0), Error.CannotBeZero()); + attestationVerifier = _attestationVerifier; + emit AttestationVerifierSet(_attestationVerifier); + } + + //---------------------------------- BRIDGE_ENCLAVE_UPDATER_ROLE end ----------------------------------// + + //---------------------------------- Admin start ----------------------------------// + + function addStakeToken(address _stakeToken, uint256 _weight) external onlyRole(DEFAULT_ADMIN_ROLE) { + require(stakeTokenSet.add(_stakeToken), Error.TokenAlreadyExists()); + + stakeTokenSelectionWeightSum += _weight; + stakeTokenSelectionWeight[_stakeToken] = _weight; + + emit StakeTokenAdded(_stakeToken, _weight); + } + + function removeStakeToken(address _stakeToken) external onlyRole(DEFAULT_ADMIN_ROLE) { + require(stakeTokenSet.remove(_stakeToken), Error.TokenDoesNotExist()); + + stakeTokenSelectionWeightSum -= stakeTokenSelectionWeight[_stakeToken]; + delete stakeTokenSelectionWeight[_stakeToken]; + + emit StakeTokenRemoved(_stakeToken); + } + + function setAmountToLock(address _stakeToken, uint256 _amount) external onlyRole(DEFAULT_ADMIN_ROLE) { + amountToLock[_stakeToken] = _amount; + + emit AmountToLockSet(_stakeToken, _amount); + } + + function setStakeTokenSelectionWeight(address _stakeToken, uint256 _weight) external onlyRole(DEFAULT_ADMIN_ROLE) { + stakeTokenSelectionWeightSum -= stakeTokenSelectionWeight[_stakeToken]; + stakeTokenSelectionWeight[_stakeToken] = _weight; + stakeTokenSelectionWeightSum += _weight; + + emit StakeTokenSelectionWeightSet(_stakeToken, _weight); + } + + function setSubmissionCooldown(uint256 _submissionCooldown) external onlyRole(DEFAULT_ADMIN_ROLE) { + submissionCooldown = _submissionCooldown; + + emit SubmissionCooldownSet(_submissionCooldown); + } + + /// @dev base transmitter comission rate is in range [0, 1e18) + function setBaseTransmitterComissionRate(uint256 _baseTransmitterComission) external onlyRole(DEFAULT_ADMIN_ROLE) { + require(_baseTransmitterComission < 1e18, Error.InvalidComissionRate()); + + baseTransmitterComissionRate = _baseTransmitterComission; + + emit BaseTransmitterComissionRateSet(_baseTransmitterComission); + } + + function setStakingManager(address _stakingManager) external onlyRole(DEFAULT_ADMIN_ROLE) { + _setStakingManager(_stakingManager); + } + + function _setStakingManager(address _stakingManager) internal { + require(_stakingManager != address(0), Error.CannotBeZero()); + stakingManager = _stakingManager; + + emit StakingManagerSet(_stakingManager); + } + + function setProofMarketplace(address _proofMarketplace) external onlyRole(DEFAULT_ADMIN_ROLE) { + _setProofMarketplace(_proofMarketplace); + } + + function _setProofMarketplace(address _proofMarketplace) internal { + require(_proofMarketplace != address(0), Error.CannotBeZero()); + proofMarketplace = _proofMarketplace; + + emit ProofMarketplaceSet(_proofMarketplace); + } + + function setRewardDistributor(address _rewardDistributor) external onlyRole(DEFAULT_ADMIN_ROLE) { + _setRewardDistributor(_rewardDistributor); + } + + function _setRewardDistributor(address _rewardDistributor) internal { + require(_rewardDistributor != address(0), Error.CannotBeZero()); + rewardDistributor = _rewardDistributor; + + emit RewardDistributorSet(_rewardDistributor); + } + + function emergencyWithdraw(address _token, address _to) public onlyRole(DEFAULT_ADMIN_ROLE) { + require(_token != address(0), Error.ZeroTokenAddress()); + require(_to != address(0), Error.ZeroToAddress()); + + IERC20(_token).safeTransfer(_to, IERC20(_token).balanceOf(address(this))); + } + + //---------------------------------- Admin end ----------------------------------// + + //---------------------------------- Override start ----------------------------------// + + function supportsInterface(bytes4 _interfaceId) public view virtual override returns (bool) { + return super.supportsInterface(_interfaceId); + } + + function _authorizeUpgrade(address /*account*/ ) internal view override onlyRole(DEFAULT_ADMIN_ROLE) {} + + //---------------------------------- Override end ----------------------------------// +} diff --git a/contracts/staking/l2_contracts/SymbioticStakingReward.sol b/contracts/staking/l2_contracts/SymbioticStakingReward.sol new file mode 100644 index 0000000..50b4ff9 --- /dev/null +++ b/contracts/staking/l2_contracts/SymbioticStakingReward.sol @@ -0,0 +1,238 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.26; + +/* Contracts */ +import {AccessControlUpgradeable} from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; +import {ReentrancyGuardUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol"; +import {PausableUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol"; +import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import {ProofMarketplace} from "../../ProofMarketplace.sol"; + +/* Interfaces */ +import {ISymbioticStaking} from "../../interfaces/staking/ISymbioticStaking.sol"; +import {ISymbioticStakingReward} from "../../interfaces/staking/ISymbioticStakingReward.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +/* Libraries */ +import {Struct} from "../../lib/Struct.sol"; + +import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; +import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; +import {Error} from "../../lib/Error.sol"; + +contract SymbioticStakingReward is + AccessControlUpgradeable, + ReentrancyGuardUpgradeable, + PausableUpgradeable, + UUPSUpgradeable, + ISymbioticStakingReward +{ + using SafeERC20 for IERC20; + using EnumerableSet for EnumerableSet.AddressSet; + + //---------------------------------------- Constant start ----------------------------------------// + + bytes32 public constant SYMBIOTIC_STAKING_ROLE = keccak256("SYMBIOTIC_STAKING_ROLE"); // 0x10a5972a598c4264843f7322e2775a07694fac8a54ef3e471a9e82ed2af9bb58 + + //---------------------------------------- Constant end ----------------------------------------// + + //---------------------------------------- State Variable start ----------------------------------------// + + uint256[500] private __gap_0; + + address public proofMarketplace; + address public symbioticStaking; + address public feeRewardToken; + + // rewardTokens amount per stakeToken + mapping(address stakeToken => mapping(address rewardToken => mapping(address prover => uint256 rewardPerToken))) + public rewardPerTokenStored; + + mapping( + address stakeToken + => mapping( + address rewardToken => mapping(address vault => mapping(address prover => uint256 rewardPerTokenPaid)) + ) + ) public rewardPerTokenPaid; + + // reward accrued that the vault can claim + mapping(address rewardToken => mapping(address vault => uint256 amount)) public rewardAccrued; + + uint256[500] private __gap_1; + + //---------------------------------------- State Variable end ----------------------------------------// + + //---------------------------------------- Init start ----------------------------------------// + + function initialize(address _admin, address _proofMarketplace, address _symbioticStaking, address _feeRewardToken) + public + initializer + { + __Context_init_unchained(); + __ERC165_init_unchained(); + __AccessControl_init_unchained(); + __UUPSUpgradeable_init_unchained(); + __ReentrancyGuard_init_unchained(); + __ReentrancyGuard_init_unchained(); + + _grantRole(DEFAULT_ADMIN_ROLE, _admin); + + require(_proofMarketplace != address(0), Error.ZeroProofMarketplaceAddress()); + proofMarketplace = _proofMarketplace; + emit ProofMarketplaceSet(_proofMarketplace); + + require(_symbioticStaking != address(0), Error.ZeroSymbioticStakingAddress()); + symbioticStaking = _symbioticStaking; + emit SymbioticStakingSet(_symbioticStaking); + + require(_feeRewardToken != address(0), Error.ZeroTokenAddress()); + feeRewardToken = _feeRewardToken; + emit FeeRewardTokenSet(_feeRewardToken); + } + + //---------------------------------------- Init end ----------------------------------------// + + //---------------------------------------- Reward Claim start ----------------------------------------// + + // TODO: Vault -> Claimer address + /// @notice vault can claim reward accrued + function claimReward(address _prover) external whenNotPaused nonReentrant { + address[] memory stakeTokenList = _getStakeTokenList(); + + // update rewardPerTokenPaid and rewardAccrued for each vault + _updateVaultReward(stakeTokenList, _msgSender(), _prover); + + for (uint256 i = 0; i < stakeTokenList.length; i++) {} + // transfer fee reward to the vault + uint256 feeRewardAmount = rewardAccrued[feeRewardToken][_msgSender()]; + if (feeRewardAmount > 0) { + ProofMarketplace(proofMarketplace).transferFeeToken(_msgSender(), feeRewardAmount); + rewardAccrued[feeRewardToken][_msgSender()] = 0; + } + + emit RewardClaimed(_prover, feeRewardAmount); + } + + function _getStakeTokenList() internal view returns (address[] memory) { + return ISymbioticStaking(symbioticStaking).getStakeTokenList(); + } + + //---------------------------------------- Reward Claim end ----------------------------------------// + + //---------------------------------------- SYMBIOTIC_STAKING_ROLE start ----------------------------------------// + + /// @notice called when fee reward is generated + /// @dev called by ProofMarketplace when task is completed + function updateFeeReward(address _stakeToken, address _prover, uint256 _rewardAmount) + external + onlyRole(SYMBIOTIC_STAKING_ROLE) + { + uint256 proverStakeAmount = _getProverStakeAmount(_stakeToken, _prover); + if (proverStakeAmount > 0) { + uint256 rewardPerTokenAdded = Math.mulDiv(_rewardAmount, 1e18, proverStakeAmount); + rewardPerTokenStored[_stakeToken][feeRewardToken][_prover] += rewardPerTokenAdded; + + emit RewardDistributed(_stakeToken, _prover, _rewardAmount); + + emit RewardPerTokenUpdated( + _stakeToken, feeRewardToken, _prover, rewardPerTokenStored[_stakeToken][feeRewardToken][_prover] + ); + } + } + + function onSnapshotSubmission(address _vault, address _prover) external onlyRole(SYMBIOTIC_STAKING_ROLE) { + _updateVaultReward(_getStakeTokenList(), _vault, _prover); + } + + function _getProverStakeAmount(address _stakeToken, address _prover) internal view returns (uint256) { + return ISymbioticStaking(symbioticStaking).getProverStakeAmount(_stakeToken, _prover); + } + + /// @dev update rewardPerToken and rewardAccrued for each vault + function _updateVaultReward(address[] memory _stakeTokenList, address _vault, address _prover) internal { + uint256 rewardToAdd; + for (uint256 i = 0; i < _stakeTokenList.length; i++) { + address stakeToken = _stakeTokenList[i]; + + /* fee reward */ + uint256 proverRewardPerTokenStored = rewardPerTokenStored[stakeToken][feeRewardToken][_prover]; + uint256 vaultRewardPerTokenPaid = rewardPerTokenPaid[stakeToken][feeRewardToken][_vault][_prover]; + + // update reward accrued for the vault + rewardToAdd += Math.mulDiv( + _getVaultStakeAmount(stakeToken, _vault, _prover), + proverRewardPerTokenStored - vaultRewardPerTokenPaid, + 1e18 + ); + + // update rewardPerTokenPaid of the vault + rewardPerTokenPaid[stakeToken][feeRewardToken][_vault][_prover] = proverRewardPerTokenStored; + } + + if (rewardToAdd > 0) { + rewardAccrued[feeRewardToken][_vault] += rewardToAdd; + emit RewardAccrued(feeRewardToken, _vault, rewardToAdd); + } + } + + function _getVaultStakeAmount(address _stakeToken, address _vault, address _prover) + internal + view + returns (uint256) + { + return ISymbioticStaking(symbioticStaking).getStakeAmount(_stakeToken, _vault, _prover); + } + + //---------------------------------------- SYMBIOTIC_STAKING_ROLE end ----------------------------------------// + + //---------------------------------------- Getter start ----------------------------------------// + + function getFeeRewardAccrued(address _vault) external view returns (uint256) { + return rewardAccrued[feeRewardToken][_vault]; + } + + //---------------------------------------- Getter end ----------------------------------------// + + //---------------------------------------- DEFAULT_ADMIN_ROLE start ----------------------------------------// + + function setProofMarketplace(address _proofMarketplace) public onlyRole(DEFAULT_ADMIN_ROLE) { + proofMarketplace = _proofMarketplace; + emit ProofMarketplaceSet(_proofMarketplace); + } + + function setSymbioticStaking(address _symbioticStaking) public onlyRole(DEFAULT_ADMIN_ROLE) { + symbioticStaking = _symbioticStaking; + emit SymbioticStakingSet(_symbioticStaking); + } + + function setStakingPool(address _symbioticStaking) public onlyRole(DEFAULT_ADMIN_ROLE) { + symbioticStaking = _symbioticStaking; + emit StakingPoolSet(_symbioticStaking); + } + + function setFeeRewardToken(address _feeRewardToken) public onlyRole(DEFAULT_ADMIN_ROLE) { + feeRewardToken = _feeRewardToken; + emit FeeRewardTokenSet(_feeRewardToken); + } + + function emergencyWithdraw(address _token, address _to) public onlyRole(DEFAULT_ADMIN_ROLE) { + require(_token != address(0), Error.ZeroTokenAddress()); + require(_to != address(0), Error.ZeroToAddress()); + + IERC20(_token).safeTransfer(_to, IERC20(_token).balanceOf(address(this))); + } + + //---------------------------------------- DEFAULT_ADMIN_ROLE end ----------------------------------------// + + //---------------------------------------- Override start ----------------------------------------// + + function supportsInterface(bytes4 _interfaceId) public view virtual override returns (bool) { + return super.supportsInterface(_interfaceId); + } + + function _authorizeUpgrade(address /*account*/ ) internal view override onlyRole(DEFAULT_ADMIN_ROLE) {} + + //---------------------------------------- Override end ----------------------------------------// +} diff --git a/contracts/verifierWrappers/plonk_vk_wrapper.sol b/contracts/verifierWrappers/plonk_vk_wrapper.sol index 68b6b70..646d159 100644 --- a/contracts/verifierWrappers/plonk_vk_wrapper.sol +++ b/contracts/verifierWrappers/plonk_vk_wrapper.sol @@ -1,10 +1,12 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "../interfaces/IVerifier.sol"; -import "../interfaces/SetPmp.sol"; +pragma solidity 0.8.26; +import {IVerifier} from "../interfaces/IVerifier.sol"; +import {SetPmp} from "../interfaces/SetPmp.sol"; +import {IProofMarketplace} from "../interfaces/IProofMarketplace.sol"; +import {Struct} from "../lib/Struct.sol"; +import {Enum} from "../lib/Enum.sol"; interface i_plonk_vk { function verify(bytes calldata _proof, bytes32[] calldata _publicInputs) external view returns (bool); } @@ -25,23 +27,23 @@ contract plonk_verifier_wrapper is SetPmp, IVerifier { } function createRequest( - ProofMarketplace.Ask calldata ask, - ProofMarketplace.SecretType secretType, + Struct.Bid calldata bid, + Enum.SecretType secretType, bytes calldata secret_inputs, bytes calldata acl, - bytes calldata extraData + bytes calldata extra_data ) public { - ProofMarketplace.Ask memory newAsk = ProofMarketplace.Ask( - ask.marketId, - ask.reward, - ask.expiry, - ask.timeTakenForProofGeneration, - ask.deadline, - ask.refundAddress, - encodeInputs(verifyAndDecodeInputs(ask.proverData)) + Struct.Bid memory newBid = Struct.Bid( + bid.marketId, + bid.reward, + bid.expiry, + bid.timeForProofGeneration, + bid.deadline, + bid.refundAddress, + encodeInputs(verifyAndDecodeInputs(bid.proverData)) ); - proofMarketplace.createAsk(newAsk, secretType, secret_inputs, acl, extraData); + proofMarketplace.createBid(newBid, secretType, secret_inputs, acl, extra_data); } function verifyAndDecodeInputs(bytes calldata inputs) internal pure returns (bytes32[] memory) { diff --git a/contracts/verifierWrappers/tee_verifier_wrapper.sol b/contracts/verifierWrappers/tee_verifier_wrapper.sol index 5167ac2..9232c10 100644 --- a/contracts/verifierWrappers/tee_verifier_wrapper.sol +++ b/contracts/verifierWrappers/tee_verifier_wrapper.sol @@ -1,11 +1,16 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.26; -import "../interfaces/IVerifier.sol"; -import "../lib/Error.sol"; -import "../lib/Helper.sol"; -import "../periphery/AttestationAuther.sol"; +import {IVerifier} from "../interfaces/IVerifier.sol"; +import {IAttestationVerifier} from "../periphery/interfaces/IAttestationVerifier.sol"; + +import {Error} from "../lib/Error.sol"; +import {HELPER} from "../lib/Helper.sol"; +import {AttestationAuther} from "../periphery/AttestationAuther.sol"; +import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import {Struct} from "../lib/Struct.sol"; +import {Enum} from "../lib/Enum.sol"; contract tee_verifier_wrapper_factory { event TeeVerifierWrapperCreated(tee_verifier_wrapper a); @@ -93,6 +98,7 @@ contract tee_verifier_wrapper is AttestationAuther, IVerifier { } error InvalidInputs(); + error TeeVerifierEnclaveKeyNotVerified(bytes PCR0, bytes PCR1, bytes PCR2); function verify(bytes memory encodedData) public view override returns (bool) { (bytes memory proverData, bytes memory completeProof) = abi.decode(encodedData, (bytes, bytes)); @@ -117,7 +123,7 @@ contract tee_verifier_wrapper is AttestationAuther, IVerifier { bytes32 ethSignedMessageHash = messageHash.GET_ETH_SIGNED_HASHED_MESSAGE(); - address signer = ECDSAUpgradeable.recover(ethSignedMessageHash, proofSignature); + address signer = ECDSA.recover(ethSignedMessageHash, proofSignature); if (signer == address(0)) { revert Error.InvalidEnclaveSignature(signer); } @@ -156,7 +162,7 @@ contract tee_verifier_wrapper is AttestationAuther, IVerifier { // compute image id in proper way bool verificationResult = _verifyEnclaveKey(attestation, IAttestationVerifier.Attestation(enclaveKey, PCR0, PCR1, PCR2, timestamp)); if (!verificationResult) { - revert Error.TeeVerifierEnclaveKeyNotVerified(PCR0, PCR1, PCR2); + revert TeeVerifierEnclaveKeyNotVerified(PCR0, PCR1, PCR2); } } } diff --git a/contracts/verifierWrappers/transfer_verifier_wrapper.sol b/contracts/verifierWrappers/transfer_verifier_wrapper.sol index dc2dbcc..b086802 100644 --- a/contracts/verifierWrappers/transfer_verifier_wrapper.sol +++ b/contracts/verifierWrappers/transfer_verifier_wrapper.sol @@ -1,10 +1,11 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "../interfaces/SetPmp.sol"; -import "../interfaces/IVerifier.sol"; +pragma solidity 0.8.26; +import {SetPmp} from "../interfaces/SetPmp.sol"; +import {IVerifier} from "../interfaces/IVerifier.sol"; +import {Struct} from "../lib/Struct.sol"; +import {Enum} from "../lib/Enum.sol"; interface i_transfer_verifier { function verifyProof(uint256[5] memory input, uint256[8] memory p) external view returns (bool); } @@ -28,23 +29,23 @@ contract transfer_verifier_wrapper is SetPmp, IVerifier { } function createRequest( - ProofMarketplace.Ask calldata ask, - ProofMarketplace.SecretType secretType, + Struct.Bid calldata bid, + Enum.SecretType secretType, bytes calldata secret_inputs, bytes calldata acl, - bytes calldata extraData + bytes calldata extra_data ) public { - ProofMarketplace.Ask memory newAsk = ProofMarketplace.Ask( - ask.marketId, - ask.reward, - ask.expiry, - ask.timeTakenForProofGeneration, - ask.deadline, - ask.refundAddress, - encodeInputs(verifyAndDecodeInputs(ask.proverData)) + Struct.Bid memory newBid = Struct.Bid( + bid.marketId, + bid.reward, + bid.expiry, + bid.timeForProofGeneration, + bid.deadline, + bid.refundAddress, + encodeInputs(verifyAndDecodeInputs(bid.proverData)) ); - proofMarketplace.createAsk(newAsk, secretType, abi.encode(secret_inputs), abi.encode(acl), extraData); + proofMarketplace.createBid(newBid, secretType, abi.encode(secret_inputs), abi.encode(acl), extra_data); } function verifyAndDecodeInputs(bytes calldata inputs) internal pure returns (uint256[5] memory) { diff --git a/contracts/verifierWrappers/xor2_verifier_wrapper.sol b/contracts/verifierWrappers/xor2_verifier_wrapper.sol index c22402b..61ef863 100644 --- a/contracts/verifierWrappers/xor2_verifier_wrapper.sol +++ b/contracts/verifierWrappers/xor2_verifier_wrapper.sol @@ -1,9 +1,11 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.26; -import "../interfaces/SetPmp.sol"; -import "../interfaces/IVerifier.sol"; +import {SetPmp} from "../interfaces/SetPmp.sol"; +import {IVerifier} from "../interfaces/IVerifier.sol"; +import {Struct} from "../lib/Struct.sol"; +import {Enum} from "../lib/Enum.sol"; interface i_xor2_verifier { function verifyProof(uint[2] memory a, uint[2][2] memory b, uint[2] memory c, uint[1] memory input) external view returns (bool); @@ -22,23 +24,23 @@ contract xor2_verifier_wrapper is SetPmp, IVerifier { } function createRequest( - ProofMarketplace.Ask calldata ask, - ProofMarketplace.SecretType secretType, + Struct.Bid calldata bid, + Enum.SecretType secretType, bytes calldata secret_inputs, bytes calldata acl, - bytes calldata extraData + bytes calldata extra_data ) public { - ProofMarketplace.Ask memory newAsk = ProofMarketplace.Ask( - ask.marketId, - ask.reward, - ask.expiry, - ask.timeTakenForProofGeneration, - ask.deadline, - ask.refundAddress, - encodeInputs(verifyAndDecodeInputs(ask.proverData)) + Struct.Bid memory newBid = Struct.Bid( + bid.marketId, + bid.reward, + bid.expiry, + bid.timeForProofGeneration, + bid.deadline, + bid.refundAddress, + encodeInputs(verifyAndDecodeInputs(bid.proverData)) ); - proofMarketplace.createAsk(newAsk, secretType, abi.encode(secret_inputs), abi.encode(acl), extraData); + proofMarketplace.createBid(newBid, secretType, abi.encode(secret_inputs), abi.encode(acl), extra_data); } function verifyAndDecodeInputs(bytes calldata inputs) internal pure returns (uint[1] memory) { diff --git a/contracts/verifierWrappers/zksync_verifier_wrapper.sol b/contracts/verifierWrappers/zksync_verifier_wrapper.sol index 10c362b..3839132 100644 --- a/contracts/verifierWrappers/zksync_verifier_wrapper.sol +++ b/contracts/verifierWrappers/zksync_verifier_wrapper.sol @@ -1,8 +1,10 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.26; -import "../interfaces/IVerifier.sol"; +import {IVerifier} from "../interfaces/IVerifier.sol"; +import {Struct} from "../lib/Struct.sol"; +import {Enum} from "../lib/Enum.sol"; interface i_zksync_verifier { function verify(uint256[] calldata, uint256[] calldata, uint256[] calldata) external view returns (bool); diff --git a/contracts/verifiers/zkb_verifier.sol b/contracts/verifiers/zkb_verifier.sol new file mode 100644 index 0000000..220bc08 --- /dev/null +++ b/contracts/verifiers/zkb_verifier.sol @@ -0,0 +1,223 @@ +pragma solidity ^0.6.0; + +library Pairing { + uint256 constant PRIME_Q = 21888242871839275222246405745257275088696311157297823662689037894645226208583; + + struct G1Point { + uint256 X; + uint256 Y; + } + + // Encoding of field elements is: X[0] * z + X[1] + struct G2Point { + uint256[2] X; + uint256[2] Y; + } + + /* + * @return The negation of p, i.e. p.plus(p.negate()) should be zero. + */ + function negate(G1Point memory p) internal pure returns (G1Point memory) { + // The prime q in the base field F_q for G1 + if (p.X == 0 && p.Y == 0) { + return G1Point(0, 0); + } else { + return G1Point(p.X, PRIME_Q - (p.Y % PRIME_Q)); + } + } + + /* + * @return r the sum of two points of G1 + */ + function plus(G1Point memory p1, G1Point memory p2) internal view returns (G1Point memory r) { + uint256[4] memory input; + input[0] = p1.X; + input[1] = p1.Y; + input[2] = p2.X; + input[3] = p2.Y; + bool success; + // solium-disable-next-line security/no-inline-assembly + assembly { + success := staticcall(sub(gas(), 2000), 6, input, 0xc0, r, 0x60) + // Use "invalid" to make gas estimation work + switch success + case 0 { + invalid() + } + } + require(success, "pairing-add-failed"); + } + + /* + * @return r the product of a point on G1 and a scalar, i.e. + * p == p.scalar_mul(1) and p.plus(p) == p.scalar_mul(2) for all + * points p. + */ + function scalar_mul(G1Point memory p, uint256 s) internal view returns (G1Point memory r) { + uint256[3] memory input; + input[0] = p.X; + input[1] = p.Y; + input[2] = s; + bool success; + // solium-disable-next-line security/no-inline-assembly + assembly { + success := staticcall(sub(gas(), 2000), 7, input, 0x80, r, 0x60) + // Use "invalid" to make gas estimation work + switch success + case 0 { + invalid() + } + } + require(success, "pairing-mul-failed"); + } + + /* @return The result of computing the pairing check + * e(p1[0], p2[0]) * .... * e(p1[n], p2[n]) == 1 + * For example, + * pairing([P1(), P1().negate()], [P2(), P2()]) should return true. + */ + function pairing( + G1Point memory a1, + G2Point memory a2, + G1Point memory b1, + G2Point memory b2, + G1Point memory c1, + G2Point memory c2, + G1Point memory d1, + G2Point memory d2 + ) internal view returns (bool) { + G1Point[4] memory p1 = [a1, b1, c1, d1]; + G2Point[4] memory p2 = [a2, b2, c2, d2]; + uint256 inputSize = 24; + uint256[] memory input = new uint256[](inputSize); + for (uint256 i = 0; i < 4; i++) { + uint256 j = i * 6; + input[j + 0] = p1[i].X; + input[j + 1] = p1[i].Y; + input[j + 2] = p2[i].X[0]; + input[j + 3] = p2[i].X[1]; + input[j + 4] = p2[i].Y[0]; + input[j + 5] = p2[i].Y[1]; + } + uint256[1] memory out; + bool success; + // solium-disable-next-line security/no-inline-assembly + assembly { + success := staticcall(sub(gas(), 2000), 8, add(input, 0x20), mul(inputSize, 0x20), out, 0x20) + // Use "invalid" to make gas estimation work + switch success + case 0 { + invalid() + } + } + require(success, "pairing-opcode-failed"); + return out[0] != 0; + } +} + +contract ZkbVerifier { + uint256 constant SNARK_SCALAR_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617; + uint256 constant PRIME_Q = 21888242871839275222246405745257275088696311157297823662689037894645226208583; + + using Pairing for *; + + struct VerifyingKey { + Pairing.G1Point alfa1; + Pairing.G2Point beta2; + Pairing.G2Point gamma2; + Pairing.G2Point delta2; + Pairing.G1Point[6] IC; + } + + struct Proof { + Pairing.G1Point A; + Pairing.G2Point B; + Pairing.G1Point C; + } + + function verifyingKey() internal pure returns (VerifyingKey memory vk) { + vk.alfa1 = Pairing.G1Point( + 17259644642628619054198707088350178151915223546531204588599012585652862256289, + 6538916430504110934790598121254623711490867458521598147771684120236145100336 + ); + vk.beta2 = Pairing.G2Point( + [ + uint256(11097434194162826858949644387544008701579694224939913271486290330733219134420), + 6010942275679443033856179065724641913553695310529001864983746063540149145812 + ], + [ + uint256(19013261012401115818773510381885163557486260979365651129010452890236255493703), + 11314427763437581543307480788475949801872673194176472756000669236569465847384 + ] + ); + vk.gamma2 = Pairing.G2Point( + [ + uint256(11559732032986387107991004021392285783925812861821192530917403151452391805634), + 10857046999023057135944570762232829481370756359578518086990519993285655852781 + ], + [ + uint256(4082367875863433681332203403145435568316851327593401208105741076214120093531), + 8495653923123431417604973247489272438418190587263600148770280649306958101930 + ] + ); + vk.delta2 = Pairing.G2Point( + [ + uint256(18423987291968971239578001872085724771290921842285100359710316985575986166742), + 7450373544559680085640870549460861848228753225332217077587909382204549485740 + ], + [ + uint256(14546106862273780852380541990647904233979512856038180721838086990706784580791), + 11764284714870120245619544741973483651026859462573491091739755304150190866020 + ] + ); + vk.IC[0] = Pairing.G1Point( + 6022690279576701967700939930549416332882035871731987826600176966197770327986, + 13211922586700016170154920103356971642096193319206092346563280217165266338375 + ); + vk.IC[1] = Pairing.G1Point( + 12656010021638130374544751608367308147652398841229146391750372999223977472627, + 6097802916879157910919689310035915815126050278839846888084130930778103255644 + ); + vk.IC[2] = Pairing.G1Point( + 13025760272413740765163372087115247802875100685343452493823036523107908187556, + 6386538804803039919018573915864226946973288227753088648819359340311462795888 + ); + vk.IC[3] = Pairing.G1Point( + 14150560204844217826745733083852297514199137441377019824598974901482516655831, + 18495855973518081366759135506514124230319591139744706666478206827280107404907 + ); + vk.IC[4] = Pairing.G1Point( + 13728203604263399070412765415971093962322458880033547572104319988519302253193, + 17941329588589657782744903855538576601561450833293831316032474930373424267626 + ); + vk.IC[5] = Pairing.G1Point( + 11757052607808062879180261379200609730904279947080518073582213181864321504601, + 5606142802020413103915078393134363563092395563550606569170076315674079622043 + ); + } + + /* + * @returns Whether the proof is valid given the hardcoded verifying key + * above and the public inputs + */ + function verifyProof(uint256[5] memory input, uint256[8] memory p) public view returns (bool) { + // Make sure that each element in the proof is less than the prime q + for (uint8 i = 0; i < p.length; i++) { + require(p[i] < PRIME_Q, "verifier-proof-element-gte-prime-q"); + } + Proof memory _proof; + _proof.A = Pairing.G1Point(p[0], p[1]); + _proof.B = Pairing.G2Point([p[3], p[2]], [p[5], p[4]]); + _proof.C = Pairing.G1Point(p[6], p[7]); + VerifyingKey memory vk = verifyingKey(); + // Compute the linear combination vk_x + Pairing.G1Point memory vk_x = Pairing.G1Point(0, 0); + vk_x = Pairing.plus(vk_x, vk.IC[0]); + // Make sure that every input is less than the snark scalar field + for (uint256 i = 0; i < input.length; i++) { + require(input[i] < SNARK_SCALAR_FIELD, "verifier-gte-snark-scalar-field"); + vk_x = Pairing.plus(vk_x, Pairing.scalar_mul(vk.IC[i + 1], input[i])); + } + return Pairing.pairing(Pairing.negate(_proof.A), _proof.B, vk.alfa1, vk.beta2, vk_x, vk.gamma2, _proof.C, vk.delta2); + } +} diff --git a/errorSig.py b/errorSig.py index 8ffbd92..6b90335 100644 --- a/errorSig.py +++ b/errorSig.py @@ -57,7 +57,7 @@ "OnlyExpiredAsksCanBeCancelled(uint256)", "OnlyAssignedAsksCanBeProved(uint256)", "InvalidProof(uint256)", - "ShouldBeInCrossedDeadlineState(uint256)", + "DeadlineNotCrossed(uint256)", "ShouldBeInAssignedState(uint256)", "OnlyGeneratorCanDiscardRequest(uint256)", "InvalidEnclaveSignature()", @@ -70,7 +70,78 @@ "ECDSAInvalidSignature()", "ECDSAInvalidSignatureLength(uint256)", "ECDSAInvalidSignatureS(bytes32)", - "AttestationVerifierAttestationTooOld()" + + # Administrative and Miscellaneous Errors + "OnlyAdminCanCall()", + "CannotBeAdminLess()", + "CannotBeZero()", + "CannotBeSlashed()", + "InsufficientStakeToLock()", + "EnclaveKeyNotVerified()", + "ExceedsAcceptableRange()", + "InvalidContractAddress()", + "CannotUseMatchingEngineRole()", + "InvalidEnclaveSignature(address)", + "IncorrectImageId()", + "AttestationTimeout()", + "InvalidECIESACL()", + "BlacklistedImage(bytes32)", + "AlreadyABlacklistedImage(bytes32)", + "MustBeAnEnclave(bytes32)", + "FailedWhitelistingImages(bytes32)", + "FailedAddingToFamily(bytes32,bytes32)", + "InferredImageIdIsDifferent()", + "ImageAlreadyInFamily(bytes32,bytes32)", + "GeneratorAlreadyExists()", + "InvalidGenerator()", + "CannotLeaveWithActiveMarket()", + "AssignOnlyToIdleGenerators()", + "InsufficientGeneratorComputeAvailable()", + "OnlyWorkingGenerators()", + "InvalidEnclaveKey()", + "OnlyValidGeneratorsCanRequestExit()", + "InvalidGeneratorStatePerMarket()", + "UnstakeRequestNotInPlace()", + "ReduceComputeRequestNotInPlace()", + "MaxParallelRequestsPerMarketExceeded()", + "KeyAlreadyExists(address)", + "ReductionRequestNotValid()", + "PublicMarketsDontNeedKey()", + "CannotModifyImagesForPublicMarkets()", + "InvalidMarket()", + "AlreadyJoinedMarket()", + "CannotBeMoreThanDeclaredCompute()", + "CannotLeaveMarketWithActiveRequest()", + "MarketAlreadyExists()", + "InactiveMarket()", + "OnlyMarketCreator()", + "CannotRemoveDefaultImageFromMarket(uint256,bytes32)", + "CannotAssignExpiredTasks()", + "InvalidInputs()", + "ArityMismatch()", + "OnlyMatchingEngineCanAssign()", + "RequestAlreadyInPlace()", + "CannotSlashUsingValidInputs(uint256)", + "ShouldBeInCreateState()", + "ProofPriceMismatch(uint256)", + "ProofTimeMismatch(uint256)", + "OnlyExpiredAsksCanBeCancelled(uint256)", + "OnlyAssignedAsksCanBeProved(uint256)", + "InvalidProof(uint256)", + "DeadlineNotCrossed(uint256)", + "ShouldBeInAssignedState(uint256)", + "OnlyGeneratorCanDiscardRequest(uint256)", + + # For Setters + "InvalidRewardShare()", + + "AttestationAutherPubkeyLengthInvalid()", + "AttestationAutherPCRsInvalid()", + "AttestationAutherImageNotWhitelisted()", + "AttestationAutherImageNotInFamily()", + "AttestationAutherKeyNotVerified()", + "AttestationAutherAttestationTooOld()", + "AttestationAutherMismatchedLengths()", ] # Calculate the hash for each error signature and get the first 4 bytes diff --git a/foundry.toml b/foundry.toml new file mode 100644 index 0000000..51611af --- /dev/null +++ b/foundry.toml @@ -0,0 +1,16 @@ +[profile.default] +src = "contracts" +script = "scripts/foundry" +out = "artifacts" +libs = ["lib", "node_modules"] +remappings = [ + "@openzeppelin/=node_modules/@openzeppelin/", + "eth-gas-reporter/=node_modules/eth-gas-reporter/", + "hardhat/=node_modules/hardhat/", + "forge-std/=lib/forge-std/src/", +] +auto_detect_solc = true +optimizer = true +optimizer_runs = 200 + +# See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options diff --git a/hardhat.config.ts b/hardhat.config.ts index b24baca..6ec0914 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -1,14 +1,17 @@ -import { HardhatUserConfig, task } from "hardhat/config"; import "@nomicfoundation/hardhat-toolbox"; import "@openzeppelin/hardhat-upgrades"; import "@nomicfoundation/hardhat-chai-matchers"; - import "hardhat-gas-reporter"; import "solidity-coverage"; +import "hardhat-tracer"; -import { config as dotenvConfig } from "dotenv"; - +// tenderly.setup(); import BigNumber from "bignumber.js"; +import { config as dotenvConfig } from "dotenv"; +import { + HardhatUserConfig, + task, +} from "hardhat/config"; dotenvConfig(); @@ -24,6 +27,16 @@ task("accounts", "Prints the list of accounts", async (taskArgs, hre) => { const config: HardhatUserConfig = { solidity: { compilers: [ + { + version: "0.8.26", + settings: { + viaIR: true, + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, { version: "0.8.24", settings: { @@ -54,7 +67,7 @@ const config: HardhatUserConfig = { ], }, gasReporter: { - enabled: false, + enabled: (process.env.REPORT_GAS == "true") ? true : false, gasPrice: 1, coinmarketcap: process.env.COIN_MARKET_CAP, }, @@ -62,7 +75,8 @@ const config: HardhatUserConfig = { apiKey: { mainnet: `${process.env.ETHERSCAN_API_KEY}`, arbSepolia: `${process.env.ARB_SEPOLIA_API_KEY}`, - arbitrumOne: `${process.env.ARB_ONE_API_KEY}`, + arbitrumOne: `${process.env.ARBISCAN_API_KEY}`, + holesky: `${process.env.ETHERSCAN_API_KEY}`, }, customChains: [ { @@ -73,6 +87,14 @@ const config: HardhatUserConfig = { browserURL: "https://sepolia.arbiscan.io/", }, }, + { + network: "holesky", + chainId: 17000, + urls: { + apiURL: "https://api-holesky.etherscan.io/api", + browserURL: "https://holesky.etherscan.io/", + }, + } ], }, mocha: { @@ -82,62 +104,114 @@ const config: HardhatUserConfig = { hardhat: { blockGasLimit: 500000000000, }, - sepolia: { - url: `${process.env.SEPOLIA_RPC_URL}`, - // NOTE: don't change the order of elements in the array, add new elements at the last. - accounts: [ - `${process.env.SEPOLIA_ADMIN}`, - `${process.env.SEPOLIA_TOKEN_HOLDER}`, - `${process.env.SEPOLIA_TREASURY}`, - `${process.env.SEPOLIA_MARKET_CREATOR}`, - `${process.env.SEPOLIA_GENERATOR}`, - `${process.env.SEPOLIA_MATCHING_ENGINE}`, - `${process.env.SEPOLIA_PROOF_REQUESTOR}`, - ], - }, - arbSepolia: { - url: `${process.env.ARB_SEPOLIA_RPC_URL}`, + mainnet: { + url: `${process.env.MAINNET_RPC_URL}`, accounts: [ - `${process.env.SEPOLIA_ADMIN}`, - `${process.env.SEPOLIA_TOKEN_HOLDER}`, - `${process.env.SEPOLIA_TREASURY}`, - `${process.env.SEPOLIA_MARKET_CREATOR}`, - `${process.env.SEPOLIA_GENERATOR}`, - `${process.env.SEPOLIA_MATCHING_ENGINE}`, - `${process.env.SEPOLIA_PROOF_REQUESTOR}`, + `${process.env.MAINNET_DEPLOYER}`, ], }, - nova: { - url: `${process.env.NOVA_RPC_URL}`, + holesky: { + url: `${process.env.HOLESKY_RPC_URL}`, accounts: [ - `${process.env.NOVA_ADMIN}`, - `${process.env.NOVA_TOKEN_HOLDER}`, - `${process.env.NOVA_TREASURY}`, - `${process.env.NOVA_MARKET_CREATOR}`, - `${process.env.NOVA_GENERATOR}`, - `${process.env.NOVA_MATCHING_ENGINE}`, - `${process.env.NOVA_PROOF_REQUESTOR}`, - ], + `${process.env.HOLESKY_ADMIN}`, + `${process.env.HOLESKY_DEPLOYER}`, + + ] }, - kalypso: { - url: `${process.env.KALYPSO_RPC_URL}`, + arbSepolia: { + url: `${process.env.ARBITRUM_SEPOLIA_RPC_URL}`, accounts: [ - `${process.env.SEPOLIA_ADMIN}`, - `${process.env.SEPOLIA_TOKEN_HOLDER}`, - `${process.env.SEPOLIA_TREASURY}`, - `${process.env.SEPOLIA_MARKET_CREATOR}`, - `${process.env.SEPOLIA_GENERATOR}`, - `${process.env.SEPOLIA_MATCHING_ENGINE}`, - `${process.env.SEPOLIA_PROOF_REQUESTOR}`, + `${process.env.ARBITRUM_SEPOLIA_ADMIN_KEY}`, ], + forking: { + url: `${process.env.ARBITRUM_SEPOLIA_RPC_URL}`, + }, + chainId: 421614, }, - arbone: { - url: `${process.env.ARB_ONE_RPC_URL}`, + // kalypso: { + // url: `${process.env.KALYPSO_RPC_URL}`, + // accounts: [ + // `${process.env.SEPOLIA_ADMIN}`, + // `${process.env.SEPOLIA_TOKEN_HOLDER}`, + // `${process.env.SEPOLIA_TREASURY}`, + // `${process.env.SEPOLIA_MARKET_CREATOR}`, + // `${process.env.SEPOLIA_GENERATOR}`, + // `${process.env.SEPOLIA_MATCHING_ENGINE}`, + // `${process.env.SEPOLIA_PROOF_REQUESTOR}`, + // ], + // }, + arbOne: { + url: `${process.env.ARBITRUM_ONE_RPC_URL}`, accounts: [ - `${process.env.ARB_ONE_ADMIN}`, + `${process.env.ARBITRUM_ONE_DEPLOYER}`, ], + chainId: 42161, } + // sepolia: { + // url: `${process.env.SEPOLIA_RPC_URL}`, + // // NOTE: don't change the order of elements in the array, add new elements at the last. + // accounts: [ + // `${process.env.SEPOLIA_ADMIN}`, + // `${process.env.SEPOLIA_TOKEN_HOLDER}`, + // `${process.env.SEPOLIA_TREASURY}`, + // `${process.env.SEPOLIA_MARKET_CREATOR}`, + // `${process.env.SEPOLIA_PROVER}`, + // `${process.env.SEPOLIA_MATCHING_ENGINE}`, + // `${process.env.SEPOLIA_PROOF_REQUESTOR}`, + // ], + // }, + // arbSepolia: { + // url: `${process.env.ARB_SEPOLIA_RPC_URL}`, + // accounts: [ + // `${process.env.SEPOLIA_ADMIN}`, + // `${process.env.SEPOLIA_TOKEN_HOLDER}`, + // `${process.env.SEPOLIA_TREASURY}`, + // `${process.env.SEPOLIA_MARKET_CREATOR}`, + // `${process.env.SEPOLIA_PROVER}`, + // `${process.env.SEPOLIA_MATCHING_ENGINE}`, + // `${process.env.SEPOLIA_PROOF_REQUESTOR}`, + // ], + // }, + // nova: { + // url: `${process.env.NOVA_RPC_URL}`, + // accounts: [ + // `${process.env.NOVA_ADMIN}`, + // `${process.env.NOVA_TOKEN_HOLDER}`, + // `${process.env.NOVA_TREASURY}`, + // `${process.env.NOVA_MARKET_CREATOR}`, + // `${process.env.NOVA_PROVER}`, + // `${process.env.NOVA_MATCHING_ENGINE}`, + // `${process.env.NOVA_PROOF_REQUESTOR}`, + // ], + // }, + // zksync: { + // url: `${process.env.ZKSYNC_URL}`, + // accounts: [ + // `${process.env.ZKSYNC_ADMIN}`, + // `${process.env.ZKSYNC_TOKEN_HOLDER}`, + // `${process.env.ZKSYNC_TREASURY}`, + // `${process.env.ZKSYNC_MARKET_CREATOR}`, + // `${process.env.ZKSYNC_PROVER}`, + // `${process.env.ZKSYNC_MATCHING_ENGINE}`, + // `${process.env.ZKSYNC_PROOF_REQUESTOR}`, + // ], + // }, + // amoy: { + // url: `${process.env.AMOY_RPC}`, + // accounts: [ + // `${process.env.AMOY_ADMIN}`, + // `${process.env.AMOY_TOKEN_HOLDER}`, + // `${process.env.AMOY_TREASURY}`, + // `${process.env.AMOY_MARKET_CREATOR}`, + // `${process.env.AMOY_PROVER}`, + // `${process.env.AMOY_MATCHING_ENGINE}`, + // `${process.env.AMOY_PROOF_REQUESTOR}`, + // ], + // }, }, + mocha: { + timeout: 100000 + } }; export default config; diff --git a/helpers/index.ts b/helpers/index.ts index 1d021b5..f706ad3 100644 --- a/helpers/index.ts +++ b/helpers/index.ts @@ -1,9 +1,16 @@ -import { randomBytes } from "crypto"; -import * as fs from "fs"; -import { ethers } from "hardhat"; -import { PrivateKey } from "eciesjs"; -import { AddressLike, BigNumberish, BytesLike, Signer, SigningKey } from "ethers"; -import BigNumber from "bignumber.js"; +import BigNumber from 'bignumber.js'; +import { randomBytes } from 'crypto'; +import { PrivateKey } from 'eciesjs'; +import { + AddressLike, + BigNumberish, + Block, + BytesLike, + SigningKey, +} from 'ethers'; +import * as fs from 'fs'; +import { ethers } from 'hardhat'; +import { IAttestationVerifier } from '../typechain-types'; export * as secret_operations from "./secretInputOperation"; @@ -32,8 +39,8 @@ export interface MarketData { inputOuputVerifierUrl: string; } -// TODO: Update Generator Data -export interface GeneratorData { +// TODO: Update Prover Data +export interface ProverData { name: string; // some field for him to be identified on chain } @@ -50,11 +57,11 @@ export function hexStringToMarketData(hexString: string): MarketData { return JSON.parse(data) as MarketData; } -export function generatorDataToBytes(generatorData: GeneratorData): string { - return jsonToBytes(generatorData); +export function proverDataToBytes(proverData: ProverData): string { + return jsonToBytes(proverData); } -export function hexStringToGeneratorData(hexString: string): GeneratorData { +export function hexStringToProverData(hexString: string): ProverData { return hexStringToJson(hexString); } @@ -268,7 +275,6 @@ export class MockEnclave { // Create the digest const digest = ethers.keccak256(ethers.solidityPacked(["bytes", "bytes32", "bytes32"], ["0x1901", DOMAIN_SEPARATOR, hashStruct])); - let firstStageSignature = await attestationVerifierEnclave.signMessageWithoutPrefix(ethers.getBytes(digest)); let attestationBytes = abiCoder.encode( @@ -279,6 +285,37 @@ export class MockEnclave { return attestationBytes; } + public async getMockAttestation(_lastBlock?: Block | null, _timestampInMs?: number) { + let lastBlock = _lastBlock; + let timestampInMs = _timestampInMs; + + if(!lastBlock) { + lastBlock = await ethers.provider.getBlock('latest'); + } + if(!timestampInMs) { + timestampInMs = (lastBlock?.timestamp ?? 0) * 1000; + } + + const verifiedAttestation = await this.getVerifiedAttestation(this, timestampInMs); + + const types = ["bytes", "bytes", "bytes", "bytes", "bytes", "uint256"]; + const decoded = new ethers.AbiCoder().decode(types, verifiedAttestation); + + const signature = decoded[0]; + const attestationToVerify: IAttestationVerifier.AttestationStruct = { + enclavePubKey: decoded[1], + PCR0: decoded[2], + PCR1: decoded[3], + PCR2: decoded[4], + timestampInMilliseconds:decoded[5] + } + + const types2 = ['bytes', 'tuple(bytes enclavePubKey,bytes PCR0,bytes PCR1,bytes PCR2,uint256 timestampInMilliseconds)']; + const encoded = new ethers.AbiCoder().encode(types2, [signature, attestationToVerify]); + + return encoded; + } + private generateWalletInfo(): WalletInfo { // Create a new wallet const wallet = ethers.Wallet.createRandom(); @@ -309,8 +346,8 @@ export class MockEnclave { } public async signMessageWithoutPrefix(ethHash: BytesLike): Promise { - const generatorEnclaveSigningKey = new SigningKey(this.getPrivateKey(true)); - const signature = generatorEnclaveSigningKey.sign(ethHash).serialized; + const proverEnclaveSigningKey = new SigningKey(this.getPrivateKey(true)); + const signature = proverEnclaveSigningKey.sign(ethHash).serialized; return signature; } @@ -397,7 +434,7 @@ export const MockMEPCRS: [BytesLike, BytesLike, BytesLike] = [ "0x" + "00".repeat(47) + "12", "0x" + "00".repeat(47) + "13", ]; -export const MockGeneratorPCRS: [BytesLike, BytesLike, BytesLike] = [ +export const MockProverPCRS: [BytesLike, BytesLike, BytesLike] = [ "0x" + "00".repeat(47) + "21", "0x" + "00".repeat(47) + "32", "0x" + "00".repeat(47) + "43", @@ -409,9 +446,15 @@ export const GodEnclavePCRS: [BytesLike, BytesLike, BytesLike] = [ "0x" + "00".repeat(47) + "93", ]; -export function generatorFamilyId(marketId: BigNumberish): BytesLike { +export const BridgeEnclavePCRS: [BytesLike, BytesLike, BytesLike] = [ + "0x" + "00".repeat(47) + "66", + "0x" + "00".repeat(47) + "37", + "0x" + "00".repeat(47) + "94", +]; + +export function proverFamilyId(marketId: BigNumberish): BytesLike { let abicode = new ethers.AbiCoder(); - let encoded = abicode.encode(["string", "uint256"], ["gen", marketId]); + let encoded = abicode.encode(["string", "uint256"], ["prov", marketId]); let digest = ethers.keccak256(encoded); return digest; } diff --git a/helpers/setup.ts b/helpers/setup.ts index bf89288..a15de2b 100644 --- a/helpers/setup.ts +++ b/helpers/setup.ts @@ -1,85 +1,127 @@ -import { ethers, upgrades } from "hardhat"; -import { BytesLike, Provider, Signer } from "ethers"; +import BigNumber from "bignumber.js"; +import { + BigNumberish, + Provider, + Signer, +} from "ethers"; +import { + ethers, + upgrades, +} from "hardhat"; import { + AttestationVerifier, + AttestationVerifier__factory, + EntityKeyRegistry, + EntityKeyRegistry__factory, + Error, + Error__factory, + IVerifier, MockToken, - ProofMarketplace, MockToken__factory, - ProofMarketplace__factory, - GeneratorRegistry, - GeneratorRegistry__factory, - IVerifier, + NativeStaking, + NativeStaking__factory, + POND, + POND__factory, PriorityLog, PriorityLog__factory, - EntityKeyRegistry__factory, - Error, - Error__factory, - EntityKeyRegistry, + ProofMarketplace, + ProofMarketplace__factory, + ProverManager, + ProverManager__factory, + StakingManager, + StakingManager__factory, + SymbioticStaking, + SymbioticStaking__factory, + SymbioticStakingReward, + SymbioticStakingReward__factory, + USDC__factory, + WETH, + WETH__factory, } from "../typechain-types"; -import BigNumber from "bignumber.js"; - -import { GodEnclavePCRS, MockEnclave } from "."; +import { + GodEnclavePCRS, + MockEnclave, +} from "./"; +import { Bid } from "./structTypes"; interface SetupTemplate { mockToken: MockToken; - generatorRegistry: GeneratorRegistry; + proverManager: ProverManager; proofMarketplace: ProofMarketplace; priorityLog: PriorityLog; errorLibrary: Error; entityKeyRegistry: EntityKeyRegistry; + attestationVerifier: AttestationVerifier; + + /* Staking Contracts */ + stakingManager: StakingManager; + nativeStaking: NativeStaking; + symbioticStaking: SymbioticStaking; + symbioticStakingReward: SymbioticStakingReward; } +export const stakingContractConfig = { + WITHDRAWAL_DURATION: new BigNumber(60 * 60 * 2), // 2 hours +}; + +export const exponent = new BigNumber(10).pow(18); + export const createTask = async ( matchingEngineEnclave: MockEnclave, provider: Provider | null, setupTemplate: SetupTemplate, askId: string, - generator: Signer, + prover: Signer, ) => { const matchingEngine: Signer = new ethers.Wallet(matchingEngineEnclave.getPrivateKey(true), provider); - await setupTemplate.proofMarketplace.connect(matchingEngine).assignTask(askId.toString(), await generator.getAddress(), "0x"); + await setupTemplate.proofMarketplace.connect(matchingEngine).assignTask(askId.toString(), await prover.getAddress(), "0x"); }; -export const createAsk = async ( - prover: Signer, +export const createBid = async ( + requester: Signer, tokenHolder: Signer, - ask: ProofMarketplace.AskStruct, + bid: Bid, setupTemplate: SetupTemplate, secretType: number, extraData: BytesLike = "0x", ): Promise => { - await setupTemplate.mockToken.connect(tokenHolder).transfer(await prover.getAddress(), ask.reward.toString()); + await setupTemplate.mockToken.connect(tokenHolder).transfer(await requester.getAddress(), bid.reward.toString()); - await setupTemplate.mockToken.connect(prover).approve(await setupTemplate.proofMarketplace.getAddress(), ask.reward.toString()); + await setupTemplate.mockToken.connect(requester).approve(await setupTemplate.proofMarketplace.getAddress(), bid.reward.toString()); - const askId = await setupTemplate.proofMarketplace.askCounter(); - await setupTemplate.proofMarketplace.connect(prover).createAsk(ask, secretType, "0x", "0x", extraData); + const bidId = await setupTemplate.proofMarketplace.bidCounter(); + await setupTemplate.proofMarketplace.connect(requester).createBid(bid, secretType, "0x", "0x", "0x"); - return askId.toString(); + return bidId.toString(); }; export const rawSetup = async ( admin: Signer, tokenHolder: Signer, totalTokenSupply: BigNumber, - generatorStakingAmount: BigNumber, - generatorSlashingPenalty: BigNumber, + proverStakingAmount: BigNumber, + proverSlashingPenalty: BigNumber, treasury: string, marketCreationCost: BigNumber, marketCreator: Signer, marketSetupBytes: string, _ivsUrl: string, iverifier: IVerifier, - generator: Signer, - generatorData: string, + prover: Signer, + proverData: string, ivsEnclave: MockEnclave, matchingEngineEnclave: MockEnclave, - generatorEnclave: MockEnclave, - minRewardForGenerator: BigNumber, + proverEnclave: MockEnclave, + minRewardForProver: BigNumber, totalComputeAllocation: BigNumber, computeToNewMarket: BigNumber, godEnclave?: MockEnclave, + bridgeEnclave?: MockEnclave, ): Promise => { + //-------------------------------- Contract Deployment --------------------------------// + + // PaymentToken const mockToken = await new MockToken__factory(admin).deploy( await tokenHolder.getAddress(), totalTokenSupply.toFixed(), @@ -91,8 +133,9 @@ export const rawSetup = async ( godEnclave = new MockEnclave(GodEnclavePCRS); } + // AttestationVerifier const AttestationVerifierContract = await ethers.getContractFactory("AttestationVerifier"); - const attestationVerifier = await upgrades.deployProxy( + const attestationVerifierProxy = await upgrades.deployProxy( AttestationVerifierContract, [[godEnclave.pcrs], [godEnclave.getUncompressedPubkey()], await admin.getAddress()], { @@ -100,7 +143,13 @@ export const rawSetup = async ( constructorArgs: [], }, ); + const attestationVerifier = AttestationVerifier__factory.connect(await attestationVerifierProxy.getAddress(), admin); + if (bridgeEnclave) { + await attestationVerifier.whitelistEnclaveImage(bridgeEnclave.pcrs[0], bridgeEnclave.pcrs[1], bridgeEnclave.pcrs[2]); + await attestationVerifier.whitelistEnclaveKey(bridgeEnclave.getUncompressedPubkey(), bridgeEnclave.getImageId()); + } + // EntityKeyRegistry const EntityKeyRegistryContract = await ethers.getContractFactory("EntityKeyRegistry"); const _entityKeyRegistry = await upgrades.deployProxy(EntityKeyRegistryContract, [await admin.getAddress(), []], { kind: "uups", @@ -108,38 +157,135 @@ export const rawSetup = async ( }); const entityKeyRegistry = EntityKeyRegistry__factory.connect(await _entityKeyRegistry.getAddress(), admin); - const GeneratorRegistryContract = await ethers.getContractFactory("GeneratorRegistry"); - const generatorProxy = await upgrades.deployProxy(GeneratorRegistryContract, [], { + // StakingManager + const StakingManagerContract = await ethers.getContractFactory("StakingManager"); + const stakingManagerProxy = await upgrades.deployProxy(StakingManagerContract, [], { + kind: "uups", + constructorArgs: [], + initializer: false, + }); + const stakingManager = StakingManager__factory.connect(await stakingManagerProxy.getAddress(), admin); + + // ProverManager + const ProverManagerContract = await ethers.getContractFactory("ProverManager"); + const proverManagerProxy = await upgrades.deployProxy(ProverManagerContract, [], { kind: "uups", - constructorArgs: [await mockToken.getAddress(), await entityKeyRegistry.getAddress()], initializer: false, }); - const generatorRegistry = GeneratorRegistry__factory.connect(await generatorProxy.getAddress(), admin); + const proverManager = ProverManager__factory.connect(await proverManagerProxy.getAddress(), admin); + // ProofMarketplace const ProofMarketplace = await ethers.getContractFactory("ProofMarketplace"); const proxy = await upgrades.deployProxy(ProofMarketplace, [], { kind: "uups", - constructorArgs: [ - await mockToken.getAddress(), - marketCreationCost.toFixed(), - treasury, - await generatorRegistry.getAddress(), - await entityKeyRegistry.getAddress(), - ], initializer: false, }); const proofMarketplace = ProofMarketplace__factory.connect(await proxy.getAddress(), admin); - await generatorRegistry.initialize(await admin.getAddress(), await proofMarketplace.getAddress()); - await proofMarketplace.initialize(await admin.getAddress()); + // NativeStaking + const NativeStakingContract = await ethers.getContractFactory("NativeStaking"); + const nativeStakingProxy = await upgrades.deployProxy(NativeStakingContract, [], { + kind: "uups", + initializer: false, + }); + const nativeStaking = NativeStaking__factory.connect(await nativeStakingProxy.getAddress(), admin); + + // SmybioticStaking + const SymbioticStakingContract = await ethers.getContractFactory("SymbioticStaking"); + const symbioticStakingProxy = await upgrades.deployProxy(SymbioticStakingContract, [], { + kind: "uups", + initializer: false, + }); + const symbioticStaking = SymbioticStaking__factory.connect(await symbioticStakingProxy.getAddress(), admin); + + // SymbioticStakingReward + const SymbioticStakingRewardContract = await ethers.getContractFactory("SymbioticStakingReward"); + const symbioticStakingRewardProxy = await upgrades.deployProxy(SymbioticStakingRewardContract, [], { + kind: "uups", + constructorArgs: [], + initializer: false, + }); + const symbioticStakingReward = SymbioticStakingReward__factory.connect(await symbioticStakingRewardProxy.getAddress(), admin); + + //-------------------------------- Contract Init --------------------------------// - const register_role = await entityKeyRegistry.KEY_REGISTER_ROLE(); + // Initialize ProverManager + await proverManager.initialize( + await admin.getAddress(), + await proofMarketplace.getAddress(), + await stakingManager.getAddress(), + await entityKeyRegistry.getAddress(), + ); - await entityKeyRegistry.grantRole(register_role, await generatorRegistry.getAddress()); - await entityKeyRegistry.grantRole(register_role, await proofMarketplace.getAddress()); + // Initialize ProofMarketplace + await proofMarketplace.initialize( + await admin.getAddress(), + await mockToken.getAddress(), + treasury, + await proverManager.getAddress(), + await entityKeyRegistry.getAddress(), + marketCreationCost.toFixed(), + ); - await mockToken.connect(tokenHolder).transfer(await marketCreator.getAddress(), marketCreationCost.toFixed()); + // Initialize StakingManager + await stakingManager.initialize( + await admin.getAddress(), + await proofMarketplace.getAddress(), + await proverManager.getAddress(), + await symbioticStaking.getAddress(), + await mockToken.getAddress(), + ); + + // Initialize NativeStaking + await nativeStaking.initialize( + await admin.getAddress(), + await stakingManager.getAddress(), + stakingContractConfig.WITHDRAWAL_DURATION.toFixed() + ); + + // Initialize SymbioticStaking + await symbioticStaking.initialize( + await admin.getAddress(), + await attestationVerifier.getAddress(), + await proofMarketplace.getAddress(), + await stakingManager.getAddress(), + await symbioticStakingReward.getAddress() + ); + + let arr = []; + + type arrType = [number, number, string]; + + "https:// `ProverManager` + await stakingManager.grantRole(await stakingManager.PROVER_MANAGER_ROLE(), await proverManager.getAddress()); + // `SymbioticStaking.STAKING_MANAGER_ROLE` -> `StakingManager` + await symbioticStaking.grantRole(await symbioticStaking.STAKING_MANAGER_ROLE(), await stakingManager.getAddress()); + // `SymbioticStaking.BRIDGE_ENCLAVE_UPDATES_ROLE` -> admin + await symbioticStaking.grantRole(await symbioticStaking.BRIDGE_ENCLAVE_UPDATER_ROLE(), await admin.getAddress()); + // `SymbioticStakingReward.SYMBIOTIC_STAKING_ROLE` -> `SymbioticStaking` + await symbioticStakingReward.grantRole(await symbioticStakingReward.SYMBIOTIC_STAKING_ROLE(), await symbioticStaking.getAddress()); + // `NativeStaking.STAKING_MANAGER_ROLE` -> `StakingManager` + await nativeStaking.grantRole(await nativeStaking.STAKING_MANAGER_ROLE(), await stakingManager.getAddress()); + // `EntityKeyRegistry.KEY_REGISTER_ROLE` -> `ProverManager` + await entityKeyRegistry.grantRole(await entityKeyRegistry.KEY_REGISTER_ROLE(), await proverManager.getAddress()); + // `EntityKeyRegistry.KEY_REGISTER_ROLE` -> `ProofMarketplace` + await entityKeyRegistry.grantRole(await entityKeyRegistry.KEY_REGISTER_ROLE(), await proofMarketplace.getAddress()); + + // Transfer marketCreationCost to ProofMarketplace + await mockToken.connect(tokenHolder).transfer(await marketCreator.getAddress(), marketCreationCost.toFixed()); + // Approve marketCreationCost for ProofMarketplace await mockToken.connect(marketCreator).approve(await proofMarketplace.getAddress(), marketCreationCost.toFixed()); let matchingEngineAttestationBytes = await matchingEngineEnclave.getVerifiedAttestation(godEnclave); @@ -158,45 +304,45 @@ export const rawSetup = async ( await proofMarketplace .connect(marketCreator) - .createMarketplace( + .createMarket( marketSetupBytes, await iverifier.getAddress(), - generatorSlashingPenalty.toFixed(0), - generatorEnclave.getPcrRlp(), + proverEnclave.getPcrRlp(), ivsEnclave.getPcrRlp(), ); - await mockToken.connect(tokenHolder).transfer(await generator.getAddress(), generatorStakingAmount.toFixed()); + await mockToken.connect(tokenHolder).transfer(await prover.getAddress(), proverStakingAmount.toFixed()); - await mockToken.connect(generator).approve(await generatorRegistry.getAddress(), generatorStakingAmount.toFixed()); + await mockToken.connect(prover).approve(await proverManager.getAddress(), proverStakingAmount.toFixed()); const marketId = new BigNumber((await proofMarketplace.marketCounter()).toString()).minus(1).toFixed(); - await generatorRegistry - .connect(generator) - .register(await generator.getAddress(), totalComputeAllocation.toFixed(0), generatorStakingAmount.toFixed(0), generatorData); + await proverManager + .connect(prover) + .register(await prover.getAddress(), totalComputeAllocation.toFixed(0), proverData); { - let generatorAttestationBytes = await generatorEnclave.getVerifiedAttestation(godEnclave); + let proverAttestationBytes = await proverEnclave.getVerifiedAttestation(godEnclave); let types = ["bytes", "address"]; - let values = [generatorAttestationBytes, await generator.getAddress()]; + let values = [proverAttestationBytes, await prover.getAddress()]; let abicode = new ethers.AbiCoder(); let encoded = abicode.encode(types, values); let digest = ethers.keccak256(encoded); - let signature = await generatorEnclave.signMessage(ethers.getBytes(digest)); + let signature = await proverEnclave.signMessage(ethers.getBytes(digest)); - await generatorRegistry - .connect(generator) + await proverManager + .connect(prover) .joinMarketplace( marketId, computeToNewMarket.toFixed(0), - minRewardForGenerator.toFixed(), + minRewardForProver.toFixed(), 100, + new BigNumber(10).pow(18).multipliedBy(0.1).toFixed(0), // 10% true, - generatorAttestationBytes, + proverAttestationBytes, signature, ); } @@ -206,10 +352,261 @@ export const rawSetup = async ( const errorLibrary = await new Error__factory(admin).deploy(); return { mockToken, - generatorRegistry, + proverManager, proofMarketplace, priorityLog, errorLibrary, entityKeyRegistry, + attestationVerifier, + /* Staking Contracts */ + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, }; }; + +interface StakingTokens { + pond: POND; + weth: WETH; +} + +export const stakingSetup = async ( + admin: Signer, + stakingManager: StakingManager, + nativeStaking: NativeStaking, + symbioticStaking: SymbioticStaking, + symbioticStakingReward: SymbioticStakingReward, +): Promise => { + + /*-------------------------------- Constants --------------------------------*/ + const percent = (amount: BigNumber.Value) => { + const exponent = new BigNumber(10).pow(18); + return BigNumber(amount).multipliedBy(exponent).dividedBy(100).toFixed(0); + }; + + const TWENTY_PERCENT = percent(20); + const SIXTY_PERCENT = percent(60); + const FORTY_PERCENT = percent(40); + const HUNDRED_PERCENT = percent(100); + + /*-------------------------------- StakingTokens Deployment --------------------------------*/ + + const pond = await new POND__factory(admin).deploy(await admin.getAddress()); + const weth = await new WETH__factory(admin).deploy(await admin.getAddress()); + const usdc = await new USDC__factory(admin).deploy(await admin.getAddress()); + + /*-------------------------------- StakingManager Config --------------------------------*/ + + // NativeStaking 0%, SymbioticStaking 100% + const nativeStakingShare = new BigNumber(10).pow(18).multipliedBy(0); // 0 % + const symbioticStakingShare = new BigNumber(10).pow(18).multipliedBy(1); // 100% + + // Add StakingPools + await stakingManager.connect(admin).addStakingPool(await nativeStaking.getAddress(), nativeStakingShare.toFixed(0)); + await stakingManager.connect(admin).addStakingPool(await symbioticStaking.getAddress(), symbioticStakingShare.toFixed(0)); + + // Enable pools + await stakingManager.connect(admin).setPoolEnabled( + await nativeStaking.getAddress(), + true + ) + await stakingManager.connect(admin).setPoolEnabled( + await symbioticStaking.getAddress(), + true + ) + + /*-------------------------------- NativeStaking Config --------------------------------*/ + + // Add POND to NativeStaking + await nativeStaking.connect(admin).addStakeToken( + await pond.getAddress(), + HUNDRED_PERCENT, // 100% weight for selection + ); + // Amount to lock + await nativeStaking.connect(admin).setStakeAmountToLock( + await pond.getAddress(), + new BigNumber(10).pow(18).multipliedBy(2).toFixed(0), // 2 POND locked per job creation + ); + + /*-------------------------------- SymbioticStaking Config --------------------------------*/ + + // Stake Tokens and weights + await symbioticStaking.connect(admin).addStakeToken( + await pond.getAddress(), + SIXTY_PERCENT, // 60% weight for selection + ); + await symbioticStaking.connect(admin).addStakeToken( + await weth.getAddress(), + FORTY_PERCENT, // 40% weight for selection + ); + + // Set base transmitter comission rate and submission cooldown + await symbioticStaking.connect(admin).setBaseTransmitterComissionRate(TWENTY_PERCENT); + await symbioticStaking.connect(admin).setSubmissionCooldown(60 * 60 * 12); // 12 hours + + // amount to lock + await symbioticStaking.connect(admin).setAmountToLock( + await pond.getAddress(), + new BigNumber(10).pow(18).multipliedBy(2).toFixed(0), // 2 POND locked per job creation + ); + await symbioticStaking.connect(admin).setAmountToLock( + await weth.getAddress(), + new BigNumber(10).pow(18).multipliedBy(3).toFixed(0), // 3 WETH locked per job creation + ); + + /*-------------------------------- SymbioticStakingReward Config --------------------------------*/ + + return { + pond, + weth, + }; +}; + +export const proverSelfStake = async ( + nativeStaking: NativeStaking, + admin: Signer, + prover: Signer, + stakeToken: POND, + amount: BigNumber +) => { + await stakeToken.connect(admin).transfer(await prover.getAddress(), amount.toFixed(0)); + await stakeToken.connect(prover).approve(await nativeStaking.getAddress(), amount.toFixed(0)); + + await nativeStaking.connect(prover).stake( + await stakeToken.getAddress(), + await prover.getAddress(), + amount.toFixed(0) + ); +} + +export interface VaultSnapshot { + prover: string; + vault: string; + stakeToken: string; + stakeAmount: BigNumberish; +} + +export interface TaskSlashed { + bidId: number; + prover: string; + rewardAddress: string; +} + +export const toEthSignedMessageHash = (messageHash: string): string => { + const prefix = "\x19Ethereum Signed Message:\n32"; + const prefixBytes = ethers.toUtf8Bytes(prefix); + const messageHashBytes = ethers.toBeArray(messageHash); + const combined = ethers.concat([prefixBytes, messageHashBytes]); + return ethers.keccak256(combined); +} + +export interface SubmitVaultSnapshotParams { + index: number; + numOfTxs: number; + captureTimestamp: BigNumberish; + imageId: string; + snapshotData: VaultSnapshot[], +} + +export const submitVaultSnapshot = async ( + symbioticStaking: SymbioticStaking, + bridgeEnclave: MockEnclave, + transmitter: Signer, + params: SubmitVaultSnapshotParams +) => { + const abiCoder = new ethers.AbiCoder(); + + const vaultSnapshotData = encodeSnapshotData(params.snapshotData); + const STAKE_SNAPSHOT_TYPE = await symbioticStaking.STAKE_SNAPSHOT_TYPE(); + const dataToSign = abiCoder.encode( + ["bytes32", "uint256", "uint256", "uint256", "bytes"], // _type, _index, _numOfTxs, _captureTimestamp, _data + [STAKE_SNAPSHOT_TYPE, params.index, params.numOfTxs, params.captureTimestamp, vaultSnapshotData] + ); + + const messageHash = toEthSignedMessageHash(ethers.keccak256(dataToSign)); + const signature = await bridgeEnclave.signMessageWithoutPrefix(messageHash); + const attestation = await bridgeEnclave.getMockAttestation(); + const proof = abiCoder.encode( + ["bytes", "bytes"], + [signature, attestation] + ); + + await symbioticStaking.connect(transmitter).submitVaultSnapshot( + params.index, + params.numOfTxs, + params.captureTimestamp, + params.imageId, + vaultSnapshotData, + proof + ); +}; + +export interface SubmitSlashResultParams { + index: number; + numOfTxs: number; + captureTimestamp: BigNumberish; + lastBlockNumber: BigNumberish; + imageId: string; + slashResultData: TaskSlashed[], +} + +export const submitSlashResult = async ( + symbioticStaking: SymbioticStaking, + bridgeEnclave: MockEnclave, + transmitter: Signer, + params: SubmitSlashResultParams +) => { + const abiCoder = new ethers.AbiCoder(); + + const slashResultData = encodeSlashResultData(params.slashResultData); + const SLASH_RESULT_TYPE = await symbioticStaking.SLASH_RESULT_TYPE(); + const dataToSign = abiCoder.encode( + ["bytes32", "uint256", "uint256", "uint256", "bytes"], // _type, _index, _numOfTxs, _captureTimestamp, _data + [SLASH_RESULT_TYPE, params.index, params.numOfTxs, params.captureTimestamp, slashResultData] + ); + const messageHash = toEthSignedMessageHash(ethers.keccak256(dataToSign)); + const signature = await bridgeEnclave.signMessageWithoutPrefix(messageHash); + const attestation = await bridgeEnclave.getMockAttestation(); + const proof = abiCoder.encode( + ["bytes", "bytes"], + [signature, attestation] + ); + + await symbioticStaking.connect(transmitter).submitSlashResult( + params.index, + params.numOfTxs, + params.captureTimestamp, + params.lastBlockNumber, + params.imageId, + slashResultData, + proof + ); +} + +const encodeSnapshotData = (vaultSnapshots: VaultSnapshot[]) => { + const abiCoder = new ethers.AbiCoder(); + return abiCoder.encode( + ["tuple(address, address, address, uint256)[]"], + [vaultSnapshots.map(snapshot => [ + snapshot.prover, + snapshot.vault, + snapshot.stakeToken, + snapshot.stakeAmount + ])] + ); +}; + +const encodeSlashResultData = (taskSlashed: TaskSlashed[]) => { + const abiCoder = new ethers.AbiCoder(); + return abiCoder.encode( + ["tuple(uint256, address, address)[]"], + [taskSlashed.map(slash => [ + slash.bidId, + slash.prover, + slash.rewardAddress + ])] + ); +}; + + diff --git a/helpers/structTypes.ts b/helpers/structTypes.ts new file mode 100644 index 0000000..4e186a8 --- /dev/null +++ b/helpers/structTypes.ts @@ -0,0 +1,134 @@ +// Struct.sol + +enum BidState { + Pending, + Accepted, + Rejected, +} + +enum ProverState { + Active, + Inactive, + Banned, +} + +// Proof Marketplace +export interface Market { + verifier: string; // address + proverImageId: string; // bytes32 + slashingPenalty: string; + activationBlock: string; + ivsImageId: string; // bytes32 + creator: string; // address + marketmetadata: string; // bytes +} + +export interface Bid { + marketId: string; + reward: string; + expiry: string; + timeForProofGeneration: string; + deadline: string; + refundAddress: string; // address + proverData: string; // bytes +} + +export interface BidWithState { + bid: Bid; + state: BidState; + requester: string; // address + prover: string; // address +} + +export interface TaskInfo { + requester: string; // address + prover: string; // address + feePaid: string; + deadline: string; +} + +// Prover Registry +export interface Prover { + rewardAddress: string; // address + sumOfComputeAllocations: string; + computeConsumed: string; + activeMarketplaces: string; + declaredCompute: string; + intendedComputeUtilization: string; + proverData: string; // bytes +} + +export interface ProverInfoPerMarket { + state: ProverState; + computePerRequestRequired: string; + proofGenerationCost: string; + proposedTime: string; + activeRequests: string; +} + +// Staking Manager +export interface PoolConfig { + share: string; + enabled: boolean; +} + +// Staking Pool +export interface PoolLockInfo { + token: string; // address + amount: string; + transmitter: string; // address +} + +// Native Staking +export interface NativeStakingLock { + token: string; // address + amount: string; +} + +export interface TaskSlashed { + bidId: string; + prover: string; // address + rewardAddress: string; // address +} + +export interface WithdrawalRequest { + stakeToken: string; // address + amount: string; + withdrawalTime: string; +} + +// Symbiotic Staking +export interface VaultSnapshot { + prover: string; // address + vault: string; // address + stakeToken: string; // address + stakeAmount: string; +} + +export interface SnapshotTxCountInfo { + idxToSubmit: string; + numOfTxs: string; +} + +export interface CaptureTimestampInfo { + blockNumber: string; + transmitter: string; // address +} + +export interface ConfirmedTimestamp { + captureTimestamp: string; + blockNumber: string; + transmitter: string; // address + transmitterComissionRate: string; +} + +export interface SymbioticStakingLock { + stakeToken: string; // address + amount: string; +} + +export interface EnclaveImage { + PCR0: string; // bytes + PCR1: string; // bytes + PCR2: string; // bytes +} \ No newline at end of file diff --git a/lib/forge-std b/lib/forge-std new file mode 160000 index 0000000..8f24d6b --- /dev/null +++ b/lib/forge-std @@ -0,0 +1 @@ +Subproject commit 8f24d6b04c92975e0795b5868aa0d783251cdeaa diff --git a/package-lock.json b/package-lock.json index 34107ac..5222d51 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,16 +17,30 @@ "@openzeppelin/hardhat-upgrades": "^3.0.5", "bignumber.js": "^9.1.1", "dotenv": "^16.3.1", + "hardhat-tracer": "^3.1.0", "node-gzip": "^1.1.2" }, "devDependencies": { + "@nomicfoundation/hardhat-ignition": "^0.15.7", + "@nomicfoundation/hardhat-ignition-ethers": "^0.15.7", + "@nomicfoundation/hardhat-network-helpers": "^1.0.12", + "@nomicfoundation/hardhat-verify": "^2.0.11", + "@nomicfoundation/ignition-core": "^0.15.7", + "@tenderly/hardhat-tenderly": "^2.5.2", + "@typechain/ethers-v6": "^0.5.1", + "@typechain/hardhat": "^9.1.0", + "@types/mocha": "^10.0.9", "@types/node-gzip": "^1.1.0", + "chai": "^4.5.0", "eciesjs": "^0.4.4", "ethers": "^6.6.6", "hardhat": "^2.17.0", - "hardhat-gas-reporter": "^1.0.9", + "hardhat-gas-reporter": "^1.0.10", "prettier": "^3.0.0", "prettier-plugin-solidity": "^1.1.3", + "solidity-coverage": "^0.8.13", + "ts-node": "^10.9.2", + "typechain": "^8.3.2", "typescript": "^5.3.2" } }, @@ -34,7 +48,7 @@ "version": "1.10.1", "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", - "license": "MIT" + "dev": true }, "node_modules/@aws-crypto/sha256-js": { "version": "1.2.2", @@ -62,20 +76,19 @@ "version": "3.664.0", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.664.0.tgz", "integrity": "sha512-+GtXktvVgpreM2b+NJL9OqZGsOzHwlCUrO8jgQUvH/yA6Kd8QO2YFhQCp0C9sSzTteZJVqGBu8E0CQurxJHPbw==", - "license": "Apache-2.0", "dependencies": { + "@smithy/types": "^3.5.0", "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=16.0.0""node": ">=16.0.0" } }, "node_modules/@aws-sdk/types/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "license": "0BSD" + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/@aws-sdk/util-utf8-browser": { "version": "3.259.0", @@ -89,15 +102,24 @@ "node_modules/@aws-sdk/util-utf8-browser/node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "license": "0BSD" + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "license": "MIT", - "peer": true, + "dev": true, "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -124,8 +146,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", - "license": "MPL-2.0", - "peer": true, + "dev": true, "bin": { "rlp": "bin/rlp" }, @@ -137,8 +158,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", - "license": "MPL-2.0", - "peer": true, + "dev": true, "dependencies": { "@ethereumjs/rlp": "^4.0.1", "ethereum-cryptography": "^2.0.0", @@ -152,10 +172,9 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", - "license": "MIT", - "peer": true, + "dev": true, "dependencies": { - "@noble/hashes": "1.4.0" + "@noble/hashes": "1.4.0""@noble/hashes": "1.4.0" }, "funding": { "url": "https://paulmillr.com/funding/" @@ -165,8 +184,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "license": "MIT", - "peer": true, + "dev": true, "engines": { "node": ">= 16" }, @@ -178,12 +196,14 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", - "license": "MIT", - "peer": true, + "dev": true, "dependencies": { "@noble/curves": "1.4.2", "@noble/hashes": "1.4.0", "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0""@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", "@scure/bip39": "1.3.0" } }, @@ -919,17 +939,119 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", - "license": "MIT", + "dev": true, "engines": { "node": ">=14" } }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", - "peer": true, + "dev": true, "engines": { "node": ">=6.0.0" } @@ -938,15 +1060,13 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "license": "MIT", - "peer": true + "dev": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "license": "MIT", - "peer": true, + "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -956,7 +1076,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", - "license": "ISC", + "dev": true, "dependencies": { "ethereumjs-abi": "^0.6.8", "ethereumjs-util": "^6.2.1", @@ -972,7 +1092,7 @@ "version": "4.11.6", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "license": "MIT", + "dev": true, "dependencies": { "@types/node": "*" } @@ -981,13 +1101,13 @@ "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "license": "MIT" + "dev": true }, "node_modules/@metamask/eth-sig-util/node_modules/ethereumjs-util": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "license": "MPL-2.0", + "dev": true, "dependencies": { "@types/bn.js": "^4.11.3", "bn.js": "^4.11.0", @@ -999,11 +1119,13 @@ } }, "node_modules/@noble/ciphers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.0.0.tgz", + "integrity": "sha512-wH5EHOmLi0rEazphPbecAzmjd12I6/Yv/SiHdkA9LSycsQk7RuuTp7am5/o62qYr0RScE7Pc9icXGBbsr6cesA==", "version": "1.0.0", "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.0.0.tgz", "integrity": "sha512-wH5EHOmLi0rEazphPbecAzmjd12I6/Yv/SiHdkA9LSycsQk7RuuTp7am5/o62qYr0RScE7Pc9icXGBbsr6cesA==", "dev": true, - "license": "MIT", "engines": { "node": "^14.21.3 || >=16" }, @@ -1016,10 +1138,12 @@ "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.6.0.tgz", "integrity": "sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==", "dev": true, - "license": "MIT", "dependencies": { "@noble/hashes": "1.5.0" }, + "engines": { + "node": "^14.21.3 || >=16""@noble/hashes": "1.5.0" + }, "engines": { "node": "^14.21.3 || >=16" }, @@ -1031,9 +1155,9 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz", "integrity": "sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==", - "license": "MIT", + "dev": true, "engines": { - "node": "^14.21.3 || >=16" + "node": "^14.21.3 || >=16""node": "^14.21.3 || >=16" }, "funding": { "url": "https://paulmillr.com/funding/" @@ -1043,6 +1167,7 @@ "version": "1.7.1", "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", + "dev": true, "funding": [ { "type": "individual", @@ -1055,8 +1180,7 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "license": "MIT", - "peer": true, + "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1069,8 +1193,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "license": "MIT", - "peer": true, + "dev": true, "engines": { "node": ">= 8" } @@ -1079,8 +1202,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "license": "MIT", - "peer": true, + "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1090,81 +1212,89 @@ } }, "node_modules/@nomicfoundation/edr": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.6.4.tgz", - "integrity": "sha512-YgrSuT3yo5ZQkbvBGqQ7hG+RDvz3YygSkddg4tb1Z0Y6pLXFzwrcEwWaJCFAVeeZxdxGfCgGMUYgRVneK+WXkw==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.7.0.tgz", + "integrity": "sha512-+Zyu7TE47TGNcPhOfWLPA/zISs32WDMXrhSWdWYyPHDVn/Uux5TVuOeScKb0BR/R8EJ+leR8COUF/EGxvDOVKg==", + "dev": true, "license": "MIT", "dependencies": { - "@nomicfoundation/edr-darwin-arm64": "0.6.4", - "@nomicfoundation/edr-darwin-x64": "0.6.4", - "@nomicfoundation/edr-linux-arm64-gnu": "0.6.4", - "@nomicfoundation/edr-linux-arm64-musl": "0.6.4", - "@nomicfoundation/edr-linux-x64-gnu": "0.6.4", - "@nomicfoundation/edr-linux-x64-musl": "0.6.4", - "@nomicfoundation/edr-win32-x64-msvc": "0.6.4" + "@nomicfoundation/edr-darwin-arm64": "0.7.0", + "@nomicfoundation/edr-darwin-x64": "0.7.0", + "@nomicfoundation/edr-linux-arm64-gnu": "0.7.0", + "@nomicfoundation/edr-linux-arm64-musl": "0.7.0", + "@nomicfoundation/edr-linux-x64-gnu": "0.7.0", + "@nomicfoundation/edr-linux-x64-musl": "0.7.0", + "@nomicfoundation/edr-win32-x64-msvc": "0.7.0" }, "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-darwin-arm64": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.6.4.tgz", - "integrity": "sha512-QNQErISLgssV9+qia8sIjRANqtbW8snSDvjspixT/kSQ5ZSGxxctTg7x72wPSrcu8+EBEveIe5uqENIp5GH8HQ==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.7.0.tgz", + "integrity": "sha512-vAH20oh4GaSB/iQFTRcoO8jLc0CLd9XuLY9I7vtcqZWAiM4U1J4Y8cu67PWmtxbvUQOqXR7S6FtAr8/AlWm14g==", + "dev": true, "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-darwin-x64": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.6.4.tgz", - "integrity": "sha512-cjVmREiwByyc9+oGfvAh49IAw+oVJHF9WWYRD+Tm/ZlSpnEVWxrGNBak2bd/JSYjn+mZE7gmWS4SMRi4nKaLUg==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.7.0.tgz", + "integrity": "sha512-WHDdIrPvLlgXQr2eKypBM5xOZAwdxhDAEQIvEMQL8tEEm2qYW2bliUlssBPrs8E3bdivFbe1HizImslMAfU3+g==", + "dev": true, "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.6.4.tgz", - "integrity": "sha512-96o9kRIVD6W5VkgKvUOGpWyUGInVQ5BRlME2Fa36YoNsRQMaKtmYJEU0ACosYES6ZTpYC8U5sjMulvPtVoEfOA==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.7.0.tgz", + "integrity": "sha512-WXpJB54ukz1no7gxCPXVEw9pgl/9UZ/WO3l1ctyv/T7vOygjqA4SUd6kppTs6MNXAuTiisPtvJ/fmvHiMBLrsw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-linux-arm64-musl": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.6.4.tgz", - "integrity": "sha512-+JVEW9e5plHrUfQlSgkEj/UONrIU6rADTEk+Yp9pbe+mzNkJdfJYhs5JYiLQRP4OjxH4QOrXI97bKU6FcEbt5Q==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.7.0.tgz", + "integrity": "sha512-1iZYOcEgc+zJI7JQrlAFziuy9sBz1WgnIx3HIIu0J7lBRZ/AXeHHgATb+4InqxtEx9O3W8A0s7f11SyFqJL4Aw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-linux-x64-gnu": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.6.4.tgz", - "integrity": "sha512-nzYWW+fO3EZItOeP4CrdMgDXfaGBIBkKg0Y/7ySpUxLqzut40O4Mb0/+quqLAFkacUSWMlFp8nsmypJfOH5zoA==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.7.0.tgz", + "integrity": "sha512-wSjC94WcR5MM8sg9w3OsAmT6+bbmChJw6uJKoXR3qscps/jdhjzJWzfgT0XGRq3XMUfimyafW2RWOyfX3ouhrQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-linux-x64-musl": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.6.4.tgz", - "integrity": "sha512-QFRoE9qSQ2boRrVeQ1HdzU+XN7NUgwZ1SIy5DQt4d7jCP+5qTNsq8LBNcqhRBOATgO63nsweNUhxX/Suj5r1Sw==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.7.0.tgz", + "integrity": "sha512-Us22+AZ7wkG1mZwxqE4S4ZcuwkEA5VrUiBOJSvKHGOgy6vFvB/Euh5Lkp4GovwjrtiXuvyGO2UmtkzymZKDxZw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-win32-x64-msvc": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.6.4.tgz", - "integrity": "sha512-2yopjelNkkCvIjUgBGhrn153IBPLwnsDeNiq6oA0WkeM8tGmQi4td+PGi9jAriUDAkc59Yoi2q9hYA6efiY7Zw==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.7.0.tgz", + "integrity": "sha512-HAry0heTsWkzReVtjHwoIq3BgFCvXpVhJ5qPmTnegZGsr/KxqvMmHyDMifzKao4bycU8yrpTSyOiAJt27RWjzQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 18" @@ -1174,7 +1304,7 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz", "integrity": "sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==", - "license": "MIT", + "dev": true, "dependencies": { "@nomicfoundation/ethereumjs-util": "9.0.4" } @@ -1183,7 +1313,7 @@ "version": "5.0.4", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz", "integrity": "sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==", - "license": "MPL-2.0", + "dev": true, "bin": { "rlp": "bin/rlp.cjs" }, @@ -1195,7 +1325,7 @@ "version": "5.0.4", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz", "integrity": "sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==", - "license": "MPL-2.0", + "dev": true, "dependencies": { "@nomicfoundation/ethereumjs-common": "4.0.4", "@nomicfoundation/ethereumjs-rlp": "5.0.4", @@ -1218,7 +1348,7 @@ "version": "9.0.4", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz", "integrity": "sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==", - "license": "MPL-2.0", + "dev": true, "dependencies": { "@nomicfoundation/ethereumjs-rlp": "5.0.4", "ethereum-cryptography": "0.1.3" @@ -1239,7 +1369,6 @@ "version": "2.0.8", "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.0.8.tgz", "integrity": "sha512-Z5PiCXH4xhNLASROlSUOADfhfpfhYO6D7Hn9xp8PddmHey0jq704cr6kfU8TRrQ4PUZbpfsZadPj+pCfZdjPIg==", - "license": "MIT", "dependencies": { "@types/chai-as-promised": "^7.1.3", "chai-as-promised": "^7.1.1", @@ -1257,7 +1386,6 @@ "version": "3.0.8", "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.8.tgz", "integrity": "sha512-zhOZ4hdRORls31DTOqg+GmEZM0ujly8GGIuRY7t7szEk2zW/arY1qDug/py8AEktT00v5K+b6RvbVog+va51IA==", - "license": "MIT", "dependencies": { "debug": "^4.1.1", "lodash.isequal": "^4.5.0" @@ -1268,18 +1396,19 @@ } }, "node_modules/@nomicfoundation/hardhat-ignition": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition/-/hardhat-ignition-0.15.6.tgz", - "integrity": "sha512-PcMf4xlYvwHYej2jcuOd/rBNNMM5FO11vh9c+MF8+m7NxV4b6NOameL3uscoD7ghg0H2GNgnGXgQ67ryRqtdIQ==", + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition/-/hardhat-ignition-0.15.7.tgz", + "integrity": "sha512-RFhGazR0/JqHxuuIxjjMmM+nWFqEvA7wcVqcX7vUqqmAIGuok4HhnWQH8aOvBaVguiXvvlFDJL0PIlxmkFgIUg==", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@nomicfoundation/ignition-core": "^0.15.6", - "@nomicfoundation/ignition-ui": "^0.15.6", + "@nomicfoundation/ignition-core": "^0.15.7", + "@nomicfoundation/ignition-ui": "^0.15.7", "chalk": "^4.0.0", "debug": "^4.3.2", "fs-extra": "^10.0.0", "json5": "^2.2.3", + "json5": "^2.2.3", "prompts": "^2.4.2" }, "peerDependencies": { @@ -1288,15 +1417,15 @@ } }, "node_modules/@nomicfoundation/hardhat-ignition-ethers": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition-ethers/-/hardhat-ignition-ethers-0.15.6.tgz", - "integrity": "sha512-+jXDGWdfkuIGm0W+aFEZ9SLQz2MIj7Cf4j7ANTXUIIbK8sUkvnVOhTTAQEdqa0KgGEb45XS88BPg0w8fixwrXQ==", + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition-ethers/-/hardhat-ignition-ethers-0.15.7.tgz", + "integrity": "sha512-pUZWQeFNMwDe6F/yKIJsCo+87elk/M/Edjp6AnWWIBplRyPa13Nh63+yOqMSSd9Mx9lLuBaEGnYXoI2Uz2wYZA==", + "dev": true, "license": "MIT", - "peer": true, "peerDependencies": { "@nomicfoundation/hardhat-ethers": "^3.0.4", - "@nomicfoundation/hardhat-ignition": "^0.15.6", - "@nomicfoundation/ignition-core": "^0.15.6", + "@nomicfoundation/hardhat-ignition": "^0.15.7", + "@nomicfoundation/ignition-core": "^0.15.7", "ethers": "^6.7.0", "hardhat": "^2.18.0" } @@ -1305,8 +1434,7 @@ "version": "1.0.12", "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.12.tgz", "integrity": "sha512-xTNQNI/9xkHvjmCJnJOTyqDSl8uq1rKb2WOVmixQxFtRd7Oa3ecO8zM0cyC2YmOK+jHB9WPZ+F/ijkHg1CoORA==", - "license": "MIT", - "peer": true, + "dev": true, "dependencies": { "ethereumjs-util": "^7.1.4" }, @@ -1344,8 +1472,7 @@ "version": "2.0.11", "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.11.tgz", "integrity": "sha512-lGIo4dNjVQFdsiEgZp3KP6ntLiF7xJEJsbNHfSyIiFCyI0Yv0518ElsFtMC5uCuHEChiBBMrib9jWQvHHT+X3Q==", - "license": "MIT", - "peer": true, + "dev": true, "dependencies": { "@ethersproject/abi": "^5.1.2", "@ethersproject/address": "^5.0.2", @@ -1365,10 +1492,9 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", - "peer": true, + "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^1.9.0""color-convert": "^1.9.0" }, "engines": { "node": ">=4" @@ -1378,8 +1504,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", - "peer": true, + "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -1393,8 +1518,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", - "peer": true, + "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -1403,15 +1527,13 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT", - "peer": true + "dev": true }, "node_modules/@nomicfoundation/hardhat-verify/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "peer": true, + "dev": true, "engines": { "node": ">=0.8.0" } @@ -1420,8 +1542,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", - "peer": true, + "dev": true, "engines": { "node": ">=4" } @@ -1430,8 +1551,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", - "peer": true, + "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -1440,14 +1560,15 @@ } }, "node_modules/@nomicfoundation/ignition-core": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-core/-/ignition-core-0.15.6.tgz", - "integrity": "sha512-9eD1NJ2G4vh7IleRNmCz/3bGVoNEPYrRVPqx0uvWzG2xD226GGQcTgtK+NovyxsQOE/AcLF1xjX3/+8kNc1sSg==", + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-core/-/ignition-core-0.15.7.tgz", + "integrity": "sha512-C4/0V/q2gNxKDt88cMr+Oxlf4NINQ7QgmJyciQ1/6UdCRUg+/Pgdgpd3vgGXQVTotq50Q/BU4ofNUAD/8HRqtg==", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@ethersproject/address": "5.6.1", "@nomicfoundation/solidity-analyzer": "^0.1.1", + "@nomicfoundation/solidity-analyzer": "^0.1.1", "cbor": "^9.0.0", "debug": "^4.3.2", "ethers": "^6.7.0", @@ -1461,6 +1582,7 @@ "version": "5.6.1", "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", + "dev": true, "funding": [ { "type": "individual", @@ -1472,7 +1594,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "@ethersproject/bignumber": "^5.6.2", "@ethersproject/bytes": "^5.6.1", @@ -1485,26 +1606,25 @@ "version": "9.0.2", "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.2.tgz", "integrity": "sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "nofilter": "^3.1.0" + "nofilter": "^3.1.0""nofilter": "^3.1.0" }, "engines": { - "node": ">=16" + "node": ">=16""node": ">=16" } }, "node_modules/@nomicfoundation/ignition-ui": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-ui/-/ignition-ui-0.15.6.tgz", - "integrity": "sha512-CW14g/BVcGZtBSF1K4eZSCjyvtz1fr9yppkFKC+Z0+sm/lXFWpwcwaVN+UiugQ/9wz9HAfSk4Y0gagdAMiSs0w==", - "peer": true + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-ui/-/ignition-ui-0.15.7.tgz", + "integrity": "sha512-pj2LmXylgbHOTNrkFqFrre/FAOjcwYl4VKIKVH/QMMBH/DatbiT8aC5n9o2fbLD8uwlPEesD+uXZuKCE71KFBg==", + "dev": true }, "node_modules/@nomicfoundation/slang": { "version": "0.17.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-0.17.0.tgz", "integrity": "sha512-1GlkGRcGpVnjFw9Z1vvDKOKo2mzparFt7qrl2pDxWp+jrVtlvej98yCMX52pVyrYE7ZeOSZFnx/DtsSgoukStQ==", - "license": "MIT", "dependencies": { "@nomicfoundation/slang-darwin-arm64": "0.17.0", "@nomicfoundation/slang-darwin-x64": "0.17.0", @@ -1524,7 +1644,6 @@ "version": "0.17.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-arm64/-/slang-darwin-arm64-0.17.0.tgz", "integrity": "sha512-O0q94EUtoWy9A5kOTOa9/khtxXDYnLqmuda9pQELurSiwbQEVCPQL8kb34VbOW+ifdre66JM/05Xw9JWhIZ9sA==", - "license": "MIT", "engines": { "node": ">= 10" } @@ -1533,7 +1652,6 @@ "version": "0.17.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-x64/-/slang-darwin-x64-0.17.0.tgz", "integrity": "sha512-IaDbHzvT08sBK2HyGzonWhq1uu8IxdjmTqAWHr25Oh/PYnamdi8u4qchZXXYKz/DHLoYN3vIpBXoqLQIomhD/g==", - "license": "MIT", "engines": { "node": ">= 10" } @@ -1542,7 +1660,6 @@ "version": "0.17.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-gnu/-/slang-linux-arm64-gnu-0.17.0.tgz", "integrity": "sha512-Lj4anvOsQZxs1SycG8VyT2Rl2oqIhyLSUCgGepTt3CiJ/bM+8r8bLJIgh8vKkki4BWz49YsYIgaJB2IPv8FFTw==", - "license": "MIT", "engines": { "node": ">= 10" } @@ -1551,7 +1668,6 @@ "version": "0.17.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-musl/-/slang-linux-arm64-musl-0.17.0.tgz", "integrity": "sha512-/xkTCa9d5SIWUBQE3BmLqDFfJRr4yUBwbl4ynPiGUpRXrD69cs6pWKkwjwz/FdBpXqVo36I+zY95qzoTj/YhOA==", - "license": "MIT", "engines": { "node": ">= 10" } @@ -1560,7 +1676,6 @@ "version": "0.17.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-gnu/-/slang-linux-x64-gnu-0.17.0.tgz", "integrity": "sha512-oe5IO5vntOqYvTd67deCHPIWuSuWm6aYtT2/0Kqz2/VLtGz4ClEulBSRwfnNzBVtw2nksWipE1w8BzhImI7Syg==", - "license": "MIT", "engines": { "node": ">= 10" } @@ -1569,7 +1684,6 @@ "version": "0.17.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-musl/-/slang-linux-x64-musl-0.17.0.tgz", "integrity": "sha512-PpYCI5K/kgLAMXaPY0V4VST5gCDprEOh7z/47tbI8kJQumI5odjsj/Cs8MpTo7/uRH6flKYbVNgUzcocWVYrAQ==", - "license": "MIT", "engines": { "node": ">= 10" } @@ -1578,7 +1692,6 @@ "version": "0.17.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-arm64-msvc/-/slang-win32-arm64-msvc-0.17.0.tgz", "integrity": "sha512-u/Mkf7OjokdBilP7QOJj6QYJU4/mjkbKnTX21wLyCIzeVWS7yafRPYpBycKIBj2pRRZ6ceAY5EqRpb0aiCq+0Q==", - "license": "MIT", "engines": { "node": ">= 10" } @@ -1587,7 +1700,6 @@ "version": "0.17.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-ia32-msvc/-/slang-win32-ia32-msvc-0.17.0.tgz", "integrity": "sha512-XJBVQfNnZQUv0tP2JSJ573S+pmgrLWgqSZOGaMllnB/TL1gRci4Z7dYRJUF2s82GlRJE+FHSI2Ro6JISKmlXCg==", - "license": "MIT", "engines": { "node": ">= 10" } @@ -1596,7 +1708,6 @@ "version": "0.17.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-x64-msvc/-/slang-win32-x64-msvc-0.17.0.tgz", "integrity": "sha512-zPGsAeiTfqfPNYHD8BfrahQmYzA78ZraoHKTGraq/1xwJwzBK4bu/NtvVA4pJjBV+B4L6DCxVhSbpn40q26JQA==", - "license": "MIT", "engines": { "node": ">= 10" } @@ -1605,7 +1716,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", - "license": "MIT", + "dev": true, "engines": { "node": ">= 12" }, @@ -1616,6 +1727,12 @@ "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2""@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" } }, @@ -1623,17 +1740,17 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", - "license": "MIT", + "dev": true, "optional": true, "engines": { - "node": ">= 12" + "node": ">= 12""node": ">= 12" } }, "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", - "license": "MIT", + "dev": true, "optional": true, "engines": { "node": ">= 12" @@ -1643,7 +1760,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", - "license": "MIT", + "dev": true, "optional": true, "engines": { "node": ">= 12" @@ -1653,7 +1770,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", - "license": "MIT", + "dev": true, "optional": true, "engines": { "node": ">= 12" @@ -1663,7 +1780,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", - "license": "MIT", + "dev": true, "optional": true, "engines": { "node": ">= 12" @@ -1673,7 +1790,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", - "license": "MIT", + "dev": true, "optional": true, "engines": { "node": ">= 12" @@ -1683,23 +1800,98 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", - "license": "MIT", + "dev": true, "optional": true, "engines": { "node": ">= 12" } }, + "node_modules/@npmcli/agent": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", + "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", + "dev": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/agent/node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@npmcli/agent/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/fs/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/redact": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.1.tgz", + "integrity": "sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, "node_modules/@openzeppelin/contracts": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.1.0.tgz", - "integrity": "sha512-p1ULhl7BXzjjbha5aqst+QMLY+4/LCWADXOCsmLHRM77AqiPjnd9vvUN9sosUfhL9JGKpZ0TjEGxgvnizmWGSA==", - "license": "MIT" + "integrity": "sha512-p1ULhl7BXzjjbha5aqst+QMLY+4/LCWADXOCsmLHRM77AqiPjnd9vvUN9sosUfhL9JGKpZ0TjEGxgvnizmWGSA==" }, "node_modules/@openzeppelin/contracts-upgradeable": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-5.1.0.tgz", "integrity": "sha512-AIElwP5Ck+cslNE+Hkemf5SxjJoF4wBvvjxc27Rp+9jaPs/CLIaUBMYe1FNzhdiN0cYuwGRmYaRHmmntuiju4Q==", - "license": "MIT", "peerDependencies": { "@openzeppelin/contracts": "5.1.0" } @@ -1708,7 +1900,6 @@ "version": "1.15.0", "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-base-client/-/defender-sdk-base-client-1.15.0.tgz", "integrity": "sha512-nuf/xegMIuKCO0hMrxI1KQKTzQw1iCl/9kew2nJM9MrFIohhfEXItc5rbJRoV/jehmK/Jhi9ATF9OHH09StEsQ==", - "license": "MIT", "dependencies": { "amazon-cognito-identity-js": "^6.3.6", "async-retry": "^1.3.3" @@ -1718,8 +1909,9 @@ "version": "1.15.0", "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-deploy-client/-/defender-sdk-deploy-client-1.15.0.tgz", "integrity": "sha512-2ODMN4j5pPYWyIOvA/zRQmJ0tJyqi6NV3S/PyvufBXa3oj/MDnVO5bMGSQFH0M2VE3bg+i/rcUb0hdbX9Rtm5Q==", - "license": "MIT", "dependencies": { + "@openzeppelin/defender-sdk-base-client": "^1.15.0", + "axios": "^1.7.2", "@openzeppelin/defender-sdk-base-client": "^1.15.0", "axios": "^1.7.2", "lodash": "^4.17.21" @@ -1729,8 +1921,9 @@ "version": "1.15.0", "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-network-client/-/defender-sdk-network-client-1.15.0.tgz", "integrity": "sha512-tNynCqFB1XYancq/8yGuj0HCSIyNLSRSuH53Hp2Tl+DpM7W5vIkzSRfvJJxC+8Sld83bVavyNJzTN9xid992Ag==", - "license": "MIT", "dependencies": { + "@openzeppelin/defender-sdk-base-client": "^1.15.0", + "axios": "^1.7.2", "@openzeppelin/defender-sdk-base-client": "^1.15.0", "axios": "^1.7.2", "lodash": "^4.17.21" @@ -1740,8 +1933,11 @@ "version": "3.5.0", "resolved": "https://registry.npmjs.org/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-3.5.0.tgz", "integrity": "sha512-Ju/JnT7NRiOMi5m5Y0dGiz37d8wnjVBep1v5Vr7+6+MFNuQa1yddUEVWhWhoEw4udI3/mYwyw4Sfz3sq7vhicQ==", - "license": "MIT", "dependencies": { + "@openzeppelin/defender-sdk-base-client": "^1.14.4", + "@openzeppelin/defender-sdk-deploy-client": "^1.14.4", + "@openzeppelin/defender-sdk-network-client": "^1.14.4", + "@openzeppelin/upgrades-core": "^1.40.0", "@openzeppelin/defender-sdk-base-client": "^1.14.4", "@openzeppelin/defender-sdk-deploy-client": "^1.14.4", "@openzeppelin/defender-sdk-network-client": "^1.14.4", @@ -1750,7 +1946,7 @@ "debug": "^4.1.1", "ethereumjs-util": "^7.1.5", "proper-lockfile": "^4.1.1", - "undici": "^6.11.1" + "undici": "^6.11.1""undici": "^6.11.1" }, "bin": { "migrate-oz-cli-project": "dist/scripts/migrate-oz-cli-project.js" @@ -1771,17 +1967,16 @@ "version": "6.20.1", "resolved": "https://registry.npmjs.org/undici/-/undici-6.20.1.tgz", "integrity": "sha512-AjQF1QsmqfJys+LXfGTNum+qw4S88CojRInG/6t31W/1fk6G59s92bnAvGz5Cmur+kQv2SURXEvvudLmbrE8QA==", - "license": "MIT", "engines": { - "node": ">=18.17" + "node": ">=18.17""node": ">=18.17" } }, "node_modules/@openzeppelin/upgrades-core": { "version": "1.40.0", "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.40.0.tgz", "integrity": "sha512-4bPSXdEqHsNRL5T1ybPLneWGYjzGl6XWGWkv7aUoFFgz8mOdarstRBX1Wi4XJFw6IeHPUI7mMSQr2jdz8Y2ypQ==", - "license": "MIT", "dependencies": { + "@nomicfoundation/slang": "^0.17.0", "@nomicfoundation/slang": "^0.17.0", "cbor": "^9.0.0", "chalk": "^4.1.0", @@ -1789,6 +1984,7 @@ "debug": "^4.1.1", "ethereumjs-util": "^7.0.3", "minimatch": "^9.0.5", + "minimatch": "^9.0.5", "minimist": "^1.2.7", "proper-lockfile": "^4.1.1", "solidity-ast": "^0.4.51" @@ -1801,29 +1997,38 @@ "version": "9.0.2", "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.2.tgz", "integrity": "sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==", - "license": "MIT", "dependencies": { - "nofilter": "^3.1.0" + "nofilter": "^3.1.0""nofilter": "^3.1.0" }, "engines": { "node": ">=16" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@scure/base": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", - "license": "MIT", + "dev": true, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://paulmillr.com/funding/""url": "https://paulmillr.com/funding/" } }, "node_modules/@scure/bip32": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", - "license": "MIT", - "peer": true, + "dev": true, "dependencies": { "@noble/curves": "~1.4.0", "@noble/hashes": "~1.4.0", @@ -1837,8 +2042,7 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", - "license": "MIT", - "peer": true, + "dev": true, "dependencies": { "@noble/hashes": "1.4.0" }, @@ -1850,8 +2054,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "license": "MIT", - "peer": true, + "dev": true, "engines": { "node": ">= 16" }, @@ -1863,876 +2066,2614 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", - "license": "MIT", - "peer": true, + "dev": true, "dependencies": { "@noble/hashes": "~1.4.0", "@scure/base": "~1.1.6" }, - "funding": { + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "dev": true, + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "dev": true, + "dependencies": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "dev": true, + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "dev": true, + "dependencies": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "dev": true, + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "dev": true, + "dependencies": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@smithy/types": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.6.0.tgz", + "integrity": "sha512-8VXK/KzOHefoC65yRgCn5vG1cysPJjHnOVt9d0ybFQSmJgQj152vMn4EkYhGuaOmnnZvCPav/KnYyE6/KsNZ2w==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0""node": ">=16.0.0" + } + }, + "node_modules/@smithy/types/node_modules/tslib": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" + }, + "node_modules/@solidity-parser/parser": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", + "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", + "dev": true, + "dependencies": { + "antlr4ts": "^0.5.0-alpha.4" + } + }, + "node_modules/@tenderly/api-client": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@tenderly/api-client/-/api-client-1.1.0.tgz", + "integrity": "sha512-kyye7TQ+RbDbJ7bSUjNf/O9fTtRYNUDIEUZQSrmNonowMw5/EpNi664eWaOoC00NEzxgttVrtme/GHvIOu7rNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "axios": "^0.27.2", + "cli-table3": "^0.6.2", + "commander": "^9.4.0", + "dotenv": "^16.4.5", + "js-yaml": "^4.1.0", + "open": "^8.4.0", + "prompts": "^2.4.2", + "tslog": "^4.4.0" + }, + "peerDependencies": { + "ts-node": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@tenderly/api-client/node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/@tenderly/api-client/node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/@tenderly/api-client/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/@tenderly/hardhat-integration": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@tenderly/hardhat-integration/-/hardhat-integration-1.1.1.tgz", + "integrity": "sha512-VHa380DrKv+KA1N4vbJGLDoghbVqMZ4wEozbxRfCzlkSs5V1keNgudRSUFK6lgfKhkoAWRO+dA8MZYnJOvUOkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tenderly/api-client": "^1.1.0", + "axios": "^1.6.7", + "dotenv": "^16.4.5", + "fs-extra": "^10.1.0", + "hardhat-deploy": "^0.11.43", + "npm-registry-fetch": "^17.1.0", + "semver": "^7.6.3", + "ts-node": "^10.9.1", + "tslog": "^4.3.1", + "typescript": "^5.5.4" + }, + "peerDependencies": { + "hardhat": "^2.22.6" + } + }, + "node_modules/@tenderly/hardhat-integration/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tenderly/hardhat-tenderly": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@tenderly/hardhat-tenderly/-/hardhat-tenderly-2.5.2.tgz", + "integrity": "sha512-JCG1UkFBRZE2fL8g4jfbKUsju7gK3Dg6CxksJO9Db9ckM1EkL4wCY9G5KTLwh/UL0cT04J8ZK1RmaZ6hG8wfKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-ignition": "^0.15.5", + "@nomicfoundation/hardhat-verify": "^2.0.8", + "@openzeppelin/hardhat-upgrades": "^3.3.0", + "@openzeppelin/upgrades-core": "^1.32.2", + "@tenderly/hardhat-integration": "^1.1.0", + "dotenv": "^16.4.5", + "ethers": "^6.8.1" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/@typechain/ethers-v6": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v6/-/ethers-v6-0.5.1.tgz", + "integrity": "sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + }, + "peerDependencies": { + "ethers": "6.x", + "typechain": "^8.3.2", + "typescript": ">=4.7.0" + } + }, + "node_modules/@typechain/hardhat": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-9.1.0.tgz", + "integrity": "sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA==", + "dev": true, + "dependencies": { + "fs-extra": "^9.1.0" + }, + "peerDependencies": { + "@typechain/ethers-v6": "^0.5.1", + "ethers": "^6.1.0", + "hardhat": "^2.9.9", + "typechain": "^8.3.2" + } + }, + "node_modules/@typechain/hardhat/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@types/bn.js": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz", + "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/chai": { + "version": "4.3.20", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", + "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==" + }, + "node_modules/@types/chai-as-promised": { + "version": "7.1.8", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", + "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", + "license": "MIT", + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, + "node_modules/@types/mocha": { + "version": "10.0.9", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.9.tgz", + "integrity": "sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q==", + "dev": true + }, + "node_modules/@types/node": { + "version": "22.7.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.7.tgz", + "integrity": "sha512-SRxCrrg9CL/y54aiMCG3edPKdprgMVGDXjA3gB8UmmBW5TcXzRUYAh8EWzTnSJFAd1rgImPELza+A3bJ+qxz8Q==", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/node-gzip": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@types/node-gzip/-/node-gzip-1.1.3.tgz", + "integrity": "sha512-gonKbqhKCTrnTpgM5VoVIILYF6odOS4nN2xaIkOUq8ckdrbD3PyF6h5SHIM23eHK/Q1dpHAQsWk5v2WUW7q14Q==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@types/node-gzip/-/node-gzip-1.1.3.tgz", + "integrity": "sha512-gonKbqhKCTrnTpgM5VoVIILYF6odOS4nN2xaIkOUq8ckdrbD3PyF6h5SHIM23eHK/Q1dpHAQsWk5v2WUW7q14Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.16", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.16.tgz", + "integrity": "sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==", + "dev": true + }, + "node_modules/@types/secp256k1": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", + "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.13.0.tgz", + "integrity": "sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true, + "engines": { + "node": ">=0.3.0" + } + }, + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "dev": true + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2""fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/amazon-cognito-identity-js": { + "version": "6.3.12", + "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.12.tgz", + "integrity": "sha512-s7NKDZgx336cp+oDeUtB2ZzT8jWJp/v2LWuYl+LQtMEODe22RF1IJ4nRiDATp+rp1pTffCZcm44Quw4jx2bqNg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "1.2.2", + "buffer": "4.9.2", + "fast-base64-decode": "^1.0.0", + "isomorphic-unfetch": "^3.0.0", + "js-cookie": "^2.2.1" + } + }, + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1""color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1""node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true + }, + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "license": "MIT", + "dependencies": { + "retry": "0.13.1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/axios": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base-x": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", + "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", + "license": "MIT" + }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", + "license": "MIT" + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0""balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1""fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "license": "MIT" + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "license": "MIT", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "license": "MIT", + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "node_modules/cbor": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "dev": true, + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=12.19""node": ">=12.19" + } + }, + "node_modules/chai": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0""type-detect": "^4.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chai-as-promised": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", + "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", + "dependencies": { + "check-error": "^1.0.2" + }, + "peerDependencies": { + "chai": ">= 2.1.2 < 6""chai": ">= 2.1.2 < 6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0""ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1""node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "dev": true, + "dependencies": { + "readdirp": "^4.0.1""readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0""node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "colors": "^1.1.2" + } + }, + "node_modules/cli-table3/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-table3/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-table3/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0""color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true + }, + "node_modules/command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "dev": true, + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", + "dev": true, + "dependencies": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/command-line-usage/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/command-line-usage/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/command-line-usage/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/command-line-usage/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/compare-versions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", + "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/death": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", + "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3""ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/difflib": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", + "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==", + "dev": true, + "dependencies": { + "heap": ">= 0.2.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/eciesjs": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/eciesjs/-/eciesjs-0.4.8.tgz", + "integrity": "sha512-U2wAn6yEOVBP9lOVh3nryufg3hQTKVicG+qjEfqB/70m/mU9DzwWNdK0mC5zuxlJH42EGAezFlHVWI0snwg1nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/ciphers": "^1.0.0", + "@noble/curves": "^1.6.0", + "@noble/hashes": "^1.5.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==", + "dev": true, + "license": "MIT" + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus""node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", + "dev": true, + "dependencies": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=0.12.0" + }, + "optionalDependencies": { + "source-map": "~0.2.0" + } + }, + "node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eth-gas-reporter": { + "version": "0.2.27", + "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz", + "integrity": "sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==", + "dev": true, + "dependencies": { + "@solidity-parser/parser": "^0.14.0", + "axios": "^1.5.1", + "axios": "^1.5.1", + "cli-table3": "^0.5.0", + "colors": "1.4.0", + "ethereum-cryptography": "^1.0.3", + "ethers": "^5.7.2", + "ethers": "^5.7.2", + "fs-readdir-recursive": "^1.1.0", + "lodash": "^4.17.14", + "markdown-table": "^1.1.3", + "mocha": "^10.2.0", + "mocha": "^10.2.0", + "req-cwd": "^2.0.0", + "sha1": "^1.1.1", + "sync-request": "^6.0.0" + }, + "peerDependencies": { + "@codechecks/client": "^0.1.0" + }, + "peerDependenciesMeta": { + "@codechecks/client": { + "optional": true + } + } + }, + "node_modules/eth-gas-reporter/node_modules/@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "dev": true, + "funding": [ + { + "type": "individual", "url": "https://paulmillr.com/funding/" } - }, - "node_modules/@scure/bip39/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 16" - }, - "funding": { + ] + }, + "node_modules/eth-gas-reporter/node_modules/@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "dev": true, + "funding": [ + { + "type": "individual", "url": "https://paulmillr.com/funding/" } - }, - "node_modules/@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" + ], + "dependencies": { + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" } - }, - "node_modules/@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" + ], + "dependencies": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0""@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/ethereum-cryptography": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", + "dev": true, + "dependencies": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1""@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" + } + }, + "node_modules/eth-gas-reporter/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" }, - "engines": { - "node": ">=6" + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0""@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "node_modules/ethereum-bloom-filters": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz", + "integrity": "sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==", + "dev": true, + "dependencies": { + "@noble/hashes": "^1.4.0""@noble/hashes": "^1.4.0" + } + }, + "node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5""@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/ethereumjs-abi": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ethereumjs-abi/node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ethereumjs-abi/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { + "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" } }, - "node_modules/@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", - "license": "BSD-3-Clause", + "node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" }, "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" + "node": ">=10.0.0""@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" }, "engines": { - "node": ">=6" + "node": ">=10.0.0" } }, - "node_modules/@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "node_modules/ethers": { + "version": "6.13.4", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.4.tgz", + "integrity": "sha512-21YtnZVg4/zKkCQPjrDj38B1r4nQvTZLopUGMLQ1ePU2zV/joCfDC3t3iKQjWRzjjjbzR+mdAIoikeBRNkdllA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1""tslib": "2.7.0", + "ws": "8.17.1" }, "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=6" + "node": ">=14.0.0" } }, - "node_modules/@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", - "license": "BSD-3-Clause", + "node_modules/ethers/node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dev": true, "dependencies": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" + "@noble/hashes": "1.3.2" }, - "engines": { - "node": ">=6" - } + "funding": { + "url": "https://paulmillr.com/funding/" + } }, - "node_modules/@smithy/types": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.6.0.tgz", - "integrity": "sha512-8VXK/KzOHefoC65yRgCn5vG1cysPJjHnOVt9d0ybFQSmJgQj152vMn4EkYhGuaOmnnZvCPav/KnYyE6/KsNZ2w==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, + "node_modules/ethers/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "dev": true, "engines": { - "node": ">=16.0.0" + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@smithy/types/node_modules/tslib": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "license": "0BSD" - }, - "node_modules/@solidity-parser/parser": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", - "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", - "license": "MIT", + "node_modules/ethers/node_modules/@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "dev": true, "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" + "undici-types": "~6.19.2" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "license": "MIT", - "peer": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "license": "MIT", - "peer": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "license": "MIT", - "peer": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "license": "MIT", - "peer": true + "node_modules/ethers/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "dev": true }, - "node_modules/@typechain/ethers-v6": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v6/-/ethers-v6-0.5.1.tgz", - "integrity": "sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA==", - "license": "MIT", - "peer": true, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "dev": true, "dependencies": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" }, - "peerDependencies": { - "ethers": "6.x", - "typechain": "^8.3.2", - "typescript": ">=4.7.0" + "engines": { + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/@typechain/hardhat": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-9.1.0.tgz", - "integrity": "sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA==", - "license": "MIT", - "peer": true, - "dependencies": { - "fs-extra": "^9.1.0" - }, - "peerDependencies": { - "@typechain/ethers-v6": "^0.5.1", - "ethers": "^6.1.0", - "hardhat": "^2.9.9", - "typechain": "^8.3.2" - } + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true }, - "node_modules/@typechain/hardhat/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "license": "MIT", - "peer": true, + "node_modules/ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "dev": true, "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/@types/bn.js": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz", - "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/chai": { - "version": "4.3.20", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", - "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", - "license": "MIT" - }, - "node_modules/@types/chai-as-promised": { - "version": "7.1.8", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", - "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", - "license": "MIT", - "dependencies": { - "@types/chai": "*" - } - }, - "node_modules/@types/concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", - "license": "MIT", - "dependencies": { - "@types/node": "*" + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "license": "MIT", - "peer": true, "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, - "node_modules/@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "node_modules/fast-base64-decode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", + "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", "license": "MIT" }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "license": "MIT", - "peer": true - }, - "node_modules/@types/mocha": { - "version": "10.0.9", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.9.tgz", - "integrity": "sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q==", - "license": "MIT", - "peer": true - }, - "node_modules/@types/node": { - "version": "22.7.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.9.tgz", - "integrity": "sha512-jrTfRC7FM6nChvU7X2KqcrgquofrWLFDeYC1hKfwNWomVvrn7JIksqf344WN2X/y8xrgqBd2dJATZV4GbatBfg==", - "license": "MIT", - "dependencies": { - "undici-types": "~6.19.2" - } + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, - "node_modules/@types/node-gzip": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@types/node-gzip/-/node-gzip-1.1.3.tgz", - "integrity": "sha512-gonKbqhKCTrnTpgM5VoVIILYF6odOS4nN2xaIkOUq8ckdrbD3PyF6h5SHIM23eHK/Q1dpHAQsWk5v2WUW7q14Q==", + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", - "license": "MIT", "dependencies": { - "@types/node": "*" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" } }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "license": "MIT", - "peer": true + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true }, - "node_modules/@types/qs": { - "version": "6.9.16", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.16.tgz", - "integrity": "sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==", - "license": "MIT" + "node_modules/fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "dev": true }, - "node_modules/@types/secp256k1": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", - "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", - "license": "MIT", + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, "dependencies": { - "@types/node": "*" + "reusify": "^1.0.4" } }, - "node_modules/abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", - "license": "ISC", - "peer": true - }, - "node_modules/acorn": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.13.0.tgz", - "integrity": "sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==", + "node_modules/fdir": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", + "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "dev": true, "license": "MIT", - "peer": true, - "bin": { - "acorn": "bin/acorn" + "peerDependencies": { + "picomatch": "^3 || ^4" }, - "engines": { - "node": ">=0.4.0" + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "license": "MIT", - "peer": true, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, "dependencies": { - "acorn": "^8.11.0" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "license": "MIT", - "engines": { - "node": ">=0.3.0" + "node": ">=8" } }, - "node_modules/aes-js": { - "version": "4.0.0-beta.5", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", - "license": "MIT" - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "license": "MIT", + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dev": true, "dependencies": { - "debug": "4" + "array-back": "^3.0.1" }, "engines": { - "node": ">= 6.0.0" + "node": ">=4.0.0" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "license": "MIT", "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "node": ">=10" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/amazon-cognito-identity-js": { - "version": "6.3.12", - "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.12.tgz", - "integrity": "sha512-s7NKDZgx336cp+oDeUtB2ZzT8jWJp/v2LWuYl+LQtMEODe22RF1IJ4nRiDATp+rp1pTffCZcm44Quw4jx2bqNg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-js": "1.2.2", - "buffer": "4.9.2", - "fast-base64-decode": "^1.0.0", - "isomorphic-unfetch": "^3.0.0", - "js-cookie": "^2.2.1" - } - }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "license": "BSD-3-Clause OR MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.4.2" + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" } }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "license": "ISC", + "node_modules/fmix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz", + "integrity": "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==", + "dev": true, + "license": "MIT", "dependencies": { - "string-width": "^4.1.0" + "imul": "^1.0.0" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "license": "MIT", "engines": { - "node": ">=6" + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "license": "MIT", + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "license": "ISC", "dependencies": { - "type-fest": "^0.21.3" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">=8" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "node": ">=14" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", - "license": "BSD-3-Clause" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", + "node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "license": "MIT", - "peer": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" - }, - "node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "license": "MIT" - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "license": "MIT", - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", - "license": "MIT", - "peer": true - }, - "node_modules/async-retry": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", - "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", - "license": "MIT", - "dependencies": { - "retry": "0.13.1" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "license": "ISC", - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/axios": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", - "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/base-x": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", - "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", - "license": "MIT" - }, - "node_modules/bignumber.js": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", - "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 6""node": ">= 6" } }, - "node_modules/blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", - "license": "MIT" - }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "license": "MIT" + "node_modules/fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", + "dev": true }, - "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0""graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "node": ">=12" } }, - "node_modules/braces": { + "node_modules/fs-minipass": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", "dependencies": { - "fill-range": "^7.1.1" + "minipass": "^7.0.3" }, "engines": { - "node": ">=8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/brorand": { + "node_modules/fs-readdir-recursive": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "license": "MIT" - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "license": "ISC" + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "license": "MIT", - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, - "node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "base-x": "^3.0.2" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "license": "MIT", - "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "license": "MIT", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "license": "MIT" - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "license": "MIT" - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "license": "MIT", "engines": { - "node": ">= 0.8" + "node": "*" } }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "license": "MIT", + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, "dependencies": { - "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "engines": { "node": ">= 0.4" @@ -2741,5112 +4682,4556 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "license": "MIT", + "node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "license": "Apache-2.0" - }, - "node_modules/cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", - "license": "MIT", - "peer": true, + "node_modules/ghost-testrpc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", + "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", + "dev": true, "dependencies": { - "nofilter": "^3.1.0" + "chalk": "^2.4.2", + "node-emoji": "^1.10.0" }, - "engines": { - "node": ">=12.19" + "bin": { + "testrpc-sc": "index.js" } }, - "node_modules/chai": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", - "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", - "license": "MIT", - "peer": true, + "node_modules/ghost-testrpc/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.1.0" + "color-convert": "^1.9.0" }, "engines": { "node": ">=4" } }, - "node_modules/chai-as-promised": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", - "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", - "license": "WTFPL", + "node_modules/ghost-testrpc/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "dependencies": { - "check-error": "^1.0.2" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, - "peerDependencies": { - "chai": ">= 2.1.2 < 6" + "engines": { + "node": ">=4" } }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", + "node_modules/ghost-testrpc/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "color-name": "1.1.3""color-name": "1.1.3" } }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "license": "BSD-3-Clause", - "engines": { - "node": "*" - } - }, - "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", - "license": "MIT", - "dependencies": { - "get-func-name": "^2.0.2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", - "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", - "license": "MIT", - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "license": "MIT" - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", - "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.0", - "string-width": "^2.1.1" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "colors": "^1.1.2" - } - }, - "node_modules/cli-table3/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-table3/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "license": "MIT", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-table3/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "license": "MIT" - }, - "node_modules/command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", - "license": "MIT", - "peer": true, - "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/command-line-usage": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", - "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", - "license": "MIT", - "peer": true, - "dependencies": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/command-line-usage/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/command-line-usage/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/command-line-usage/node_modules/color-name": { + "node_modules/ghost-testrpc/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT", - "peer": true + "dev": true }, - "node_modules/command-line-usage/node_modules/escape-string-regexp": { + "node_modules/ghost-testrpc/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "peer": true, + "dev": true, "engines": { "node": ">=0.8.0" } }, - "node_modules/command-line-usage/node_modules/has-flag": { + "node_modules/ghost-testrpc/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", - "peer": true, + "dev": true, "engines": { "node": ">=4" } }, - "node_modules/command-line-usage/node_modules/supports-color": { + "node_modules/ghost-testrpc/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/compare-versions": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", - "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "license": "MIT" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "engines": [ - "node >= 0.8" - ], - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "license": "MIT", - "peer": true - }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "license": "BSD-3-Clause", - "engines": { - "node": "*" - } - }, - "node_modules/death": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", - "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", - "peer": true - }, - "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "license": "MIT", + "dev": true, "dependencies": { - "ms": "^2.1.3" + "has-flag": "^3.0.0""has-flag": "^3.0.0" }, "engines": { - "node": ">=6.0" + "node": ">=4""engines": { + "node": ">=4" + } }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } - } - }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "license": "MIT", - "engines": { - "node": ">=10" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-eql": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", - "license": "MIT", - "dependencies": { - "type-detect": "^4.0.0" + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } }, - "engines": { - "node": ">=6" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "license": "MIT", - "peer": true - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "engines": { - "node": ">= 0.4" + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/difflib": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", - "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==", - "peer": true, - "dependencies": { - "heap": ">= 0.2.0" + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } }, - "engines": { - "node": "*" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "license": "MIT", - "peer": true, - "dependencies": { - "path-type": "^4.0.0" + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" + "node_modules/globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/eciesjs": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/eciesjs/-/eciesjs-0.4.10.tgz", - "integrity": "sha512-dYAgdXAC7/d9fEC0w6kpRWj5vHah2BQgMM639g78JI0FUUffMN2Mq60HEHPkyH8ah+FX+cQd6ouDK4kWiatzyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ecies/ciphers": "^0.2.0", - "@noble/ciphers": "^1.0.0", - "@noble/curves": "^1.6.0", - "@noble/hashes": "^1.5.0" + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0""node": ">=0.10.0" + } }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "license": "MIT", - "engines": { - "node": ">=10" + "node_modules/hardhat": { + "version": "2.22.18", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.22.18.tgz", + "integrity": "sha512-2+kUz39gvMo56s75cfLBhiFedkQf+gXdrwCcz4R/5wW0oBdwiyfj2q9BIkMoaA0WIGYYMU2I1Cc4ucTunhfjzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@metamask/eth-sig-util": "^4.0.0", + "@nomicfoundation/edr": "^0.7.0", + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-tx": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "@nomicfoundation/solidity-analyzer": "^0.1.0", + "@sentry/node": "^5.18.1", + "@types/bn.js": "^5.1.0", + "@types/lru-cache": "^5.1.0", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "boxen": "^5.1.2", + "chokidar": "^4.0.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^1.0.3", + "ethereumjs-abi": "^0.6.8", + "find-up": "^5.0.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "json-stream-stringify": "^3.1.4", + "json-stream-stringify": "^3.1.4", + "keccak": "^3.0.2", + "lodash": "^4.17.11", + "mnemonist": "^0.38.0", + "mocha": "^10.0.0", + "p-map": "^4.0.0", + "picocolors": "^1.1.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "solc": "0.8.26", + "solc": "0.8.26", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "tinyglobby": "^0.2.6", + "tsort": "0.0.1", + "undici": "^5.14.0", + "uuid": "^8.3.2", + "ws": "^7.4.6" + }, + "bin": { + "hardhat": "internal/cli/bootstrap.js" + }, + "peerDependencies": { + "ts-node": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } + } }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1" + "node_modules/hardhat-deploy": { + "version": "0.11.45", + "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.45.tgz", + "integrity": "sha512-aC8UNaq3JcORnEUIwV945iJuvBwi65tjHVDU3v6mOcqik7WAzHVCJ7cwmkkipsHrWysrB5YvGF1q9S1vIph83w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/providers": "^5.7.2", + "@ethersproject/solidity": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wallet": "^5.7.0", + "@types/qs": "^6.9.7", + "axios": "^0.21.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "ethers": "^5.7.0", + "form-data": "^4.0.0", + "fs-extra": "^10.0.0", + "match-all": "^1.2.6", + "murmur-128": "^0.2.1", + "qs": "^6.9.4", + "zksync-web3": "^0.14.3" + } }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" + "node_modules/hardhat-deploy/node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.0" + } }, - "engines": { - "node": ">=0.12.0" + "node_modules/hardhat-deploy/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } }, - "optionalDependencies": { - "source-map": "~0.2.0" - } - }, - "node_modules/esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", - "license": "BSD-2-Clause", - "peer": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "node_modules/hardhat-deploy/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "license": "BSD-2-Clause", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eth-gas-reporter": { - "version": "0.2.27", - "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz", - "integrity": "sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==", - "license": "MIT", - "dependencies": { - "@solidity-parser/parser": "^0.14.0", - "axios": "^1.5.1", - "cli-table3": "^0.5.0", - "colors": "1.4.0", - "ethereum-cryptography": "^1.0.3", - "ethers": "^5.7.2", - "fs-readdir-recursive": "^1.1.0", - "lodash": "^4.17.14", - "markdown-table": "^1.1.3", - "mocha": "^10.2.0", - "req-cwd": "^2.0.0", - "sha1": "^1.1.1", - "sync-request": "^6.0.0" + "node_modules/hardhat-deploy/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } }, - "peerDependencies": { - "@codechecks/client": "^0.1.0" + "node_modules/hardhat-gas-reporter": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz", + "integrity": "sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-uniq": "1.0.3", + "eth-gas-reporter": "^0.2.25", + "sha1": "^1.1.1" + }, + "peerDependencies": { + "hardhat": "^2.0.2" + } }, - "peerDependenciesMeta": { - "@codechecks/client": { - "optional": true + "node_modules/hardhat-tracer": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hardhat-tracer/-/hardhat-tracer-3.1.0.tgz", + "integrity": "sha512-Ip16HQAuzbqbNJUIEVfqmbPmOY90bxZSpwu5Q73cwloy+LUYA04BATUM9Gui5H7zcgsgZ1IVy7pSYn6ZMjLmag==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "debug": "^4.3.4", + "ethers": "^5.6.1", + "semver": "^7.6.2" + }, + "peerDependencies": { + "chai": "4.x", + "hardhat": ">=2.22.5 <3.x" } - } - }, - "node_modules/eth-gas-reporter/node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" + }, + "node_modules/hardhat-tracer/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" } - ], - "license": "MIT" - }, - "node_modules/eth-gas-reporter/node_modules/@scure/bip32": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", - "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" + }, + "node_modules/hardhat-tracer/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } - ], - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.2.0", - "@noble/secp256k1": "~1.7.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/@scure/bip39": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", - "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" + }, + "node_modules/hardhat/node_modules/@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/hardhat/node_modules/@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" } - ], - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.2.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/ethereum-cryptography": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", - "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@scure/bip32": "1.1.5", - "@scure/bip39": "1.1.1" - } - }, - "node_modules/eth-gas-reporter/node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + }, + "node_modules/hardhat/node_modules/@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, - "node_modules/ethereum-bloom-filters": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz", - "integrity": "sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@noble/hashes": "^1.4.0" - } - }, - "node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "license": "MIT", - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/ethereumjs-abi": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", - "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/ethereumjs-abi/node_modules/@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/ethereumjs-abi/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "license": "MIT" - }, - "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "license": "MPL-2.0", - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "license": "MPL-2.0", - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ethers": { - "version": "6.13.4", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.4.tgz", - "integrity": "sha512-21YtnZVg4/zKkCQPjrDj38B1r4nQvTZLopUGMLQ1ePU2zV/joCfDC3t3iKQjWRzjjjbzR+mdAIoikeBRNkdllA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/ethers-io/" + "node_modules/hardhat/node_modules/ethereum-cryptography": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", + "dev": true, + "dependencies": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" + } + }, + "node_modules/hardhat/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "engines": { + "node": ">=6 <7 || >=8" } - ], - "license": "MIT", - "dependencies": { - "@adraffy/ens-normalize": "1.10.1", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.2", - "@types/node": "22.7.5", - "aes-js": "4.0.0-beta.5", - "tslib": "2.7.0", - "ws": "8.17.1" }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/ethers/node_modules/@noble/curves": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.3.2" + "node_modules/hardhat/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/ethers/node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "license": "MIT", - "engines": { - "node": ">= 16" + "node_modules/hardhat/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/ethers/node_modules/@types/node": { - "version": "22.7.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", - "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", - "license": "MIT", - "dependencies": { - "undici-types": "~6.19.2" - } - }, - "node_modules/ethers/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", - "license": "0BSD" - }, - "node_modules/ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "license": "MIT", - "peer": true, - "dependencies": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" + "node_modules/hardhat/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/ethjs-unit/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "license": "MIT", - "peer": true - }, - "node_modules/ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "license": "MIT", - "dependencies": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "license": "MIT", - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/fast-base64-decode": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", - "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", - "license": "MIT" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT", - "peer": true - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "license": "MIT", - "peer": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "license": "MIT", - "peer": true - }, - "node_modules/fast-uri": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", - "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "license": "ISC", - "peer": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "array-back": "^3.0.1" + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "license": "MIT", - "dependencies": { - "locate-path": "^2.0.0" + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } }, - "engines": { - "node": ">=4" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" }, - "peerDependenciesMeta": { - "debug": { - "optional": true + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" } - } - }, - "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "license": "MIT" - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "license": "MIT" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "node_modules/heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", + "dev": true + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "dev": true, + "dependencies": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "dev": true, + "dependencies": { + "@types/node": "^10.0.3" + } + }, + "node_modules/http-response-object/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "dev": true + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.2.tgz", + "integrity": "sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true + }, + "node_modules/imul": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz", + "integrity": "sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/io-ts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "dev": true, + "dependencies": { + "fp-ts": "^1.0.0" + } + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "dev": true, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isomorphic-unfetch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", + "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.1", + "unfetch": "^4.2.0" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-cookie": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", + "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==", + "license": "MIT" + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json-stream-stringify": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", + "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", + "dev": true, + "engines": { + "node": ">=7.10.1" + } + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/jsonschema": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", + "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/keccak": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "dev": true + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "license": "MIT" + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/make-fetch-happen": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/markdown-table": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", + "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", + "dev": true + }, + "node_modules/match-all": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz", + "integrity": "sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micro-ftch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1""brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs""node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } }, - "engines": { - "node": ">= 0.4" + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/ghost-testrpc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", - "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", - "license": "ISC", - "peer": true, - "dependencies": { - "chalk": "^2.4.2", - "node-emoji": "^1.10.0" + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } }, - "bin": { - "testrpc-sc": "index.js" - } - }, - "node_modules/ghost-testrpc/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" + "node_modules/mnemonist": { + "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "dev": true, + "dependencies": { + "obliterator": "^2.0.0" + } }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ghost-testrpc/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "node_modules/mocha": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", + "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + } }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ghost-testrpc/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/ghost-testrpc/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT", - "peer": true - }, - "node_modules/ghost-testrpc/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ghost-testrpc/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ghost-testrpc/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" + "node_modules/mocha/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } }, - "engines": { - "node": ">=4" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "node_modules/mocha/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "engines": { - "node": "*" + "node_modules/mocha/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" + "node_modules/mocha/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } }, - "engines": { - "node": "*" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "license": "MIT", - "peer": true, - "dependencies": { - "global-prefix": "^3.0.0" + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/murmur-128": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz", + "integrity": "sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "encode-utf8": "^1.0.2", + "fmix": "^0.1.0", + "imul": "^1.0.0" + } }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "license": "MIT", - "peer": true, - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" + "node_modules/ndjson": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ndjson/-/ndjson-2.0.0.tgz", + "integrity": "sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "json-stringify-safe": "^5.0.1", + "minimist": "^1.2.5", + "readable-stream": "^3.6.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "ndjson": "cli.js" + }, + "engines": { + "node": ">=10" + } }, - "engines": { - "node": ">=6" - } - }, - "node_modules/globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "engines": { - "node": ">=8" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "license": "MIT" + }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dev": true, + "dependencies": { + "lodash": "^4.17.21" + } }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } }, - "bin": { - "handlebars": "bin/handlebars" + "node_modules/node-gyp-build": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz", + "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } }, - "engines": { - "node": ">=0.4.7" + "node_modules/node-gzip": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/node-gzip/-/node-gzip-1.1.2.tgz", + "integrity": "sha512-ZB6zWpfZHGtxZnPMrJSKHVPrRjURoUzaDbLFj3VO70mpLTW5np96vXyHwft4Id0o+PYIzgDkBUjIzaNHhQ8srw==", + "license": "MIT" + }, + "node_modules/nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "license": "MIT", + "engines": { + "node": ">=12.19" + } }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/handlebars/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hardhat": { - "version": "2.22.14", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.22.14.tgz", - "integrity": "sha512-sD8vHtS9l5QQVHzyPPe3auwZDJyZ0fG3Z9YENVa4oOqVEefCuHcPzdU736rei3zUKTqkX0zPIHkSMHpu02Fq1A==", - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/edr": "^0.6.4", - "@nomicfoundation/ethereumjs-common": "4.0.4", - "@nomicfoundation/ethereumjs-tx": "5.0.4", - "@nomicfoundation/ethereumjs-util": "9.0.4", - "@nomicfoundation/solidity-analyzer": "^0.1.0", - "@sentry/node": "^5.18.1", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "^5.1.0", - "adm-zip": "^0.4.16", - "aggregate-error": "^3.0.0", - "ansi-escapes": "^4.3.0", - "boxen": "^5.1.2", - "chalk": "^2.4.2", - "chokidar": "^4.0.0", - "ci-info": "^2.0.0", - "debug": "^4.1.1", - "enquirer": "^2.3.0", - "env-paths": "^2.2.0", - "ethereum-cryptography": "^1.0.3", - "ethereumjs-abi": "^0.6.8", - "find-up": "^2.1.0", - "fp-ts": "1.19.3", - "fs-extra": "^7.0.1", - "glob": "7.2.0", - "immutable": "^4.0.0-rc.12", - "io-ts": "1.10.4", - "json-stream-stringify": "^3.1.4", - "keccak": "^3.0.2", - "lodash": "^4.17.11", - "mnemonist": "^0.38.0", - "mocha": "^10.0.0", - "p-map": "^4.0.0", - "raw-body": "^2.4.1", - "resolve": "1.17.0", - "semver": "^6.3.0", - "solc": "0.8.26", - "source-map-support": "^0.5.13", - "stacktrace-parser": "^0.1.10", - "tsort": "0.0.1", - "undici": "^5.14.0", - "uuid": "^8.3.2", - "ws": "^7.4.6" + "node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } }, - "bin": { - "hardhat": "internal/cli/bootstrap.js" + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "peerDependencies": { - "ts-node": "*", - "typescript": "*" + "node_modules/npm-package-arg": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz", + "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true + "node_modules/npm-package-arg/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, - "typescript": { - "optional": true + "engines": { + "node": ">=10" } - } - }, - "node_modules/hardhat-gas-reporter": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz", - "integrity": "sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==", - "license": "MIT", - "dependencies": { - "array-uniq": "1.0.3", - "eth-gas-reporter": "^0.2.25", - "sha1": "^1.1.1" }, - "peerDependencies": { - "hardhat": "^2.0.2" - } - }, - "node_modules/hardhat/node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" + "node_modules/npm-registry-fetch": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz", + "integrity": "sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^2.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^13.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minizlib": "^2.1.2", + "npm-package-arg": "^11.0.0", + "proc-log": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" } - ], - "license": "MIT" - }, - "node_modules/hardhat/node_modules/@scure/bip32": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", - "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" + }, + "node_modules/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "dev": true, + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" } - ], - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.2.0", - "@noble/secp256k1": "~1.7.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/hardhat/node_modules/@scure/bip39": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", - "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" + }, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" } - ], - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.2.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/hardhat/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/hardhat/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" - }, - "node_modules/hardhat/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/hardhat/node_modules/ethereum-cryptography": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", - "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@scure/bip32": "1.1.5", - "@scure/bip39": "1.1.1" - } - }, - "node_modules/hardhat/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "node_modules/obliterator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", + "dev": true + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/hardhat/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/hardhat/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/hardhat/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "license": "MIT", - "engines": { - "node": ">=8.3.0" + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "node_modules/ordinal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", + "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", + "license": "MIT" + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" }, - "utf-8-validate": { - "optional": true + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "license": "MIT", - "engines": { - "node": ">= 0.4" + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "license": "MIT", - "engines": { - "node": ">= 0.4" + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/heap": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", - "license": "MIT", - "peer": true - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "license": "MIT", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/http-basic": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", - "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", - "license": "MIT", - "dependencies": { - "caseless": "^0.12.0", - "concat-stream": "^1.6.2", - "http-response-object": "^3.0.1", - "parse-cache-control": "^1.0.1" + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-response-object": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", - "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", - "license": "MIT", - "dependencies": { - "@types/node": "^10.0.3" - } - }, - "node_modules/http-response-object/node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", - "license": "MIT" - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "license": "MIT", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "engines": { + "node": ">=0.12" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" }, - { - "type": "consulting", - "url": "https://feross.org/support" + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/immer": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.2.tgz", - "integrity": "sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==", - "license": "MIT", - "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/immutable": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", - "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", - "license": "MIT" - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC", - "peer": true - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/io-ts": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", - "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", - "license": "MIT", - "dependencies": { - "fp-ts": "^1.0.0" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", - "license": "MIT", - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "license": "MIT", - "engines": { - "node": ">=10" + "node_modules/prettier-plugin-solidity": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-1.4.1.tgz", + "integrity": "sha512-Mq8EtfacVZ/0+uDKTtHZGW3Aa7vEbX/BNx63hmVg6YTiTXSiuKP0amj0G6pGwjmLaOfymWh3QgXEZkjQbU8QRg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-1.4.1.tgz", + "integrity": "sha512-Mq8EtfacVZ/0+uDKTtHZGW3Aa7vEbX/BNx63hmVg6YTiTXSiuKP0amj0G6pGwjmLaOfymWh3QgXEZkjQbU8QRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@solidity-parser/parser": "^0.18.0", + "semver": "^7.5.4""@solidity-parser/parser": "^0.18.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=16""node": ">=16" + }, + "peerDependencies": { + "prettier": ">=2.3.0""prettier": ">=2.3.0" + } }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC", - "peer": true - }, - "node_modules/isomorphic-unfetch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", - "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", - "license": "MIT", - "dependencies": { - "node-fetch": "^2.6.1", - "unfetch": "^4.2.0" - } - }, - "node_modules/js-cookie": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", - "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==", - "license": "MIT" - }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" + "node_modules/prettier-plugin-solidity/node_modules/@solidity-parser/parser": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.18.0.tgz", + "integrity": "sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==", + "dev": true + }, + "node_modules/prettier-plugin-solidity/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT", - "peer": true - }, - "node_modules/json-stream-stringify": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", - "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", - "license": "MIT", - "engines": { - "node": ">=7.10.1" - } - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "license": "ISC", - "peer": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "license": "MIT", - "peer": true, - "bin": { - "json5": "lib/cli.js" + "node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "universalify": "^2.0.0" + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "dev": true, + "dependencies": { + "asap": "~2.0.6" + } }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonschema": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", - "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/keccak": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", - "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "license": "MIT", - "peer": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "node_modules/promise-retry/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "license": "MIT", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } }, - "engines": { - "node": ">=4" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "license": "MIT", - "peer": true - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "license": "MIT", - "peer": true - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "license": "MIT" - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "license": "MIT", - "peer": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } }, - "engines": { - "node": ">=10" + "node_modules/proper-lockfile/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "license": "MIT", + "engines": { + "node": ">= 4" + } }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "license": "MIT", - "peer": true, - "dependencies": { - "get-func-name": "^2.0.1" - } - }, - "node_modules/lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", - "license": "MIT" - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "license": "ISC", - "peer": true - }, - "node_modules/markdown-table": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", - "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", - "license": "MIT" - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "license": "MIT", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micro-ftch": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", - "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==", - "license": "MIT", - "peer": true - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "license": "MIT", - "peer": true, - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "license": "ISC" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "license": "MIT" - }, - "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } }, - "engines": { - "node": ">=16 || 14 >=14.17" + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "license": "MIT", - "peer": true, - "dependencies": { - "minimist": "^1.2.6" + "node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "dev": true, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/""node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mnemonist": { - "version": "0.38.5", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", - "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", - "license": "MIT", - "dependencies": { - "obliterator": "^2.0.0" - } - }, - "node_modules/mocha": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", - "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==", - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.3", - "browser-stdout": "^1.3.1", - "chokidar": "^3.5.3", - "debug": "^4.3.5", - "diff": "^5.2.0", - "escape-string-regexp": "^4.0.0", - "find-up": "^5.0.0", - "glob": "^8.1.0", - "he": "^1.2.0", - "js-yaml": "^4.1.0", - "log-symbols": "^4.1.0", - "minimatch": "^5.1.6", - "ms": "^2.1.3", - "serialize-javascript": "^6.0.2", - "strip-json-comments": "^3.1.1", - "supports-color": "^8.1.1", - "workerpool": "^6.5.1", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9", - "yargs-unparser": "^2.0.0" + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/mocha/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "node_modules/recursive-readdir/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "engines": { - "node": ">= 8.10.0" + "node_modules/recursive-readdir/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node_modules/reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/mocha/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "node_modules/req-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", + "integrity": "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==", + "dev": true, + "dependencies": { + "req-from": "^2.0.0" + }, + "engines": { + "node": ">=4" + } }, - "engines": { - "node": ">=10" + "node_modules/req-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", + "integrity": "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==", + "dev": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "dependencies": { + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "dev": true, + "engines": { + "node": ">=4" + } }, - "engines": { - "node": ">=12" + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mocha/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } }, - "engines": { - "node": ">=10" + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" + "node_modules/rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^5.2.0" + }, + "bin": { + "rlp": "bin/rlp" + } }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } }, - "engines": { - "node": ">=10" + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sc-istanbul": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz", + "integrity": "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==", + "dev": true, + "dependencies": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "istanbul": "lib/cli.js" + } }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" + "node_modules/sc-istanbul/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } }, - "engines": { - "node": ">=10" + "node_modules/sc-istanbul/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" + "node_modules/sc-istanbul/node_modules/glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" + "node_modules/sc-istanbul/node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "engines": { - "node": ">=10" + "node_modules/sc-istanbul/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/ndjson": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ndjson/-/ndjson-2.0.0.tgz", - "integrity": "sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==", - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "json-stringify-safe": "^5.0.1", - "minimist": "^1.2.5", - "readable-stream": "^3.6.0", - "split2": "^3.0.0", - "through2": "^4.0.0" + "node_modules/sc-istanbul/node_modules/js-yaml/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } }, - "bin": { - "ndjson": "cli.js" + "node_modules/sc-istanbul/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } }, - "engines": { - "node": ">=10" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "license": "MIT", - "peer": true - }, - "node_modules/node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "license": "MIT" - }, - "node_modules/node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "license": "MIT", - "peer": true, - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" + "node_modules/sc-istanbul/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "dev": true + }, + "node_modules/sc-istanbul/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dev": true, + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } }, - "engines": { - "node": "4.x || >=6.0.0" + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "license": "MIT" + }, + "node_modules/secp256k1": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.4.tgz", + "integrity": "sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.4.tgz", + "integrity": "sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "elliptic": "^6.5.7", + "node-addon-api": "^5.0.0", + "elliptic": "^6.5.7", + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=18.0.0" + } }, - "peerDependencies": { - "encoding": "^0.1.0" + "node_modules/secp256k1/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/secp256k1/node_modules/elliptic": { + "version": "6.5.7", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.7.tgz", + "integrity": "sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } }, - "peerDependenciesMeta": { - "encoding": { - "optional": true + "node_modules/secp256k1/node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } - } - }, - "node_modules/node-gyp-build": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz", - "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==", - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-gzip": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/node-gzip/-/node-gzip-1.1.2.tgz", - "integrity": "sha512-ZB6zWpfZHGtxZnPMrJSKHVPrRjURoUzaDbLFj3VO70mpLTW5np96vXyHwft4Id0o+PYIzgDkBUjIzaNHhQ8srw==", - "license": "MIT" - }, - "node_modules/nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", - "license": "MIT", - "engines": { - "node": ">=12.19" - } - }, - "node_modules/nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", - "license": "ISC", - "peer": true, - "dependencies": { - "abbrev": "1" }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "license": "MIT", - "peer": true, - "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/number-to-bn/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "license": "MIT", - "peer": true - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obliterator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", - "license": "MIT" - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "license": "MIT", - "peer": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ordinal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", - "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", - "license": "MIT" - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "license": "MIT", - "dependencies": { - "p-try": "^1.0.0" + "node_modules/sha1": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", + "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", + "dev": true, + "dependencies": { + "charenc": ">= 0.0.1", + "crypt": ">= 0.0.1" + }, + "engines": { + "node": "*" + } }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "license": "MIT", - "dependencies": { - "p-limit": "^1.1.0" + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "engines": { - "node": ">=10" + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/parse-cache-control": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==" - }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "license": "MIT", - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "peer": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } }, - "engines": { - "node": ">=14" + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-plugin-solidity": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-1.4.1.tgz", - "integrity": "sha512-Mq8EtfacVZ/0+uDKTtHZGW3Aa7vEbX/BNx63hmVg6YTiTXSiuKP0amj0G6pGwjmLaOfymWh3QgXEZkjQbU8QRg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@solidity-parser/parser": "^0.18.0", - "semver": "^7.5.4" + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } }, - "engines": { - "node": ">=16" + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } }, - "peerDependencies": { - "prettier": ">=2.3.0" - } - }, - "node_modules/prettier-plugin-solidity/node_modules/@solidity-parser/parser": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.18.0.tgz", - "integrity": "sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==", - "dev": true, - "license": "MIT" - }, - "node_modules/prettier-plugin-solidity/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } }, - "engines": { - "node": ">=10" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "license": "MIT" - }, - "node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "license": "MIT", - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "license": "MIT", - "peer": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "node_modules/solc": { + "version": "0.8.26", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", + "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", + "dev": true, + "dependencies": { + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solc.js""solcjs": "solc.js" + }, + "engines": { + "node": ">=10.0.0""node": ">=10.0.0" + } }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/proper-lockfile": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", - "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" - } - }, - "node_modules/proper-lockfile/node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" - }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" + "node_modules/solc/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } }, - "engines": { - "node": ">=0.6" + "node_modules/solidity-ast": { + "version": "0.4.59", + "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.59.tgz", + "integrity": "sha512-I+CX0wrYUN9jDfYtcgWSe+OAowaXy8/1YQy7NS4ni5IBDmIYBq7ZzaP/7QqouLjzZapmQtvGLqCaYgoUWqBo5g==" + }, + "node_modules/solidity-coverage": { + "version": "0.8.13", + "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.13.tgz", + "integrity": "sha512-RiBoI+kF94V3Rv0+iwOj3HQVSqNzA9qm/qDP1ZDXK5IX0Cvho1qiz8hAXTsAo6KOIUeP73jfscq0KlLqVxzGWA==", + "dev": true, + "dependencies": { + "@ethersproject/abi": "^5.0.9", + "@solidity-parser/parser": "^0.18.0", + "chalk": "^2.4.2", + "death": "^1.1.0", + "difflib": "^0.2.4", + "fs-extra": "^8.1.0", + "ghost-testrpc": "^0.0.2", + "global-modules": "^2.0.0", + "globby": "^10.0.1", + "jsonschema": "^1.2.4", + "lodash": "^4.17.21", + "lodash": "^4.17.21", + "mocha": "^10.2.0", + "node-emoji": "^1.10.0", + "pify": "^4.0.1", + "recursive-readdir": "^2.2.2", + "sc-istanbul": "^0.4.5", + "semver": "^7.3.4", + "shelljs": "^0.8.3", + "web3-utils": "^1.3.6" + }, + "bin": { + "solidity-coverage": "plugins/bin.js" + }, + "peerDependencies": { + "hardhat": "^2.11.0" + } }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" + "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.18.0.tgz", + "integrity": "sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==", + "dev": true + }, + "node_modules/solidity-coverage/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "engines": { + "node": ">=4" + } + }, + "node_modules/solidity-coverage/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, - { - "type": "consulting", - "url": "https://feross.org/support" + "engines": { + "node": ">=4" } - ], - "license": "MIT", - "peer": true - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "node_modules/solidity-coverage/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", - "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", - "license": "MIT", - "engines": { - "node": ">= 14.16.0" + "node_modules/solidity-coverage/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/solidity-coverage/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "peer": true, - "dependencies": { - "resolve": "^1.1.6" + "node_modules/solidity-coverage/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "license": "MIT", - "peer": true, - "dependencies": { - "minimatch": "^3.0.5" + "node_modules/solidity-coverage/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/recursive-readdir/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/recursive-readdir/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" + "node_modules/solidity-coverage/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } }, - "engines": { - "node": "*" - } - }, - "node_modules/reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/req-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", - "integrity": "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==", - "license": "MIT", - "dependencies": { - "req-from": "^2.0.0" + "node_modules/solidity-coverage/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT", + "peer": true + }, + "node_modules/solidity-coverage/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.0" + } }, - "engines": { - "node": ">=4" - } - }, - "node_modules/req-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", - "integrity": "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==", - "license": "MIT", - "dependencies": { - "resolve-from": "^3.0.0" + "node_modules/solidity-coverage/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } }, - "engines": { - "node": ">=4" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "license": "MIT", - "dependencies": { - "path-parse": "^1.0.6" + "node_modules/solidity-coverage/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "license": "MIT", - "peer": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "license": "MIT", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "license": "MPL-2.0", - "dependencies": { - "bn.js": "^5.2.0" + "node_modules/solidity-coverage/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } }, - "bin": { - "rlp": "bin/rlp" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" + "node_modules/solidity-coverage/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "engines": { + "node": ">=10" + } + }, + "node_modules/solidity-coverage/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" }, - { - "type": "consulting", - "url": "https://feross.org/support" + "engines": { + "node": ">=4" } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" + }, + "node_modules/solidity-coverage/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", + "dev": true, + "optional": true, + "dependencies": { + "amdefine": ">=0.0.4" }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "engines": { + "node": ">=0.8.0""node": ">=0.8.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "license": "ISC", + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" }, - { - "type": "consulting", - "url": "https://feross.org/support" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } - ], - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/sc-istanbul": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz", - "integrity": "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==", - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" }, - "bin": { - "istanbul": "lib/cli.js" - } - }, - "node_modules/sc-istanbul/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "peer": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/sc-istanbul/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/sc-istanbul/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "peer": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "node_modules/stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "dev": true, + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "engines": { - "node": "*" - } - }, - "node_modules/sc-istanbul/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sc-istanbul/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "license": "MIT", - "peer": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/sc-istanbul/node_modules/js-yaml/node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "license": "BSD-2-Clause", - "peer": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } }, - "engines": { - "node": ">=4" - } - }, - "node_modules/sc-istanbul/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" + "node_modules/string-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", + "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } }, - "engines": { - "node": "*" - } - }, - "node_modules/sc-istanbul/node_modules/resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", - "license": "MIT", - "peer": true - }, - "node_modules/sc-istanbul/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^1.0.0" + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", - "license": "MIT" - }, - "node_modules/secp256k1": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.4.tgz", - "integrity": "sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "elliptic": "^6.5.7", - "node-addon-api": "^5.0.0", - "node-gyp-build": "^4.2.0" + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/secp256k1/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "license": "MIT" - }, - "node_modules/secp256k1/node_modules/elliptic": { - "version": "6.5.7", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.7.tgz", - "integrity": "sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/secp256k1/node_modules/node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", - "license": "MIT" - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "license": "MIT" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "license": "(MIT AND BSD-3-Clause)", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "dev": true, + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/sha1": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", - "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", - "license": "BSD-3-Clause", - "dependencies": { - "charenc": ">= 0.0.1", - "crypt": ">= 0.0.1" + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "engines": { - "node": "*" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0""has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8""node": ">=8" + } }, - "bin": { - "shjs": "bin/shjs" + "node_modules/sync-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", + "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "dev": true, + "dependencies": { + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" + }, + "engines": { + "node": ">=8.0.0" + } }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "node_modules/sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "dev": true, + "dependencies": { + "get-port": "^3.1.0" + } }, - "engines": { - "node": ">= 0.4" + "node_modules/table": { + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", + "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "license": "MIT", - "peer": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "node_modules/table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "dev": true, + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } }, - "engines": { - "node": ">=10" + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/solc": { - "version": "0.8.26", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", - "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", - "license": "MIT", - "dependencies": { - "command-exists": "^1.2.8", - "commander": "^8.1.0", - "follow-redirects": "^1.12.1", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "semver": "^5.5.0", - "tmp": "0.0.33" + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "bin": { - "solcjs": "solc.js" + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/solc/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/solidity-ast": { - "version": "0.4.59", - "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.59.tgz", - "integrity": "sha512-I+CX0wrYUN9jDfYtcgWSe+OAowaXy8/1YQy7NS4ni5IBDmIYBq7ZzaP/7QqouLjzZapmQtvGLqCaYgoUWqBo5g==", - "license": "MIT" - }, - "node_modules/solidity-coverage": { - "version": "0.8.13", - "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.13.tgz", - "integrity": "sha512-RiBoI+kF94V3Rv0+iwOj3HQVSqNzA9qm/qDP1ZDXK5IX0Cvho1qiz8hAXTsAo6KOIUeP73jfscq0KlLqVxzGWA==", - "license": "ISC", - "peer": true, - "dependencies": { - "@ethersproject/abi": "^5.0.9", - "@solidity-parser/parser": "^0.18.0", - "chalk": "^2.4.2", - "death": "^1.1.0", - "difflib": "^0.2.4", - "fs-extra": "^8.1.0", - "ghost-testrpc": "^0.0.2", - "global-modules": "^2.0.0", - "globby": "^10.0.1", - "jsonschema": "^1.2.4", - "lodash": "^4.17.21", - "mocha": "^10.2.0", - "node-emoji": "^1.10.0", - "pify": "^4.0.1", - "recursive-readdir": "^2.2.2", - "sc-istanbul": "^0.4.5", - "semver": "^7.3.4", - "shelljs": "^0.8.3", - "web3-utils": "^1.3.6" + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } }, - "bin": { - "solidity-coverage": "plugins/bin.js" + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "peerDependencies": { - "hardhat": "^2.11.0" - } - }, - "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.18.0.tgz", - "integrity": "sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==", - "license": "MIT", - "peer": true - }, - "node_modules/solidity-coverage/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } }, - "engines": { - "node": ">=4" - } - }, - "node_modules/solidity-coverage/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } }, - "engines": { - "node": ">=4" - } - }, - "node_modules/solidity-coverage/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/solidity-coverage/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT", - "peer": true - }, - "node_modules/solidity-coverage/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/solidity-coverage/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "license": "MIT", - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "node_modules/then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "dev": true, + "dependencies": { + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" + }, + "engines": { + "node": ">=6.0.0" + } }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/solidity-coverage/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/solidity-coverage/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "license": "MIT", - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/solidity-coverage/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver.js" + "node_modules/then-request/node_modules/@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", + "dev": true + }, + "node_modules/then-request/node_modules/form-data": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.2.tgz", + "integrity": "sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.10.tgz", + "integrity": "sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "engines": { - "node": ">=10" - } - }, - "node_modules/solidity-coverage/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } }, - "engines": { - "node": ">=4" - } - }, - "node_modules/solidity-coverage/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", - "optional": true, - "peer": true, - "dependencies": { - "amdefine": ">=0.0.4" + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "license": "ISC", - "peer": true, - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "license": "MIT", - "dependencies": { - "type-fest": "^0.7.1" + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } }, - "engines": { - "node": ">=6" - } - }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-format": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", - "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", - "license": "WTFPL OR MIT", - "peer": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/ts-command-line-args": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz", + "integrity": "sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" + }, + "bin": { + "write-markdown": "dist/write-markdown.js" + } }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" + "node_modules/ts-essentials": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", + "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", + "dev": true, + "peerDependencies": { + "typescript": ">=3.7.0" + } }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "license": "MIT", - "dependencies": { - "is-hex-prefixed": "1.0.0" + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "license": "MIT", - "engines": { - "node": ">=8" + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/tslog": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/tslog/-/tslog-4.9.3.tgz", + "integrity": "sha512-oDWuGVONxhVEBtschLf2cs/Jy8i7h1T+CpdkTNWQgdAF7DhRo2G8vMCgILKe7ojdEkLhICWgI1LYSSKaJsRgcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/fullstack-build/tslog?sponsor=1" + } }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sync-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", - "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", - "license": "MIT", - "dependencies": { - "http-response-object": "^3.0.1", - "sync-rpc": "^1.2.1", - "then-request": "^6.0.0" + "node_modules/tsort": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", + "dev": true + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "dev": true + }, + "node_modules/tweetnacl-util": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/sync-rpc": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", - "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", - "license": "MIT", - "dependencies": { - "get-port": "^3.1.0" - } - }, - "node_modules/table": { - "version": "6.8.2", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", - "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" + "node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "engines": { + "node": ">=4" + } }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "license": "MIT", - "peer": true, - "dependencies": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/table-layout/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/table-layout/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/then-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", - "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", - "license": "MIT", - "dependencies": { - "@types/concat-stream": "^1.6.0", - "@types/form-data": "0.0.33", - "@types/node": "^8.0.0", - "@types/qs": "^6.2.31", - "caseless": "~0.12.0", - "concat-stream": "^1.6.0", - "form-data": "^2.2.0", - "http-basic": "^8.1.1", - "http-response-object": "^3.0.1", - "promise": "^8.0.0", - "qs": "^6.4.0" + "node_modules/typechain": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.3.2.tgz", + "integrity": "sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==", + "dev": true, + "dependencies": { + "@types/prettier": "^2.1.1", + "debug": "^4.3.1", + "fs-extra": "^7.0.0", + "glob": "7.1.7", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "mkdirp": "^1.0.4", + "prettier": "^2.3.1", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" + }, + "bin": { + "typechain": "dist/cli/cli.js" + }, + "peerDependencies": { + "typescript": ">=4.3.0" + } }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/then-request/node_modules/@types/node": { - "version": "8.10.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", - "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", - "license": "MIT" - }, - "node_modules/then-request/node_modules/form-data": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.2.tgz", - "integrity": "sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12", - "safe-buffer": "^5.2.1" + "node_modules/typechain/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "license": "MIT", - "peer": true, - "dependencies": { - "readable-stream": "3" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" + "node_modules/typechain/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" + "node_modules/typechain/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/ts-command-line-args": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz", - "integrity": "sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==", - "license": "ISC", - "peer": true, - "dependencies": { - "chalk": "^4.1.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.0", - "string-format": "^2.0.0" + "node_modules/typechain/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } }, - "bin": { - "write-markdown": "dist/write-markdown.js" - } - }, - "node_modules/ts-essentials": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", - "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", - "license": "MIT", - "peer": true, - "peerDependencies": { - "typescript": ">=3.7.0" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" + "node_modules/typechain/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" + "node_modules/typechain/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" + "node_modules/typechain/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true + "node_modules/typechain/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0""node": ">= 4.0.0" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "node_modules/typescript": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, - "@swc/wasm": { - "optional": true + "engines": { + "node": ">=14.17" } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "license": "BSD-3-Clause", - "peer": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", - "license": "MIT" - }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "license": "Unlicense" - }, - "node_modules/tweetnacl-util": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", - "license": "Unlicense" - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "license": "MIT", - "peer": true, - "dependencies": { - "prelude-ls": "~1.1.2" }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" + "node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typechain": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.3.2.tgz", - "integrity": "sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/prettier": "^2.1.1", - "debug": "^4.3.1", - "fs-extra": "^7.0.0", - "glob": "7.1.7", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.3.1", - "ts-command-line-args": "^2.2.0", - "ts-essentials": "^7.0.1" + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } }, - "bin": { - "typechain": "dist/cli/cli.js" + "node_modules/undici": { + "version": "5.28.4", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", + "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", + "dev": true, + "dependencies": { + "@fastify/busboy": "^2.0.0""@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } }, - "peerDependencies": { - "typescript": ">=4.3.0" - } - }, - "node_modules/typechain/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/typechain/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "license": "MIT", - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + }, + "node_modules/unfetch": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", + "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==" + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/typechain/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "engines": { - "node": "*" + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0""node": ">= 10.0.0" + } }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typechain/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "license": "MIT", - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/typechain/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } }, - "engines": { - "node": "*" - } - }, - "node_modules/typechain/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "license": "MIT", - "peer": true, - "bin": { - "mkdirp": "bin/cmd.js" + "node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", + "dev": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } }, - "engines": { - "node": ">=10" - } - }, - "node_modules/typechain/node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "license": "MIT", - "peer": true, - "bin": { - "prettier": "bin-prettier.js" + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "engines": { - "node": ">=10.13.0" + "node_modules/web3-utils": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz", + "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==", + "dev": true, + "dependencies": { + "@ethereumjs/util": "^8.1.0", + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereum-cryptography": "^2.1.2", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/typechain/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "license": "MIT" - }, - "node_modules/typescript": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", - "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "node_modules/web3-utils/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dev": true, + "dependencies": { + "@noble/hashes": "1.4.0""@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/uglify-js": { - "version": "3.19.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", - "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", - "license": "BSD-2-Clause", - "optional": true, - "peer": true, - "bin": { - "uglifyjs": "bin/uglifyjs" + "node_modules/web3-utils/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/undici": { - "version": "5.28.4", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", - "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", - "license": "MIT", - "dependencies": { - "@fastify/busboy": "^2.0.0" + "node_modules/web3-utils/node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "dev": true, + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0""@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "license": "MIT" - }, - "node_modules/unfetch": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", - "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", - "license": "MIT" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", - "license": "MIT", - "peer": true - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "license": "MIT", - "peer": true - }, - "node_modules/web3-utils": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz", - "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==", - "license": "LGPL-3.0", - "peer": true, - "dependencies": { - "@ethereumjs/util": "^8.1.0", - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereum-cryptography": "^2.1.2", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-utils/node_modules/@noble/curves": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", - "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@noble/hashes": "1.4.0" + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/web3-utils/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 16" + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/web3-utils/node_modules/ethereum-cryptography": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", - "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@noble/curves": "1.4.2", - "@noble/hashes": "1.4.0", - "@scure/bip32": "1.4.0", - "@scure/bip39": "1.3.0" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "license": "ISC", - "peer": true, - "dependencies": { - "isexe": "^2.0.0" + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "license": "MIT", - "dependencies": { - "string-width": "^4.0.0" + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dev": true, + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } }, - "engines": { - "node": ">=8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "license": "MIT", - "peer": true - }, - "node_modules/wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "license": "MIT", - "peer": true, - "dependencies": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/wordwrapjs/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/workerpool": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", - "license": "Apache-2.0" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } }, - "engines": { - "node": ">=10" + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "engines": { + "node": ">=10.0.0""node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2""utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, - "utf-8-validate": { - "optional": true + "engines": { + "node": ">=10" } - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "license": "MIT", - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "license": "MIT", - "engines": { - "node": ">=10" + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zksync-web3": { + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.14.4.tgz", + "integrity": "sha512-kYehMD/S6Uhe1g434UnaMN+sBr9nQm23Ywn0EUP5BfQCsbjcr3ORuS68PosZw8xUTu3pac7G6YMSnNHk+fwzvg==", + "deprecated": "This package has been deprecated in favor of zksync-ethers@5.0.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ethers": "^5.7.0" + } } } - } -} + } \ No newline at end of file diff --git a/package.json b/package.json index 4897683..109f0be 100644 --- a/package.json +++ b/package.json @@ -24,13 +24,26 @@ }, "homepage": "https://github.com/marlinprotocol/kalypso-contracts#readme", "devDependencies": { + "@nomicfoundation/hardhat-ignition": "^0.15.7", + "@nomicfoundation/hardhat-ignition-ethers": "^0.15.7", + "@nomicfoundation/hardhat-network-helpers": "^1.0.12", + "@nomicfoundation/hardhat-verify": "^2.0.11", + "@nomicfoundation/ignition-core": "^0.15.7", + "@tenderly/hardhat-tenderly": "^2.5.2", + "@typechain/ethers-v6": "^0.5.1", + "@typechain/hardhat": "^9.1.0", + "@types/mocha": "^10.0.9", "@types/node-gzip": "^1.1.0", + "chai": "^4.5.0", "eciesjs": "^0.4.4", "ethers": "^6.6.6", "hardhat": "^2.17.0", - "hardhat-gas-reporter": "^1.0.9", + "hardhat-gas-reporter": "^1.0.10", "prettier": "^3.0.0", "prettier-plugin-solidity": "^1.1.3", + "solidity-coverage": "^0.8.13", + "ts-node": "^10.9.2", + "typechain": "^8.3.2", "typescript": "^5.3.2" }, "dependencies": { @@ -42,6 +55,7 @@ "@openzeppelin/hardhat-upgrades": "^3.0.5", "bignumber.js": "^9.1.1", "dotenv": "^16.3.1", + "hardhat-tracer": "^3.1.0", "node-gzip": "^1.1.2" } } diff --git a/remappings.txt b/remappings.txt new file mode 100644 index 0000000..aee87fb --- /dev/null +++ b/remappings.txt @@ -0,0 +1,4 @@ +forge-std/=lib/forge-std/src/ +@openzeppelin/=node_modules/@openzeppelin/ +eth-gas-reporter/=node_modules/eth-gas-reporter/ +hardhat/=node_modules/hardhat/ diff --git a/scripts/call.ts b/scripts/call.ts new file mode 100644 index 0000000..391eefd --- /dev/null +++ b/scripts/call.ts @@ -0,0 +1,16 @@ +import { ProofMarketplace__factory } from '../typechain-types'; +import { getConfig } from './helper'; + +async function main() { + + const { chainId, signers, addresses } = await getConfig(); + + const proofMarketplace = ProofMarketplace__factory.connect(addresses.proxy.proofMarketplace, signers[0]); + + const tx = await proofMarketplace.grantRole(await proofMarketplace.MATCHING_ENGINE_ROLE(), "0xc6dE583B87716E351e4Fb60D687b9330877DbaF4"); + await tx.wait(); + + return "Done"; +} + +main().then(console.log).catch(console.error); \ No newline at end of file diff --git a/scripts/calls/entityKeyRegistry.ts b/scripts/calls/entityKeyRegistry.ts new file mode 100644 index 0000000..04d1755 --- /dev/null +++ b/scripts/calls/entityKeyRegistry.ts @@ -0,0 +1,16 @@ +import { EntityKeyRegistry__factory, ProofMarketplace__factory } from '../../typechain-types'; +import { getConfig } from '../helper'; + +async function main() { + + const { chainId, signers, addresses } = await getConfig(); + + const entityKeyRegistry = EntityKeyRegistry__factory.connect(addresses.proxy.entityKeyRegistry, signers[0]); + + const tx = await entityKeyRegistry.grantRole(await entityKeyRegistry.KEY_REGISTER_ROLE(), addresses.proxy.proofMarketplace); + await tx.wait(); + + return "Done"; +} + +main().then(console.log).catch(console.error); \ No newline at end of file diff --git a/scripts/calls/symbioticStaking.ts b/scripts/calls/symbioticStaking.ts new file mode 100644 index 0000000..144ef8d --- /dev/null +++ b/scripts/calls/symbioticStaking.ts @@ -0,0 +1,39 @@ +// "Measurements": { +// "HashAlgorithm": "Sha384 { ... }", +// "PCR0": "d5a9d4615261fd6d354df3d5a82637e9dd0ac94d2cebd22c0f15ecef216cf4032e9045a8d27e3eb558350c7acf061835", +// "PCR1": "bcdf05fefccaa8e55bf2c8d6dee9e79bbff31e34bf28a99aa19e6b29c37ee80b214a414b7607236edf26fcb78654e63f", +// "PCR2": "ce0562651ffea8670e80328bfc85f5346a6960f270cbda3920933ffbaa561f302536a288ac3dc66773115ccf3176422a" +// } + +import { SymbioticStaking__factory } from '../../typechain-types'; +import { getConfig } from '../helper'; + +const pcr0 = "0x3010987bf1dc43bdf6204ff7c62f4c837fafec8212f92a404edf83675eb0a28867dbb5ae894446c484dbd0e13b2b7ab7"; +const pcr1 = "0xbcdf05fefccaa8e55bf2c8d6dee9e79bbff31e34bf28a99aa19e6b29c37ee80b214a414b7607236edf26fcb78654e63f"; +const pcr2 = "0xa336db682562a9e77a7eaa8525bd9546af953a91fa0a5eddcad0a2772d8e19147873a851585cfda54cd6a8357db0812e"; + +async function main() { + + const { chainId, signers, addresses } = await getConfig(); + + const admin = signers[0]; + + const symbioticStaking = SymbioticStaking__factory.connect("0xE7136641cB2c94d318779c3B6BEb997dC5B2E574", signers[0]); + + let tx; + // // Grant BRIDGE_ENCLAVE_UPDATES_ROLE to admin + // let tx = await symbioticStaking.grantRole(await symbioticStaking.BRIDGE_ENCLAVE_UPDATES_ROLE(), await admin.getAddress()); + // await tx.wait(); + + // Add PCR0, PCR1, PCR2 to enclave + tx = await symbioticStaking.addEnclaveImage( + pcr0, // PCR0 + pcr1, // PCR1 + pcr2 // PCR2 + ); + await tx.wait(); + + return "Done"; +} + +main().then(console.log).catch(console.error); \ No newline at end of file diff --git a/scripts/calls/upgradeContract.ts b/scripts/calls/upgradeContract.ts new file mode 100644 index 0000000..b0d1639 --- /dev/null +++ b/scripts/calls/upgradeContract.ts @@ -0,0 +1,89 @@ +import { + run, + tenderly, +} from 'hardhat'; +import * as fs from "fs"; +import { + ProofMarketplace__factory, + ProverManager__factory, + UUPSUpgradeable__factory, +} from '../../typechain-types'; +import { getConfig } from '../helper'; + +async function main() { + const { chainId, signers, path, addresses } = await getConfig(); + + const admin = signers[0]; + let tx; + let verificationResult; + + // // ProofMarketplace Proxy + // const proofMarketplaceProxy = UUPSUpgradeable__factory.connect(addresses.proxy.proofMarketplace, admin); + // // New ProofMarketplace Implementation + // const newProofMarketplaceImpl = await new ProofMarketplace__factory(admin).deploy(); + // await newProofMarketplaceImpl.waitForDeployment(); + + // addresses.implementation.proofMarketplace = await newProofMarketplaceImpl.getAddress(); + // fs.writeFileSync(path, JSON.stringify(addresses, null, 4), "utf-8"); + // console.log("ProofMarketplace deployed at:\t\t", await newProofMarketplaceImpl.getAddress()); + + // tx = await proofMarketplaceProxy.upgradeToAndCall(await newProofMarketplaceImpl.getAddress(), "0x"); + // // Upgrade ProofMarketplace + // await tx.wait(); + // console.log("ProofMarketplace upgraded"); + + // try { + // verificationResult = await run("verify:verify", { + // address: await newProofMarketplaceImpl.getAddress(), + // }); + // console.log({ verificationResult }); + // } catch (error) { + // console.error("Error verifying ProofMarketplace implementation on Etherscan:", error); + // } + + try { + await tenderly.verify({ + address: addresses.implementation.proofMarketplace, + name: "ProofMarketplace", + }); + } catch (error) { + console.error("Error verifying ProofMarketplace implementation on Tenderly:", error); + } + + // // ProverManager Proxy + // const proverManagerProxy = UUPSUpgradeable__factory.connect(addresses.proxy.proverManager, admin); + // // New ProverManager Implementation + // const newProverManagerImpl = await new ProverManager__factory(admin).deploy(); + // await newProverManagerImpl.waitForDeployment(); + + // addresses.implementation.proverManager = await newProverManagerImpl.getAddress(); + // fs.writeFileSync(path, JSON.stringify(addresses, null, 4), "utf-8"); + // console.log("ProverManager deployed at:\t\t", await newProverManagerImpl.getAddress()); + + // // Upgrade ProverManager + // tx = await proverManagerProxy.upgradeToAndCall(await newProverManagerImpl.getAddress(), "0x"); + // await tx.wait(); + // console.log("ProverManager upgraded"); + + // try { + // verificationResult = await run("verify:verify", { + // address: await newProverManagerImpl.getAddress(), + // }); + // console.log({ verificationResult }); + // } catch (error) { + // console.error("Error verifying ProverManager implementation on Etherscan:", error); + // } + + try { + await tenderly.verify({ + address: addresses.implementation.proverManager, + name: "ProverManager", + }); + } catch (error) { + console.error("Error verifying ProverManager implementation on Tenderly:", error); + } + + return "Done"; +} + +main().then(console.log).catch(console.error); \ No newline at end of file diff --git a/scripts/deploy.ts b/scripts/deploy.ts index ec6a748..0d5cf96 100644 --- a/scripts/deploy.ts +++ b/scripts/deploy.ts @@ -1,23 +1,23 @@ -import { ethers, upgrades } from "hardhat"; import * as fs from "fs"; +import { + ethers, + upgrades, +} from "hardhat"; import { - GeneratorRegistry__factory, + checkFileExists, + createFileIfNotExists, +} from "../helpers"; +import { + AttestationVerifier__factory, + Dispute__factory, + EntityKeyRegistry__factory, InputAndProofFormatRegistry__factory, MockAttestationVerifier__factory, MockToken__factory, PriorityLog__factory, - EntityKeyRegistry__factory, - AttestationVerifier__factory, - Dispute__factory, + ProverManager__factory, } from "../typechain-types"; -import { checkFileExists, createFileIfNotExists } from "../helpers"; - -import * as transfer_verifier_inputs from "../helpers/sample/transferVerifier/transfer_inputs.json"; -import * as transfer_verifier_proof from "../helpers/sample/transferVerifier/transfer_proof.json"; - -import * as zkb_verifier_inputs from "../helpers/sample/zkbVerifier/transfer_input.json"; -import * as zkb_verifier_proof from "../helpers/sample/zkbVerifier/transfer_proof.json"; const abiCoder = new ethers.AbiCoder(); @@ -44,7 +44,7 @@ async function main(): Promise { let tokenHolder = signers[1]; let treasury = signers[2]; // let marketCreator = signers[3]; - // let generator = signers[4]; + // let prover = signers[4]; let sampleSigner = signers[5]; const path = `./addresses/${chainId}.json`; @@ -130,23 +130,23 @@ async function main(): Promise { } addresses = JSON.parse(fs.readFileSync(path, "utf-8")); - if (!addresses.proxy.generator_registry) { - const generator_registryContract = await ethers.getContractFactory("GeneratorRegistry"); - const generatorProxy = await upgrades.deployProxy(generator_registryContract, [], { + if (!addresses.proxy.prover_registry) { + const prover_registryContract = await ethers.getContractFactory("ProverManager"); + const proverProxy = await upgrades.deployProxy(prover_registryContract, [], { kind: "uups", constructorArgs: [addresses.proxy.staking_token, addresses.proxy.entity_registry], initializer: false, }); - await generatorProxy.waitForDeployment(); + await proverProxy.waitForDeployment(); - addresses.proxy.generator_registry = await generatorProxy.getAddress(); - addresses.implementation.generator_registry = await upgrades.erc1967.getImplementationAddress(addresses.proxy.generator_registry); + addresses.proxy.prover_registry = await proverProxy.getAddress(); + addresses.implementation.prover_registry = await upgrades.erc1967.getImplementationAddress(addresses.proxy.prover_registry); fs.writeFileSync(path, JSON.stringify(addresses, null, 4), "utf-8"); const entityRegistry = EntityKeyRegistry__factory.connect(addresses.proxy.entity_registry, admin); const roleToGive = await entityRegistry.KEY_REGISTER_ROLE(); - let tx = await entityRegistry.grantRole(roleToGive, addresses.proxy.generator_registry); + let tx = await entityRegistry.grantRole(roleToGive, addresses.proxy.prover_registry); tx.wait(); } addresses = JSON.parse(fs.readFileSync(path, "utf-8")); @@ -167,7 +167,7 @@ async function main(): Promise { addresses.proxy.payment_token, config.marketCreationCost, await treasury.getAddress(), - addresses.proxy.generator_registry, + addresses.proxy.prover_registry, addresses.proxy.entity_registry, ], }); @@ -182,8 +182,8 @@ async function main(): Promise { let tx = await entityRegistry.grantRole(roleToGive, addresses.proxy.proof_market_place); tx.wait(); - const generator_registry = GeneratorRegistry__factory.connect(addresses.proxy.generator_registry, admin); - tx = await generator_registry.initialize(await admin.getAddress(), addresses.proxy.proof_market_place); + const prover_registry = ProverManager__factory.connect(addresses.proxy.prover_registry, admin); + tx = await prover_registry.initialize(await admin.getAddress(), addresses.proxy.proof_market_place); await tx.wait(); } diff --git a/scripts/deploy/ERC1967ProxyFlatten.sol b/scripts/deploy/ERC1967ProxyFlatten.sol new file mode 100644 index 0000000..6119d87 --- /dev/null +++ b/scripts/deploy/ERC1967ProxyFlatten.sol @@ -0,0 +1,646 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20 ^0.8.21; + +// node_modules/@openzeppelin/contracts/interfaces/IERC1967.sol + +// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1967.sol) + +/** + * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC. + */ +interface IERC1967 { + /** + * @dev Emitted when the implementation is upgraded. + */ + event Upgraded(address indexed implementation); + + /** + * @dev Emitted when the admin account has changed. + */ + event AdminChanged(address previousAdmin, address newAdmin); + + /** + * @dev Emitted when the beacon is changed. + */ + event BeaconUpgraded(address indexed beacon); +} + +// node_modules/@openzeppelin/contracts/proxy/Proxy.sol + +// OpenZeppelin Contracts (last updated v5.0.0) (proxy/Proxy.sol) + +/** + * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM + * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to + * be specified by overriding the virtual {_implementation} function. + * + * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a + * different contract through the {_delegate} function. + * + * The success and return data of the delegated call will be returned back to the caller of the proxy. + */ +abstract contract Proxy { + /** + * @dev Delegates the current call to `implementation`. + * + * This function does not return to its internal call site, it will return directly to the external caller. + */ + function _delegate(address implementation) internal virtual { + assembly { + // Copy msg.data. We take full control of memory in this inline assembly + // block because it will not return to Solidity code. We overwrite the + // Solidity scratch pad at memory position 0. + calldatacopy(0, 0, calldatasize()) + + // Call the implementation. + // out and outsize are 0 because we don't know the size yet. + let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0) + + // Copy the returned data. + returndatacopy(0, 0, returndatasize()) + + switch result + // delegatecall returns 0 on error. + case 0 { + revert(0, returndatasize()) + } + default { + return(0, returndatasize()) + } + } + } + + /** + * @dev This is a virtual function that should be overridden so it returns the address to which the fallback + * function and {_fallback} should delegate. + */ + function _implementation() internal view virtual returns (address); + + /** + * @dev Delegates the current call to the address returned by `_implementation()`. + * + * This function does not return to its internal call site, it will return directly to the external caller. + */ + function _fallback() internal virtual { + _delegate(_implementation()); + } + + /** + * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other + * function in the contract matches the call data. + */ + fallback() external payable virtual { + _fallback(); + } +} + +// node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol + +// OpenZeppelin Contracts (last updated v5.0.0) (proxy/beacon/IBeacon.sol) + +/** + * @dev This is the interface that {BeaconProxy} expects of its beacon. + */ +interface IBeacon { + /** + * @dev Must return an address that can be used as a delegate call target. + * + * {UpgradeableBeacon} will check that this address is a contract. + */ + function implementation() external view returns (address); +} + +// node_modules/@openzeppelin/contracts/utils/Errors.sol + +// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol) + +/** + * @dev Collection of common custom errors used in multiple contracts + * + * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library. + * It is recommended to avoid relying on the error API for critical functionality. + * + * _Available since v5.1._ + */ +library Errors { + /** + * @dev The ETH balance of the account is not enough to perform the operation. + */ + error InsufficientBalance(uint256 balance, uint256 needed); + + /** + * @dev A call to an address target failed. The target may have reverted. + */ + error FailedCall(); + + /** + * @dev The deployment failed. + */ + error FailedDeployment(); + + /** + * @dev A necessary precompile is missing. + */ + error MissingPrecompile(address); +} + +// node_modules/@openzeppelin/contracts/utils/StorageSlot.sol + +// OpenZeppelin Contracts (last updated v5.1.0) (utils/StorageSlot.sol) +// This file was procedurally generated from scripts/generate/templates/StorageSlot.js. + +/** + * @dev Library for reading and writing primitive types to specific storage slots. + * + * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. + * This library helps with reading and writing to such slots without the need for inline assembly. + * + * The functions in this library return Slot structs that contain a `value` member that can be used to read or write. + * + * Example usage to set ERC-1967 implementation slot: + * ```solidity + * contract ERC1967 { + * // Define the slot. Alternatively, use the SlotDerivation library to derive the slot. + * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; + * + * function _getImplementation() internal view returns (address) { + * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; + * } + * + * function _setImplementation(address newImplementation) internal { + * require(newImplementation.code.length > 0); + * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; + * } + * } + * ``` + * + * TIP: Consider using this library along with {SlotDerivation}. + */ +library StorageSlot { + struct AddressSlot { + address value; + } + + struct BooleanSlot { + bool value; + } + + struct Bytes32Slot { + bytes32 value; + } + + struct Uint256Slot { + uint256 value; + } + + struct Int256Slot { + int256 value; + } + + struct StringSlot { + string value; + } + + struct BytesSlot { + bytes value; + } + + /** + * @dev Returns an `AddressSlot` with member `value` located at `slot`. + */ + function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) { + assembly ("memory-safe") { + r.slot := slot + } + } + + /** + * @dev Returns a `BooleanSlot` with member `value` located at `slot`. + */ + function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) { + assembly ("memory-safe") { + r.slot := slot + } + } + + /** + * @dev Returns a `Bytes32Slot` with member `value` located at `slot`. + */ + function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) { + assembly ("memory-safe") { + r.slot := slot + } + } + + /** + * @dev Returns a `Uint256Slot` with member `value` located at `slot`. + */ + function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) { + assembly ("memory-safe") { + r.slot := slot + } + } + + /** + * @dev Returns a `Int256Slot` with member `value` located at `slot`. + */ + function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) { + assembly ("memory-safe") { + r.slot := slot + } + } + + /** + * @dev Returns a `StringSlot` with member `value` located at `slot`. + */ + function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) { + assembly ("memory-safe") { + r.slot := slot + } + } + + /** + * @dev Returns an `StringSlot` representation of the string storage pointer `store`. + */ + function getStringSlot(string storage store) internal pure returns (StringSlot storage r) { + assembly ("memory-safe") { + r.slot := store.slot + } + } + + /** + * @dev Returns a `BytesSlot` with member `value` located at `slot`. + */ + function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) { + assembly ("memory-safe") { + r.slot := slot + } + } + + /** + * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`. + */ + function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) { + assembly ("memory-safe") { + r.slot := store.slot + } + } +} + +// node_modules/@openzeppelin/contracts/utils/Address.sol + +// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol) + +/** + * @dev Collection of functions related to the address type + */ +library Address { + /** + * @dev There's no code at `target` (it is not a contract). + */ + error AddressEmptyCode(address target); + + /** + * @dev Replacement for Solidity's `transfer`: sends `amount` wei to + * `recipient`, forwarding all available gas and reverting on errors. + * + * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost + * of certain opcodes, possibly making contracts go over the 2300 gas limit + * imposed by `transfer`, making them unable to receive funds via + * `transfer`. {sendValue} removes this limitation. + * + * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. + * + * IMPORTANT: because control is transferred to `recipient`, care must be + * taken to not create reentrancy vulnerabilities. Consider using + * {ReentrancyGuard} or the + * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. + */ + function sendValue(address payable recipient, uint256 amount) internal { + if (address(this).balance < amount) { + revert Errors.InsufficientBalance(address(this).balance, amount); + } + + (bool success, ) = recipient.call{value: amount}(""); + if (!success) { + revert Errors.FailedCall(); + } + } + + /** + * @dev Performs a Solidity function call using a low level `call`. A + * plain `call` is an unsafe replacement for a function call: use this + * function instead. + * + * If `target` reverts with a revert reason or custom error, it is bubbled + * up by this function (like regular Solidity function calls). However, if + * the call reverted with no returned reason, this function reverts with a + * {Errors.FailedCall} error. + * + * Returns the raw returned data. To convert to the expected return value, + * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. + * + * Requirements: + * + * - `target` must be a contract. + * - calling `target` with `data` must not revert. + */ + function functionCall(address target, bytes memory data) internal returns (bytes memory) { + return functionCallWithValue(target, data, 0); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], + * but also transferring `value` wei to `target`. + * + * Requirements: + * + * - the calling contract must have an ETH balance of at least `value`. + * - the called Solidity function must be `payable`. + */ + function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { + if (address(this).balance < value) { + revert Errors.InsufficientBalance(address(this).balance, value); + } + (bool success, bytes memory returndata) = target.call{value: value}(data); + return verifyCallResultFromTarget(target, success, returndata); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], + * but performing a static call. + */ + function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { + (bool success, bytes memory returndata) = target.staticcall(data); + return verifyCallResultFromTarget(target, success, returndata); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], + * but performing a delegate call. + */ + function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { + (bool success, bytes memory returndata) = target.delegatecall(data); + return verifyCallResultFromTarget(target, success, returndata); + } + + /** + * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target + * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case + * of an unsuccessful call. + */ + function verifyCallResultFromTarget( + address target, + bool success, + bytes memory returndata + ) internal view returns (bytes memory) { + if (!success) { + _revert(returndata); + } else { + // only check if target is a contract if the call was successful and the return data is empty + // otherwise we already know that it was a contract + if (returndata.length == 0 && target.code.length == 0) { + revert AddressEmptyCode(target); + } + return returndata; + } + } + + /** + * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the + * revert reason or with a default {Errors.FailedCall} error. + */ + function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) { + if (!success) { + _revert(returndata); + } else { + return returndata; + } + } + + /** + * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}. + */ + function _revert(bytes memory returndata) private pure { + // Look for revert reason and bubble it up if present + if (returndata.length > 0) { + // The easiest way to bubble the revert reason is using memory via assembly + assembly ("memory-safe") { + let returndata_size := mload(returndata) + revert(add(32, returndata), returndata_size) + } + } else { + revert Errors.FailedCall(); + } + } +} + +// node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol + +// OpenZeppelin Contracts (last updated v5.1.0) (proxy/ERC1967/ERC1967Utils.sol) + +/** + * @dev This library provides getters and event emitting update functions for + * https://eips.ethereum.org/EIPS/eip-1967[ERC-1967] slots. + */ +library ERC1967Utils { + /** + * @dev Storage slot with the address of the current implementation. + * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1. + */ + // solhint-disable-next-line private-vars-leading-underscore + bytes32 internal constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; + + /** + * @dev The `implementation` of the proxy is invalid. + */ + error ERC1967InvalidImplementation(address implementation); + + /** + * @dev The `admin` of the proxy is invalid. + */ + error ERC1967InvalidAdmin(address admin); + + /** + * @dev The `beacon` of the proxy is invalid. + */ + error ERC1967InvalidBeacon(address beacon); + + /** + * @dev An upgrade function sees `msg.value > 0` that may be lost. + */ + error ERC1967NonPayable(); + + /** + * @dev Returns the current implementation address. + */ + function getImplementation() internal view returns (address) { + return StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value; + } + + /** + * @dev Stores a new address in the ERC-1967 implementation slot. + */ + function _setImplementation(address newImplementation) private { + if (newImplementation.code.length == 0) { + revert ERC1967InvalidImplementation(newImplementation); + } + StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value = newImplementation; + } + + /** + * @dev Performs implementation upgrade with additional setup call if data is nonempty. + * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected + * to avoid stuck value in the contract. + * + * Emits an {IERC1967-Upgraded} event. + */ + function upgradeToAndCall(address newImplementation, bytes memory data) internal { + _setImplementation(newImplementation); + emit IERC1967.Upgraded(newImplementation); + + if (data.length > 0) { + Address.functionDelegateCall(newImplementation, data); + } else { + _checkNonPayable(); + } + } + + /** + * @dev Storage slot with the admin of the contract. + * This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1. + */ + // solhint-disable-next-line private-vars-leading-underscore + bytes32 internal constant ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; + + /** + * @dev Returns the current admin. + * + * TIP: To get this value clients can read directly from the storage slot shown below (specified by ERC-1967) using + * the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. + * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103` + */ + function getAdmin() internal view returns (address) { + return StorageSlot.getAddressSlot(ADMIN_SLOT).value; + } + + /** + * @dev Stores a new address in the ERC-1967 admin slot. + */ + function _setAdmin(address newAdmin) private { + if (newAdmin == address(0)) { + revert ERC1967InvalidAdmin(address(0)); + } + StorageSlot.getAddressSlot(ADMIN_SLOT).value = newAdmin; + } + + /** + * @dev Changes the admin of the proxy. + * + * Emits an {IERC1967-AdminChanged} event. + */ + function changeAdmin(address newAdmin) internal { + emit IERC1967.AdminChanged(getAdmin(), newAdmin); + _setAdmin(newAdmin); + } + + /** + * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. + * This is the keccak-256 hash of "eip1967.proxy.beacon" subtracted by 1. + */ + // solhint-disable-next-line private-vars-leading-underscore + bytes32 internal constant BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50; + + /** + * @dev Returns the current beacon. + */ + function getBeacon() internal view returns (address) { + return StorageSlot.getAddressSlot(BEACON_SLOT).value; + } + + /** + * @dev Stores a new beacon in the ERC-1967 beacon slot. + */ + function _setBeacon(address newBeacon) private { + if (newBeacon.code.length == 0) { + revert ERC1967InvalidBeacon(newBeacon); + } + + StorageSlot.getAddressSlot(BEACON_SLOT).value = newBeacon; + + address beaconImplementation = IBeacon(newBeacon).implementation(); + if (beaconImplementation.code.length == 0) { + revert ERC1967InvalidImplementation(beaconImplementation); + } + } + + /** + * @dev Change the beacon and trigger a setup call if data is nonempty. + * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected + * to avoid stuck value in the contract. + * + * Emits an {IERC1967-BeaconUpgraded} event. + * + * CAUTION: Invoking this function has no effect on an instance of {BeaconProxy} since v5, since + * it uses an immutable beacon without looking at the value of the ERC-1967 beacon slot for + * efficiency. + */ + function upgradeBeaconToAndCall(address newBeacon, bytes memory data) internal { + _setBeacon(newBeacon); + emit IERC1967.BeaconUpgraded(newBeacon); + + if (data.length > 0) { + Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data); + } else { + _checkNonPayable(); + } + } + + /** + * @dev Reverts if `msg.value` is not zero. It can be used to avoid `msg.value` stuck in the contract + * if an upgrade doesn't perform an initialization call. + */ + function _checkNonPayable() private { + if (msg.value > 0) { + revert ERC1967NonPayable(); + } + } +} + +// contracts/ERC1967Proxy.sol + +// OpenZeppelin Contracts (last updated v5.1.0) (proxy/ERC1967/ERC1967Proxy.sol) + +/** + * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an + * implementation address that can be changed. This address is stored in storage in the location specified by + * https://eips.ethereum.org/EIPS/eip-1967[ERC-1967], so that it doesn't conflict with the storage layout of the + * implementation behind the proxy. + */ +contract ERC1967Proxy is Proxy { + /** + * @dev Initializes the upgradeable proxy with an initial implementation specified by `implementation`. + * + * If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an + * encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. + * + * Requirements: + * + * - If `data` is empty, `msg.value` must be zero. + */ + constructor(address implementation, bytes memory _data) payable { + ERC1967Utils.upgradeToAndCall(implementation, _data); + } + + /** + * @dev Returns the current implementation address. + * + * TIP: To get this value clients can read directly from the storage slot shown below (specified by ERC-1967) using + * the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. + * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc` + */ + function _implementation() internal view virtual override returns (address) { + return ERC1967Utils.getImplementation(); + } +} + diff --git a/scripts/deploy/deploy.ts b/scripts/deploy/deploy.ts new file mode 100644 index 0000000..0135b0f --- /dev/null +++ b/scripts/deploy/deploy.ts @@ -0,0 +1,255 @@ +import * as fs from "fs"; +import { ethers, upgrades, run } from "hardhat"; + +import { getConfig } from "../helper"; +import { checkFileExists } from "../../helpers"; +import { + AttestationVerifier__factory, + EntityKeyRegistry__factory, + NativeStaking__factory, + ProofMarketplace__factory, + ProverManager__factory, + StakingManager__factory, + SymbioticStaking__factory, + SymbioticStakingReward__factory, +} from "../../typechain-types"; + +async function deploy(): Promise { + const { chainId, signers, addresses } = await getConfig(); + console.log("Deploying on chain id:", chainId); + + console.log("Available Signers", signers); + const deployer = signers[0]; + + const configPath = `./config/${chainId}.json`; + const addressPath = `./addresses/${chainId}.json`; + const configurationExists = checkFileExists(configPath); + + if (!configurationExists) { + throw new Error(`Config doesn't exists for chainId: ${chainId}`); + } + + //---------------------------------------- Deploy ----------------------------------------// + // Staking Manager + const StakingManagerContract = await ethers.getContractFactory("StakingManager"); + const stakingManagerProxy = await upgrades.deployProxy(StakingManagerContract, [], { + kind: "uups", + initializer: false, + }); + await stakingManagerProxy.waitForDeployment(); + const stakingManager = StakingManager__factory.connect(await stakingManagerProxy.getAddress(), deployer); + addresses.proxy.stakingManager = await stakingManager.getAddress(); + addresses.implementation.stakingManager = await upgrades.erc1967.getImplementationAddress(await stakingManager.getAddress()); + fs.writeFileSync(addressPath, JSON.stringify(addresses, null, 4), "utf-8"); + console.log("StakingManager deployed at:\t\t", await stakingManager.getAddress()); + + // Native Staking + const NativeStakingContract = await ethers.getContractFactory("NativeStaking"); + const nativeStakingProxy = await upgrades.deployProxy(NativeStakingContract, [], { + kind: "uups", + initializer: false, + }); + const nativeStaking = NativeStaking__factory.connect(await nativeStakingProxy.getAddress(), deployer); + addresses.proxy.nativeStaking = await nativeStaking.getAddress(); + addresses.implementation.nativeStaking = await upgrades.erc1967.getImplementationAddress(await nativeStaking.getAddress()); + fs.writeFileSync(addressPath, JSON.stringify(addresses, null, 4), "utf-8"); + console.log("NativeStaking deployed at:\t\t", await nativeStaking.getAddress()); + + // Symbiotic Staking + const SymbioticStakingContract = await ethers.getContractFactory("SymbioticStaking"); + const symbioticStakingProxy = await upgrades.deployProxy(SymbioticStakingContract, [], { + kind: "uups", + initializer: false, + }); + const symbioticStaking = SymbioticStaking__factory.connect(await symbioticStakingProxy.getAddress(), deployer); + addresses.proxy.symbioticStaking = await symbioticStaking.getAddress(); + addresses.implementation.symbioticStaking = await upgrades.erc1967.getImplementationAddress(await symbioticStaking.getAddress()); + fs.writeFileSync(addressPath, JSON.stringify(addresses, null, 4), "utf-8"); + console.log("SymbioticStaking deployed at:\t\t", await symbioticStaking.getAddress()); + + // Symbiotic Staking Reward + const SymbioticStakingRewardContract = await ethers.getContractFactory("SymbioticStakingReward"); + const symbioticStakingRewardProxy = await upgrades.deployProxy(SymbioticStakingRewardContract, [], { + kind: "uups", + initializer: false, + }); + const symbioticStakingReward = SymbioticStakingReward__factory.connect(await symbioticStakingRewardProxy.getAddress(), deployer); + addresses.proxy.symbioticStakingReward = await symbioticStakingReward.getAddress(); + addresses.implementation.symbioticStakingReward = await upgrades.erc1967.getImplementationAddress(await symbioticStakingReward.getAddress()); + fs.writeFileSync(addressPath, JSON.stringify(addresses, null, 4), "utf-8"); + console.log("SymbioticStakingReward deployed at:\t\t", await symbioticStakingReward.getAddress()); + + // Attestation Verifier + const AttestationVerifierContract = await ethers.getContractFactory("AttestationVerifier"); + const attestationVerifierProxy = await upgrades.deployProxy(AttestationVerifierContract, [], { + kind: "uups", + initializer: false, + }); + const attestationVerifier = AttestationVerifier__factory.connect(await attestationVerifierProxy.getAddress(), deployer); + addresses.proxy.attestationVerifier = await attestationVerifier.getAddress(); + addresses.implementation.attestationVerifier = await upgrades.erc1967.getImplementationAddress(await attestationVerifier.getAddress()); + fs.writeFileSync(addressPath, JSON.stringify(addresses, null, 4), "utf-8"); + console.log("AttestationVerifier deployed at:\t\t", await attestationVerifier.getAddress()); + + // Entity Key Registry + const EntityKeyRegistryContract = await ethers.getContractFactory("EntityKeyRegistry"); + const entityKeyRegistryProxy = await upgrades.deployProxy(EntityKeyRegistryContract, [], { + kind: "uups", + initializer: false, + constructorArgs: [await attestationVerifier.getAddress()], + }); + const entityKeyRegistry = EntityKeyRegistry__factory.connect(await entityKeyRegistryProxy.getAddress(), deployer); + addresses.proxy.entityKeyRegistry = await entityKeyRegistry.getAddress(); + addresses.implementation.entityKeyRegistry = await upgrades.erc1967.getImplementationAddress(await entityKeyRegistry.getAddress()); + fs.writeFileSync(addressPath, JSON.stringify(addresses, null, 4), "utf-8"); + console.log("EntityKeyRegistry deployed at:\t\t", await entityKeyRegistry.getAddress()); + + // ProverManager + const ProverManagerContract = await ethers.getContractFactory("ProverManager"); + const proverProxy = await upgrades.deployProxy(ProverManagerContract, [], { + kind: "uups", + initializer: false, + }); + const proverManager = ProverManager__factory.connect(await proverProxy.getAddress(), deployer); + addresses.proxy.proverManager = await proverManager.getAddress(); + addresses.implementation.proverManager = await upgrades.erc1967.getImplementationAddress(await proverManager.getAddress()); + fs.writeFileSync(addressPath, JSON.stringify(addresses, null, 4), "utf-8"); + console.log("ProverManager deployed at:\t\t", await proverManager.getAddress()); + + // ProofMarketplace + const ProofMarketplace = await ethers.getContractFactory("ProofMarketplace"); + const proxy = await upgrades.deployProxy(ProofMarketplace, [], { + kind: "uups", + initializer: false, + }); + const proofMarketplace = ProofMarketplace__factory.connect(await proxy.getAddress(), deployer); + addresses.proxy.proofMarketplace = await proofMarketplace.getAddress(); + addresses.implementation.proofMarketplace = await upgrades.erc1967.getImplementationAddress(await proofMarketplace.getAddress()); + fs.writeFileSync(addressPath, JSON.stringify(addresses, null, 4), "utf-8"); + console.log("ProofMarketplace deployed at:\t\t", await proofMarketplace.getAddress()); + + return "Deploy Done"; + // TODO: set address for roles +} + +async function initialize(): Promise { + const { chainId, signers, addresses } = await getConfig(); + console.log("Initializing on chain id:", chainId); + + console.log("Available Signers", signers); + + const deployer = signers[0]; + + const configPath = `./config/${chainId}.json`; + const configurationExists = checkFileExists(configPath); + + if (!configurationExists) { + throw new Error(`Config doesn't exists for chainId: ${chainId}`); + } + + const config = JSON.parse(fs.readFileSync(configPath, "utf-8")); + + //---------------------------------------- Initialize ----------------------------------------// + const stakingManager = StakingManager__factory.connect(addresses.proxy.stakingManager, deployer); + const nativeStaking = NativeStaking__factory.connect(addresses.proxy.nativeStaking, deployer); + const symbioticStaking = SymbioticStaking__factory.connect(addresses.proxy.symbioticStaking, deployer); + const symbioticStakingReward = SymbioticStakingReward__factory.connect(addresses.proxy.symbioticStakingReward, deployer); + const attestationVerifier = AttestationVerifier__factory.connect(addresses.proxy.attestationVerifier, deployer); + const entityKeyRegistry = EntityKeyRegistry__factory.connect(addresses.proxy.entityKeyRegistry, deployer); + const proverManager = ProverManager__factory.connect(addresses.proxy.proverManager, deployer); + const proofMarketplace = ProofMarketplace__factory.connect(addresses.proxy.proofMarketplace, deployer); + + const USDC = config.USDC; + const admin = config.admin; + const treasury = config.treasury; + + // Staking Manager + console.log(await stakingManager.hasRole(await symbioticStaking.DEFAULT_ADMIN_ROLE(), admin)); + if(!await stakingManager.hasRole(await symbioticStaking.DEFAULT_ADMIN_ROLE(), admin)) { + await stakingManager.initialize( + admin, + await proofMarketplace.getAddress(), + await proverManager.getAddress(), + await symbioticStaking.getAddress(), + USDC, + ); + console.log("StakingManager initialized"); + } + + // Native Staking + // const WITHDRAWAL_DURATION = 2 * 60 * 60; // 2 hours + const WITHDRAWAL_DURATION = config.staking.native.withdrawalDuration; + if(!await nativeStaking.hasRole(await nativeStaking.DEFAULT_ADMIN_ROLE(), admin)) { + await nativeStaking.initialize(admin, await stakingManager.getAddress(), WITHDRAWAL_DURATION); + console.log("NativeStaking initialized"); + } + + // Symbiotic Staking + if(!await symbioticStaking.hasRole(await symbioticStaking.DEFAULT_ADMIN_ROLE(), admin)) { + await symbioticStaking.initialize( + admin, + await attestationVerifier.getAddress(), + await proofMarketplace.getAddress(), + await stakingManager.getAddress(), + await symbioticStakingReward.getAddress(), + ); + console.log("SymbioticStaking initialized"); + } + + // Symbiotic Staking Reward + if(!await symbioticStakingReward.hasRole(await symbioticStakingReward.DEFAULT_ADMIN_ROLE(), admin)) { + await symbioticStakingReward.initialize( + admin, + await proofMarketplace.getAddress(), + await symbioticStaking.getAddress(), + USDC, + ); + console.log("SymbioticStakingReward initialized"); + } + + // Prover Manager + if(!await proverManager.hasRole(await proverManager.DEFAULT_ADMIN_ROLE(), admin)) { + await proverManager.initialize( + admin, + await proofMarketplace.getAddress(), + await stakingManager.getAddress(), + await entityKeyRegistry.getAddress() + ); + console.log("ProverManager initialized"); + } + + // Proof Marketplace + if(!await proofMarketplace.hasRole(await proofMarketplace.DEFAULT_ADMIN_ROLE(), admin)) { + await proofMarketplace.initialize( + admin, + USDC, + treasury, // TODO: set treasury address + await proverManager.getAddress(), + await entityKeyRegistry.getAddress(), + config.marketCreationCost + ); + console.log("ProofMarketplace initialized"); + } + + // Entity Key Registry + if(!await entityKeyRegistry.hasRole(await entityKeyRegistry.DEFAULT_ADMIN_ROLE(), admin)) { + await entityKeyRegistry.initialize(admin, []); + console.log("EntityKeyRegistry initialized"); + } + + // Attestation Verifier + if(!await attestationVerifier.hasRole(await attestationVerifier.DEFAULT_ADMIN_ROLE(), admin)) { + await attestationVerifier.initialize( + [config.attestationVerifier.whitelistedImage.PCRs], + [config.attestationVerifier.whitelistedImage.enclaveKey], + admin + ); + console.log("AttestationVerifier initialized"); + } + + //---------------------------------------- Initialize ----------------------------------------// + + return "Initialize Done"; +} + +deploy().then(console.log).then(initialize).then(console.log).catch(console.error); \ No newline at end of file diff --git a/scripts/deploy/grantRoles.ts b/scripts/deploy/grantRoles.ts new file mode 100644 index 0000000..8d05fd3 --- /dev/null +++ b/scripts/deploy/grantRoles.ts @@ -0,0 +1,126 @@ +import { + EntityKeyRegistry__factory, + NativeStaking__factory, + ProofMarketplace__factory, + ProverManager__factory, + StakingManager__factory, + SymbioticStaking__factory, + SymbioticStakingReward__factory, +} from "../../typechain-types"; +import { getConfig } from "../helper"; + +async function main() { + const { chainId, signers, addresses } = await getConfig(); + + let tx; + + const entityKeyRegistry = EntityKeyRegistry__factory.connect(addresses.proxy.entityKeyRegistry, signers[0]); + const proofMarketplace = ProofMarketplace__factory.connect(addresses.proxy.proofMarketplace, signers[0]); + const proverManager = ProverManager__factory.connect(addresses.proxy.proverManager, signers[0]); + const nativeStaking = NativeStaking__factory.connect(addresses.proxy.nativeStaking, signers[0]); + const stakingManager = StakingManager__factory.connect(addresses.proxy.stakingManager, signers[0]); + const symbioticStaking = SymbioticStaking__factory.connect(addresses.proxy.symbioticStaking, signers[0]); + const symbioticStakingReward = SymbioticStakingReward__factory.connect(addresses.proxy.symbioticStakingReward, signers[0]); + + // TODO: all addresses below should be set + + /* EntityKeyRegistry */ + const ENTITYKEYREGISTRY_KEY_REGISTER_ROLE_ADDR = "0x"; + const ENTITYKEYREGISTRY_MODERATOR_ROLE_ADDR = "0x"; + /* ProofMarketplace */ + const PROOFMARKETPLACE_UPDATER_ROLE_ADDR = "0x"; + const PROOFMARKETPLACE_MATCHING_ENGINE_ROLE_ADDR = "0x"; + /* SymbioticStaking */ + const SYMBIOTIC_STAKING_BRIDGE_ENCLAVE_UPDATER_ROLE_ADDR = "0x"; + + //---------------------------------------- EntityKeyRegistry ----------------------------------------// + + // EntityKeyRegistry.KEY_REGISTER_ROLE to ProverManager + tx = await entityKeyRegistry.grantRole(await entityKeyRegistry.KEY_REGISTER_ROLE(), ENTITYKEYREGISTRY_KEY_REGISTER_ROLE_ADDR); + await tx.wait(); + console.log("EntityKeyRegistry.KEY_REGISTER_ROLE granted to ProverManager"); + + // EntityKeyRegistry.MODERATOR_ROLE to ENTITYKEYREGISTRY_MODERATOR_ROLE_ADDR + tx = await entityKeyRegistry.grantRole(await entityKeyRegistry.MODERATOR_ROLE(), ENTITYKEYREGISTRY_MODERATOR_ROLE_ADDR); + await tx.wait(); + console.log("EntityKeyRegistry.MODERATOR_ROLE granted to ENTITYKEYREGISTRY_MODERATOR_ROLE_ADDR"); + + //---------------------------------------- ProofMarketplace ----------------------------------------// + + // ProofMarketplace.UPDATER_ROLE to PROOFMARKETPLACE_UPDATER_ROLE_ADDR + tx = await proofMarketplace.grantRole(await proofMarketplace.UPDATER_ROLE(), PROOFMARKETPLACE_UPDATER_ROLE_ADDR); + await tx.wait(); + console.log("ProofMarketplace.UPDATER_ROLE granted to PROOFMARKETPLACE_UPDATER_ROLE_ADDR"); + + // ProofMarketplace.MATCHING_ENGINE_ROLE to PROOFMARKETPLACE_MATCHING_ENGINE_ROLE_ADDR + tx = await proofMarketplace.grantRole(await proofMarketplace.MATCHING_ENGINE_ROLE(), PROOFMARKETPLACE_MATCHING_ENGINE_ROLE_ADDR); + await tx.wait(); + console.log("ProofMarketplace.MATCHING_ENGINE_ROLE granted to PROOFMARKETPLACE_MATCHING_ENGINE_ROLE_ADDR"); + + // ProofMarketplace.STAKING_MANAGER_ROLE to StakingManager + tx = await proofMarketplace.grantRole(await proofMarketplace.STAKING_MANAGER_ROLE(), addresses.proxy.stakingManager); + await tx.wait(); + console.log("ProofMarketplace.STAKING_MANAGER_ROLE granted to StakingManager"); + + // ProofMarketplace.SYMBIOTIC_STAKING_ROLE to SymbioticStaking + tx = await proofMarketplace.grantRole(await proofMarketplace.SYMBIOTIC_STAKING_ROLE(), addresses.proxy.symbioticStaking); + await tx.wait(); + console.log("ProofMarketplace.SYMBIOTIC_STAKING_ROLE granted to SymbioticStaking"); + + // ProofMarketplace.SYMBIOTIC_STAKING_REWARD_ROLE to SymbioticStakingReward + tx = await proofMarketplace.grantRole(await proofMarketplace.SYMBIOTIC_STAKING_REWARD_ROLE(), addresses.proxy.symbioticStakingReward); + await tx.wait(); + console.log("ProofMarketplace.SYMBIOTIC_STAKING_REWARD_ROLE granted to SymbioticStakingReward"); + + //---------------------------------------- ProverManager ----------------------------------------// + + // ProverManager.PROOF_MARKET_PLACE_ROLE to ProofMarketplace + tx = await proverManager.grantRole(await proverManager.PROOF_MARKET_PLACE_ROLE(), addresses.proxy.proofMarketplace); + await tx.wait(); + console.log("ProverManager.PROOF_MARKET_PLACE_ROLE granted to ProofMarketplace"); + + //---------------------------------------- NativeStaking ----------------------------------------// + + // NativeStaking.STAKING_MANAGER_ROLE to STAKING_MANAGER + tx = await nativeStaking.grantRole(await nativeStaking.STAKING_MANAGER_ROLE(), addresses.proxy.stakingManager); + await tx.wait(); + console.log("NativeStaking.STAKING_MANAGER_ROLE granted to STAKING_MANAGER"); + + //---------------------------------------- StakingManager ----------------------------------------// + + // StakingManager.PROVER_MANAGER_ROLE to PROVER_MANAGER + tx = await stakingManager.grantRole(await stakingManager.PROVER_MANAGER_ROLE(), addresses.proxy.proverManager); + await tx.wait(); + console.log("StakingManager.PROVER_MANAGER_ROLE granted to PROVER_MANAGER"); + + // StakingManager.SYMBIOTIC_STAKING_ROLE to SYMBIOTIC_STAKING + tx = await stakingManager.grantRole(await stakingManager.SYMBIOTIC_STAKING_ROLE(), addresses.proxy.symbioticStaking); + await tx.wait(); + console.log("StakingManager.SYMBIOTIC_STAKING_ROLE granted to SYMBIOTIC_STAKING"); + + //---------------------------------------- SymbioticStaking ----------------------------------------// + + // SymbioticStaking.STAKING_MANAGER_ROLE to STAKING_MANAGER + tx = await symbioticStaking.grantRole(await symbioticStaking.STAKING_MANAGER_ROLE(), addresses.proxy.stakingManager); + await tx.wait(); + console.log("SymbioticStaking.STAKING_MANAGER_ROLE granted to STAKING_MANAGER"); + + // SymbioticStaking.BRIDGE_ENCLAVE_UPDATER_ROLE to SYMBIOTIC_STAKING_BRIDGE_ENCLAVE_UPDATER_ROLE_ADDR + tx = await symbioticStaking.grantRole( + await symbioticStaking.BRIDGE_ENCLAVE_UPDATER_ROLE(), + SYMBIOTIC_STAKING_BRIDGE_ENCLAVE_UPDATER_ROLE_ADDR, + ); + await tx.wait(); + console.log("SymbioticStaking.BRIDGE_ENCLAVE_UPDATER_ROLE granted to SYMBIOTIC_STAKING_BRIDGE_ENCLAVE_UPDATER_ROLE_ADDR"); + + //---------------------------------------- SymbioticStakingReward ----------------------------------------// + + // SymbioticStakingReward.SYMBIOTIC_STAKING_ROLE to SYMBIOTIC_STAKING + tx = await symbioticStakingReward.grantRole(await symbioticStakingReward.SYMBIOTIC_STAKING_ROLE(), addresses.proxy.symbioticStaking); + await tx.wait(); + console.log("SymbioticStakingReward.SYMBIOTIC_STAKING_ROLE granted to SYMBIOTIC_STAKING"); + + return "Done"; +} + +main().then(console.log).catch(console.error); diff --git a/scripts/deploy/initialSetup.ts b/scripts/deploy/initialSetup.ts new file mode 100644 index 0000000..28d7039 --- /dev/null +++ b/scripts/deploy/initialSetup.ts @@ -0,0 +1,90 @@ +import BigNumber from 'bignumber.js'; + +import { + EntityKeyRegistry__factory, + IStakingPool, + NativeStaking__factory, + ProofMarketplace__factory, + StakingManager__factory, + SymbioticStaking__factory, + SymbioticStakingReward__factory, +} from '../../typechain-types'; +import { getConfig } from '../helper'; + +async function main() { + const { chainId, signers, addresses } = await getConfig(); + + const admin = signers[0]; + + const entityKeyRegistry = EntityKeyRegistry__factory.connect(addresses.proxy.entityKeyRegistry, admin); + const proofMarketplace = ProofMarketplace__factory.connect(addresses.proxy.proofMarketplace, admin); + const nativeStaking = NativeStaking__factory.connect(addresses.proxy.nativeStaking, admin); + const stakingManager = StakingManager__factory.connect(addresses.proxy.stakingManager, admin); + const symbioticStaking = SymbioticStaking__factory.connect(addresses.proxy.symbioticStaking, admin); + const symbioticStakingReward = SymbioticStakingReward__factory.connect(addresses.proxy.symbioticStakingReward, admin); + + // TODO: set this address + const WETH = addresses.mockToken.weth; + const POND = addresses.mockToken.pond; + + /*-------------------------------- StakingManager Setup --------------------------------*/ + + const ONE_ETH = new BigNumber(10).pow(18); + const TWENTY_PERCENT = ONE_ETH.multipliedBy(20).dividedBy(100); + const SIXTY_PERCENT = ONE_ETH.multipliedBy(60).dividedBy(100); + const FOURTY_PERCENT = ONE_ETH.multipliedBy(40).dividedBy(100); + const TEN_MINUTES = 10 * 60; // 10 minutes + + // Add Staking Pools + await stakingManager.addStakingPool(await nativeStaking.getAddress(), 0); + console.log("NativeStaking added to StakingManager"); + + await stakingManager.addStakingPool(await symbioticStaking.getAddress(), ONE_ETH.toString()); + console.log("SymbioticStaking added to StakingManager"); + console.log("Reward shares set for NativeStaking(0%) and SymbioticStaking(100%"); + + // Set EnabledPool + await stakingManager.setPoolEnabled(await nativeStaking.getAddress(), true); + console.log("NativeStaking enabled"); + await stakingManager.setPoolEnabled(await symbioticStaking.getAddress(), true); + console.log("SymbioticStaking enabled"); + + /*-------------------------------- NativeStaking Setup --------------------------------*/ + + // TODO: weight will be twisted each time new token is added, need to fix the contract logic + await nativeStaking.addStakeToken(POND, ONE_ETH.toString()); + console.log("POND added to NativeStaking"); + await nativeStaking.setStakeAmountToLock(POND, ); + console.log("Stake amount to lock set for POND"); + + // /*-------------------------------- SymbioticStaking Config --------------------------------*/ + + // TODO: weight will be twisted each time new token is added, need to fix the contract logic + // Add Stake Tokens + await symbioticStaking.addStakeToken(POND, SIXTY_PERCENT.toString()); // POND: 60% + console.log("POND added to SymbioticStaking"); + await symbioticStaking.addStakeToken(WETH, FOURTY_PERCENT.toString()); // WETH: 40% + console.log("WETH added to SymbioticStaking"); + await symbioticStaking.addStakeToken("0x5e478cb7576906fe2a443684adcd9a0dfc547abd", TWENTY_PERCENT.toString()); // Arbitrary: 20% + console.log("Arbitrary added to SymbioticStaking"); + + // Set Amount to Lock + await symbioticStaking.setAmountToLock(POND, ONE_ETH.multipliedBy(2).toString()); // Lock 2 POND per job + console.log("Amount to lock set for POND"); + await symbioticStaking.setAmountToLock(WETH, ONE_ETH.multipliedBy(2).toString()); // Lock 2 WETH per job + console.log("Amount to lock set for WETH"); + await symbioticStaking.setAmountToLock("0x5e478cb7576906fe2a443684adcd9a0dfc547abd", ONE_ETH.multipliedBy(10).toString()); // Lock 10 WETH per job + console.log("Amount to lock set for 0x5e478cb7576906fe2a443684adcd9a0dfc547abd"); + + // Set Base Transmitter Comission Rate + await symbioticStaking.setBaseTransmitterComissionRate(TWENTY_PERCENT.toString()); // Base Transmitter Comission: 20% + console.log("Base Transmitter Comission set"); + + // Set Submission Cooldown + await symbioticStaking.setSubmissionCooldown(TEN_MINUTES); + console.log("Submission Cooldown set"); + + return "Done"; +} + +main().then(console.log).catch(console.error); diff --git a/scripts/deploy/verify.ts b/scripts/deploy/verify.ts new file mode 100644 index 0000000..2aaac8a --- /dev/null +++ b/scripts/deploy/verify.ts @@ -0,0 +1,84 @@ +import { + run, + tenderly, +} from 'hardhat'; + +import { getConfig } from '../helper'; + +enum ContractType { + Proxy = "proxy", + Implementation = "implementation", +} + +const verifyContract = async (contractName: string, contractType: ContractType, constructorArguments: any[] = []) => { + const { addresses } = await getConfig(); + const isProxy = contractType === ContractType.Proxy; + const type = isProxy ? "proxy" : "implementation"; + + // Verify in Explorer + try { + const verificationResult = await run("verify:verify", { + address: addresses[type][contractName], + constructorArguments: constructorArguments, + }); + console.log({ verificationResult }); + } catch (error) { + if (error) { + console.log(`${contractName} ${type} already verified, continuing...`); + } else { + console.error(`Error verifying ${contractName} ${type}:`, error); + } + } + + // Verify in Tenderly + try { + await tenderly.verify({ + address: addresses[type][contractName], + name: isProxy ? "ERC1967ProxyFlatten.sol:ERC1967Proxy" : contractName, + }); + } catch (error) { + console.error(`Error verifying ${contractName} ${type} on Tenderly:`, error); + } + + console.log(`(${type}) ${contractName} verified\n`); +} + +async function verify(): Promise { + const { addresses } = await getConfig(); + // StakingManager + await verifyContract("stakingManager", ContractType.Implementation); + await verifyContract("stakingManager", ContractType.Proxy); + + // NativeStaking + await verifyContract("nativeStaking", ContractType.Implementation); + await verifyContract("nativeStaking", ContractType.Proxy); + + // SymbioticStaking + await verifyContract("symbioticStaking", ContractType.Implementation); + await verifyContract("symbioticStaking", ContractType.Proxy); + + // SymbioticStakingReward + await verifyContract("symbioticStakingReward", ContractType.Implementation); + await verifyContract("symbioticStakingReward", ContractType.Proxy); + + // ProverManager + await verifyContract("proverManager", ContractType.Implementation); + await verifyContract("proverManager", ContractType.Proxy); + + // EntityKeyRegistry + await verifyContract("entityKeyRegistry", ContractType.Implementation, [addresses.proxy.attestationVerifier]); + await verifyContract("entityKeyRegistry", ContractType.Proxy); + + // ProofMarketplace + await verifyContract("proofMarketplace", ContractType.Implementation); + await verifyContract("proofMarketplace", ContractType.Proxy); + + // AttestationVerifier + await verifyContract("attestationVerifier", ContractType.Implementation); + await verifyContract("attestationVerifier", ContractType.Proxy); + + return "Verify Done"; +} + +verify().then(console.log).catch(console.error); + diff --git a/scripts/deployAttestationVerifier.ts b/scripts/deployAttestationVerifier.ts new file mode 100644 index 0000000..09c88c2 --- /dev/null +++ b/scripts/deployAttestationVerifier.ts @@ -0,0 +1,56 @@ +import { ethers, upgrades, run } from "hardhat"; +import * as fs from "fs"; + +import { MockAttestationVerifier__factory } from "../typechain-types"; +import { checkFileExists } from "../helpers"; + +async function main(): Promise { + const chainId = (await ethers.provider.getNetwork()).chainId.toString(); + console.log("deploying on chain id:", chainId); + + const signers = await ethers.getSigners(); + console.log("available signers", signers.length); + + if (signers.length < 2) { + throw new Error("Atleast 2 signers are required for deployment"); + } + + const configPath = `./config/${chainId}.json`; + const configurationExists = checkFileExists(configPath); + + if (!configurationExists) { + throw new Error(`Config doesn't exists for chainId: ${chainId}`); + } + + const config = JSON.parse(fs.readFileSync(configPath, "utf-8")); + + let admin = signers[0]; + let deployer = signers[1]; + + const path = `./addresses/${chainId}.json`; + + let addresses = JSON.parse(fs.readFileSync(path, "utf-8")); + + if (!addresses.proxy.attestation_verifier) { + const attestationVerifierFactory = (await ethers.getContractFactory("MockAttestationVerifier", admin)) as MockAttestationVerifier__factory; + + const proxy = await upgrades.deployProxy( + attestationVerifierFactory.connect(deployer), + [] + ); + await proxy.waitForDeployment(); + + addresses.proxy.attestation_verifier = await proxy.getAddress(); + addresses.implementation.attestation_verifier = await upgrades.erc1967.getImplementationAddress(addresses.proxy.attestation_verifier); + fs.writeFileSync(path, JSON.stringify(addresses, null, 4), "utf-8"); + + // verify the contract + await run("verify:verify", { + address: addresses.proxy.attestation_verifier, + constructorArguments: [], + }); + } + return "Added AttestationVerifier"; +} + +main().then(console.log).catch(console.log); \ No newline at end of file diff --git a/scripts/deployMiddleware.ts b/scripts/deployMiddleware.ts new file mode 100644 index 0000000..ff69eb5 --- /dev/null +++ b/scripts/deployMiddleware.ts @@ -0,0 +1,99 @@ +import { ethers, upgrades, run } from "hardhat"; +import * as fs from "fs"; + +import { Middleware__factory } from "../typechain-types"; +import { checkFileExists } from "../helpers"; + +async function main(): Promise { + const chainId = (await ethers.provider.getNetwork()).chainId.toString(); + console.log("deploying on chain id:", chainId); + + const signers = await ethers.getSigners(); + console.log("available signers", signers.length); + + if (signers.length < 1) { + throw new Error("Atleast 2 signers are required for deployment"); + } + + const configPath = `./config/${chainId}.json`; + const configurationExists = checkFileExists(configPath); + + if (!configurationExists) { + throw new Error(`Config doesn't exists for chainId: ${chainId}`); + } + + const config = JSON.parse(fs.readFileSync(configPath, "utf-8")); + + let admin = config.symbiotic.admin; + let deployer = signers[0]; + + const path = `./addresses/${chainId}.json`; + + let addresses = JSON.parse(fs.readFileSync(path, "utf-8")); + + if (!addresses.proxy.attestation_verifier) { + throw new Error("Attestation Verifier not deployed"); + } + + if (!addresses.proxy.middleware) { + const middlewareFactory = (await ethers.getContractFactory("Middleware", deployer)) as Middleware__factory; + + const proxy = await upgrades.deployProxy( + middlewareFactory.connect(deployer), + [config.symbiotic.networkId, addresses.proxy.attestation_verifier, admin], + { initializer: "initialize" } + ); + await proxy.waitForDeployment(); + + addresses.proxy.middleware = await proxy.getAddress(); + addresses.implementation.middleware = await upgrades.erc1967.getImplementationAddress(addresses.proxy.middleware); + fs.writeFileSync(path, JSON.stringify(addresses, null, 4), "utf-8"); + + // verify the contract + await run("verify:verify", { + address: addresses.proxy.middleware, + constructorArguments: [], + }); + } + return "Added Middleware"; +} + +export async function upgrade() { + let chainId = parseInt((await ethers.provider.getNetwork()).chainId.toString()); + console.log("Chain Id:", chainId); + + const path = `./addresses/${chainId}.json`; + + let addresses = JSON.parse(fs.readFileSync(path, "utf-8")); + + if(addresses.proxy === undefined || + addresses.proxy.middleware === undefined + ) { + console.log("Missing dependencies"); + return; + } + + let signers = await ethers.getSigners(); + let addrs = await Promise.all(signers.map(a => a.getAddress())); + + console.log("Signer addrs:", addrs); + + let admin = signers[0]; + const CF = await ethers.getContractFactory("Middleware", admin); + let c = await upgrades.upgradeProxy(addresses.proxy.middleware, CF, { + kind: "uups", + constructorArgs: [] + }); + addresses.implementation.middleware = await upgrades.erc1967.getImplementationAddress(addresses.proxy.middleware); + fs.writeFileSync(path, JSON.stringify(addresses, null, 4), "utf-8"); + + // verify the contract + await run("verify:verify", { + address: addresses.proxy.middleware, + constructorArguments: [], + }); + + console.log("Contract upgraded:", c.address); +} + +main().then(console.log).catch(console.log); \ No newline at end of file diff --git a/scripts/deployMockCollateralToken.ts b/scripts/deployMockCollateralToken.ts new file mode 100644 index 0000000..2a00fa7 --- /dev/null +++ b/scripts/deployMockCollateralToken.ts @@ -0,0 +1,42 @@ +import { ethers, run } from "hardhat"; +import * as fs from "fs"; + +import { OpenMintToken__factory } from "../typechain-types"; +import { checkFileExists } from "../helpers"; + +async function main(): Promise { + const chainId = (await ethers.provider.getNetwork()).chainId.toString(); + console.log("deploying on chain id:", chainId); + + const signers = await ethers.getSigners(); + console.log("available signers", signers.length); + + if (signers.length < 1) { + throw new Error("Atleast 1 signers are required for deployment"); + } + + const configPath = `./config/${chainId}.json`; + const configurationExists = checkFileExists(configPath); + + if (!configurationExists) { + throw new Error(`Config doesn't exists for chainId: ${chainId}`); + } + + let deployer = signers[1]; + + const token = await new OpenMintToken__factory(deployer).deploy(); + await token.waitForDeployment(); + const address = await token.getAddress(); + + // wait for 30 seconds for the contract to be deployed + await new Promise((resolve) => setTimeout(resolve, 30000)); + + await run("verify:verify", { + address, + constructorArguments: [], + }); + + return "Deployer mock collateral token"; +} + +main().then(console.log).catch(console.log); diff --git a/scripts/findErrorCode.ts b/scripts/findErrorCode.ts index 4df593b..b3b035f 100644 --- a/scripts/findErrorCode.ts +++ b/scripts/findErrorCode.ts @@ -3,94 +3,103 @@ import * as fs from "fs"; import * as path from "path"; // TODO: Later convert this into a command line argument -const errorCode = "0x16f2d83f"; +const errorCode = "0xe2517d3f"; // Define the path to the artifacts directory const artifactsDir = path.join(__dirname, "../artifacts/contracts"); // Interface for the result interface Result { - found: boolean; - errorName?: string; - contractName?: string; - selector?: string; + found: boolean; + errorName?: string; + contractName?: string; + selector?: string; } // Function to compute the error signature using ethers.js ErrorFragment -const findErrorSelectorInAbi = (contractName: string, allFragments: any[], selector: string): Result => { - const errorFragments = allFragments.filter((a) => a.type === "error"); - - for (const errorFragment of errorFragments) { - try { - const ef = ErrorFragment.from(errorFragment); - - if (ef.selector === selector) { - console.log(`Contract: ${contractName}, Error: ${ef.name}, Selector: ${ef.selector}`); - return { found: true, errorName: ef.name, contractName, selector }; - } - } catch (error) { - console.error(`Error processing fragment in contract ${contractName}:`, error); +const findErrorSelectorInAbi = ( + contractName: string, + allFragments: any[], + selector: string +): Result => { + const errorFragments = allFragments.filter((a) => a.type === "error"); + + for (const errorFragment of errorFragments) { + try { + const ef = ErrorFragment.from(errorFragment); + + if (ef.selector === selector) { + console.log( + `Contract: ${contractName}, Error: ${ef.name}, Selector: ${ef.selector}` + ); + return { found: true, errorName: ef.name, contractName, selector }; + } + } catch (error) { + console.error( + `Error processing fragment in contract ${contractName}:`, + error + ); + } } - } - return { found: false }; + return { found: false }; }; // Function to recursively get all JSON files in a directory const getAllJsonFiles = (dir: string, files_?: string[]): string[] => { - files_ = files_ || []; - const files = fs.readdirSync(dir); - for (const file of files) { - const name = path.join(dir, file); - if (fs.statSync(name).isDirectory()) { - getAllJsonFiles(name, files_); - } else if (name.endsWith(".json")) { - files_.push(name); + files_ = files_ || []; + const files = fs.readdirSync(dir); + for (const file of files) { + const name = path.join(dir, file); + if (fs.statSync(name).isDirectory()) { + getAllJsonFiles(name, files_); + } else if (name.endsWith(".json")) { + files_.push(name); + } } - } - return files_; + return files_; }; // Main function to execute the scanning const main = () => { - // Get all ABI JSON files - const abiFiles = getAllJsonFiles(artifactsDir); + // Get all ABI JSON files + const abiFiles = getAllJsonFiles(artifactsDir); - if (abiFiles.length === 0) { - console.log("No ABI files found in the artifacts directory."); - return; - } + if (abiFiles.length === 0) { + console.log("No ABI files found in the artifacts directory."); + return; + } - let anyFound = false; + let anyFound = false; - // Iterate over each ABI file - abiFiles.forEach((filePath) => { - try { - const fileContent = fs.readFileSync(filePath, "utf8"); - const parsedJson = JSON.parse(fileContent); + // Iterate over each ABI file + abiFiles.forEach((filePath) => { + try { + const fileContent = fs.readFileSync(filePath, "utf8"); + const parsedJson = JSON.parse(fileContent); - // Extract ABI and contract name - const abi = parsedJson.abi; - const contractName = parsedJson.contractName || path.basename(filePath, ".json"); + // Extract ABI and contract name + const abi = parsedJson.abi; + const contractName = parsedJson.contractName || path.basename(filePath, ".json"); - if (!abi || !Array.isArray(abi)) { - return; - } + if (!abi || !Array.isArray(abi)) { + return; + } - // Search for the error selector in the ABI - const result = findErrorSelectorInAbi(contractName, abi, errorCode); + // Search for the error selector in the ABI + const result = findErrorSelectorInAbi(contractName, abi, errorCode); - if (result.found) { - anyFound = true; - } - } catch (error) { - console.error(`Error processing file ${filePath}:`, error); - } - }); + if (result.found) { + anyFound = true; + } + } catch (error) { + console.error(`Error processing file ${filePath}:`, error); + } + }); - if (!anyFound) { - console.log(`No matching error selector (${errorCode}) found in any ABI.`); - } + if (!anyFound) { + console.log(`No matching error selector (${errorCode}) found in any ABI.`); + } }; // Execute the main function diff --git a/scripts/foundry/DeployArbitrumSepolia.s.sol b/scripts/foundry/DeployArbitrumSepolia.s.sol new file mode 100644 index 0000000..d807e45 --- /dev/null +++ b/scripts/foundry/DeployArbitrumSepolia.s.sol @@ -0,0 +1,260 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.26; + +/* Foundry */ +import {Script} from "forge-std/Script.sol"; +import {console} from "forge-std/Test.sol"; + +/* Contracts */ +import {USDC} from "./mocks/USDC.sol"; +import {POND} from "./mocks/POND.sol"; +import {WETH} from "./mocks/WETH.sol"; + +import {AttestationVerifier} from "../../contracts/periphery/AttestationVerifier.sol"; +import {ProofMarketplace} from "../../contracts/ProofMarketplace.sol"; +import {EntityKeyRegistry} from "../../contracts/EntityKeyRegistry.sol"; +import {ProverManager} from "../../contracts/ProverManager.sol"; +import {StakingManager} from "../../contracts/staking/l2_contracts/StakingManager.sol"; +import {NativeStaking} from "../../contracts/staking/l2_contracts/NativeStaking.sol"; +import {SymbioticStaking} from "../../contracts/staking/l2_contracts/SymbioticStaking.sol"; +import {SymbioticStakingReward} from "../../contracts/staking/l2_contracts/SymbioticStakingReward.sol"; +import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; + +/* Interfaces */ +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +contract DeployArbitrumSepolia is Script { + uint256 public constant INFLATION_REWARD_EPOCH_SIZE = 1 hours; // 60*60 seconds + uint256 public constant INFLATION_REWARD_PER_EPOCH = 100 ether; // 100 POND + uint256 public constant SUBMISSION_COOLDOWN = 5 minutes; // snapshot submission cooldown delay + address public constant ATTESTATION_VERIFIER = 0x63EEf1576b477Aa60Bfd7300B2C85b887639Ac1b; + + uint256 constant public FIFTEEN_PERCENT = 15; + uint256 constant public TWENTY_PERCENT = 20; + uint256 constant public THIRTY_PERCENT = 30; + uint256 constant public FORTY_PERCENT = 40; + uint256 constant public FIFTY_PERCENT = 50; + uint256 constant public SIXTY_PERCENT = 60; + uint256 constant public HUNDRED_PERCENT = 100; + + uint256 admin_key = vm.envUint("ARBITRUM_SEPOLIA_ADMIN_KEY"); + + /* Tokens */ + address usdc; + address pond; + address weth; + + /* Contract Implementations */ + // address attestationVerifierImpl; + address proofMarketplaceImpl; + address entityKeyRegistryImpl; + address proverManagerImpl; + address stakingManagerImpl; + address nativeStakingImpl; + address symbioticStakingImpl; + address symbioticStakingRewardImpl; + + /* Proxies */ + // address attestationVerifier; + address proofMarketplace; + address entityKeyRegistry; + address proverManager; + address stakingManager; + address nativeStaking; + address symbioticStaking; + address symbioticStakingReward; + + // TODO: config for each contracts + function run() public { + address admin = 0x7C046645E21B811780Cf420021E6701A9E66935C; + /* God Enclave PCRS */ + // AttestationVerifier.EnclaveImage[] memory GOD_ENCLAVE = new AttestationVerifier.EnclaveImage[](1); + // GOD_ENCLAVE[0] = AttestationVerifier.EnclaveImage({ + // PCR0: bytes(hex"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065"), + // PCR1: bytes(hex"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036"), + // PCR2: bytes(hex"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093") + // }); + + // bytes[] memory GOD_ENCLAVE_KEYS = new bytes[](1); + // GOD_ENCLAVE_KEYS[0] = bytes(hex"6bf5eaebfb44393f4b39351e8dd7bf49e2adfe0c6b639126783132b871bf164d049b27ad2d0ba4206a0e82be1c4bdfe38f853a99b13361cf7b42b68a4dd4530f"); + + vm.startBroadcast(admin_key); + + /* deploy tokens */ + usdc = address(new USDC(admin)); + pond = address(new POND(admin)); + weth = address(new WETH(admin)); + + address feeToken = usdc; + // address inflationRewardToken = pond; + + /* Impls */ + stakingManagerImpl = address(new StakingManager()); + nativeStakingImpl = address(new NativeStaking()); + symbioticStakingImpl = address(new SymbioticStaking()); + symbioticStakingRewardImpl = address(new SymbioticStakingReward()); + + /* Proxies */ + stakingManager = address(new ERC1967Proxy(stakingManagerImpl, "")); + nativeStaking = address(new ERC1967Proxy(nativeStakingImpl, "")); + symbioticStaking = address(new ERC1967Proxy(symbioticStakingImpl, "")); + symbioticStakingReward = address(new ERC1967Proxy(symbioticStakingRewardImpl, "")); + + // AttestationVerifier + // attestationVerifierImpl = address(new AttestationVerifier()); + // attestationVerifier = address(new ERC1967Proxy(attestationVerifierImpl, "")); + + // EntityKeyRegistry + entityKeyRegistryImpl = address(new EntityKeyRegistry(AttestationVerifier(ATTESTATION_VERIFIER))); + entityKeyRegistry = address(new ERC1967Proxy(entityKeyRegistryImpl, "")); + + // ProverManager + proverManagerImpl = address(new ProverManager(EntityKeyRegistry(entityKeyRegistry))); + proverManager = address(new ERC1967Proxy(proverManagerImpl, "")); + + // ProofMarketplace + proofMarketplaceImpl = address( + new ProofMarketplace( + IERC20(usdc), + 100 ether, + admin, + ProverManager(proverManager), + EntityKeyRegistry(entityKeyRegistry) + ) + ); + proofMarketplace = address(new ERC1967Proxy(proofMarketplaceImpl, "")); + + /* initialize */ + + // ProofMarketplace + ProofMarketplace(address(proofMarketplace)).initialize(admin); + + // ATTESTATION_VERIFIER + // AttestationVerifier(address(attestationVerifier)).initialize(GOD_ENCLAVE, GOD_ENCLAVE_KEYS, admin); + + // EntityKeyRegistry + EntityKeyRegistry.EnclaveImage[] memory initWhitelistImages; + EntityKeyRegistry(address(entityKeyRegistry)).initialize(admin, initWhitelistImages); + + // ProverManager + ProverManager(address(proverManager)).initialize(admin, proofMarketplace, stakingManager); + + // StakingManager + StakingManager(address(stakingManager)).initialize( + admin, address(proofMarketplace), address(symbioticStaking), address(feeToken) + ); + + // NativeStaking + NativeStaking(address(nativeStaking)).initialize( + admin, + address(stakingManager), + 2 days, // withdrawalDuration + address(feeToken) + ); + + // SymbioticStaking + // SymbioticStaking(address(symbioticStaking)).initialize( + // admin, address(proofMarketplace), address(symbioticStaking), address(symbioticStakingReward), feeToken + // ); + + // SymbioticStakingReward + SymbioticStakingReward(address(symbioticStakingReward)).initialize( + admin, address(proofMarketplace), address(symbioticStaking), feeToken + ); + + // Grant `PROVER_MANAGER_ROLE` to StakingManager + StakingManager(address(stakingManager)).grantRole( + StakingManager(address(stakingManager)).PROVER_MANAGER_ROLE(), address(proverManager) + ); + + // Grant `KEY_REGISTER_ROLE` to ProverManager, ProofMarketplace + bytes32 register_role = EntityKeyRegistry(address(entityKeyRegistry)).KEY_REGISTER_ROLE(); + EntityKeyRegistry(address(entityKeyRegistry)).grantRole(register_role, address(proverManager)); + EntityKeyRegistry(address(entityKeyRegistry)).grantRole(register_role, address(proofMarketplace)); + + // Grant `UPDATER_ROLE` to admin + ProofMarketplace(address(proofMarketplace)).grantRole(ProofMarketplace(address(proofMarketplace)).UPDATER_ROLE(), admin); + + + /*==================== Config & Setup ====================*/ + + /*-------------------------------- StakingManager Config --------------------------------*/ + // Add NativeStaking, SymbioticStaking + StakingManager(stakingManager).addStakingPool(nativeStaking); + StakingManager(stakingManager).addStakingPool(symbioticStaking); + + // Set reward shares + address[] memory pools = new address[](2); + pools[0] = nativeStaking; + pools[1] = symbioticStaking; + uint256[] memory shares = new uint256[](2); + shares[0] = 0; + shares[1] = _calculatePercent(HUNDRED_PERCENT); + StakingManager(stakingManager).setPoolRewardShare(pools, shares); + + // Enable pools + StakingManager(stakingManager).setEnabledPool(nativeStaking, true); + StakingManager(stakingManager).setEnabledPool(symbioticStaking, true); + + /*-------------------------------- NativeStaking Config --------------------------------*/ + NativeStaking(nativeStaking).addStakeToken(pond, _calculatePercent(HUNDRED_PERCENT)); + NativeStaking(nativeStaking).setAmountToLock(pond, 1 ether); + console.log("Native Staking: AmountToLock per job: 1 POND"); + console.log(""); + + /*-------------------------------- SymbioticStaking Config --------------------------------*/ + SymbioticStaking(symbioticStaking).addStakeToken(pond, _calculatePercent(SIXTY_PERCENT)); + console.log("Symbiotic Staking: POND selection weight: 60%"); + SymbioticStaking(symbioticStaking).addStakeToken(weth, _calculatePercent(FORTY_PERCENT)); + console.log("Symbiotic Staking: WETH selection weight: 40%"); + /* amount to lock */ + SymbioticStaking(symbioticStaking).setAmountToLock(pond, 2 ether); + console.log("Symbiotic Staking: POND amount to lock (per job): 2 POND"); + SymbioticStaking(symbioticStaking).setAmountToLock(weth, 2 ether); + console.log("Symbiotic Staking: WETH amount to lock (per job): 2 WETH"); + SymbioticStaking(symbioticStaking).setBaseTransmitterComissionRate(_calculatePercent(TWENTY_PERCENT)); + console.log("Symbiotic Staking: Base Transmitter Comission Rate: 20%"); + SymbioticStaking(symbioticStaking).setSubmissionCooldown(SUBMISSION_COOLDOWN); + console.log("Symbiotic Staking: Submission Cooldown: 5 minutes"); + console.log(""); + + vm.stopBroadcast(); + + console.log("admin: \t\t\t", admin); + console.log("ATTESTATION_VERIFIER: \t", ATTESTATION_VERIFIER); + console.log(""); + + console.log("< Impls Deployed >\n"); + // console.log("attestationVerifierImpl: \t", address(attestationVerifierImpl)); + console.log("entityKeyRegistryImpl: \t", address(entityKeyRegistryImpl)); + console.log("proverManagerImpl: \t", address(proverManagerImpl)); + console.log("stakingManagerImpl: \t\t", address(stakingManagerImpl)); + console.log("nativeStakingImpl: \t\t", address(nativeStakingImpl)); + console.log("symbioticStakingImpl: \t", address(symbioticStakingImpl)); + console.log("symbioticStakingRewardImpl: \t", address(symbioticStakingRewardImpl)); + console.log(""); + + console.log("< Proxies Deployed >\n"); + + console.log("proofMarketplace: \t\t", address(proofMarketplace)); + // console.log("attestationVerifier: \t\t", address(attestationVerifier)); + console.log("entityKeyRegistry: \t\t", address(entityKeyRegistry)); + console.log("proverManager: \t\t", address(proverManager)); + console.log("stakingManager: \t\t", address(stakingManager)); + console.log("nativeStaking: \t\t", address(nativeStaking)); + console.log("symbioticStaking: \t\t", address(symbioticStaking)); + console.log("symbioticStakingReward: \t", address(symbioticStakingReward)); + console.log(""); + + console.log("< Tokens >\n"); + + console.log("USDC (feeToken): \t\t", usdc); + console.log("POND: \t\t\t", pond); + console.log("WETH: \t\t\t", weth); + } + + function _calculatePercent(uint256 percent) internal pure returns (uint256) { + return Math.mulDiv(percent, 1e18, 100); + } +} diff --git a/scripts/foundry/mocks/POND.sol b/scripts/foundry/mocks/POND.sol new file mode 100644 index 0000000..ad0b9ec --- /dev/null +++ b/scripts/foundry/mocks/POND.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.26; + +import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +contract POND is ERC20 { + + address public owner; + + uint256 constant INITIAL_SUPPLY = 100_000_000e18; + + constructor(address admin) ERC20("POND", "POND") { + _mint(admin, INITIAL_SUPPLY); + owner = admin; + } + + function mint(address to, uint256 amount) public { + require(msg.sender == owner, "Only owner can mint"); + + _mint(to, amount); + } +} diff --git a/scripts/foundry/mocks/USDC.sol b/scripts/foundry/mocks/USDC.sol new file mode 100644 index 0000000..7e0a297 --- /dev/null +++ b/scripts/foundry/mocks/USDC.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.26; + +import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +contract USDC is ERC20 { + + uint256 constant INITIAL_SUPPLY = 100_000_000e6; + + address public owner; + + constructor(address admin) ERC20("USDC", "USDC") { + _mint(admin, INITIAL_SUPPLY); + } + + function decimals() public pure override returns (uint8) { + return 6; + } + + function mint(address to, uint256 amount) public { + _mint(to, amount); + } +} diff --git a/scripts/foundry/mocks/WETH.sol b/scripts/foundry/mocks/WETH.sol new file mode 100644 index 0000000..1605bea --- /dev/null +++ b/scripts/foundry/mocks/WETH.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.26; + +import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +contract WETH is ERC20 { + + uint256 constant INITIAL_SUPPLY = 100_000_000e18; + + address public owner; + + constructor(address admin) ERC20("WETH", "WETH") { + _mint(admin, INITIAL_SUPPLY); + } + + function mint(address to, uint256 amount) public { + _mint(to, amount); + } +} diff --git a/scripts/helper.ts b/scripts/helper.ts new file mode 100644 index 0000000..ed470cd --- /dev/null +++ b/scripts/helper.ts @@ -0,0 +1,24 @@ +import * as fs from "fs"; +import { ethers } from "hardhat"; +import { run } from "hardhat"; + +export async function getConfig() { + const chainId = (await ethers.provider.getNetwork()).chainId.toString(); + console.log("deploying on chain id:", chainId); + + const signers = await ethers.getSigners(); + console.log(signers); + + const path = `./addresses/${chainId}.json`; + const addresses = JSON.parse(fs.readFileSync(path, "utf-8")); + + return { chainId, signers, path, addresses }; +} + +export async function verify(address: string, constructorArguments: any[]) { + const verificationResult = await run("verify:verify", { + address, + constructorArguments + }); + console.log({ verificationResult }); +} \ No newline at end of file diff --git a/scripts/registerSymbioticStakingImage.ts b/scripts/registerSymbioticStakingImage.ts new file mode 100644 index 0000000..183aa57 --- /dev/null +++ b/scripts/registerSymbioticStakingImage.ts @@ -0,0 +1,58 @@ +import { run, ethers } from "hardhat"; +import { checkFileExists } from "../helpers"; +import * as fs from "fs"; +import { SymbioticStaking__factory } from "../typechain-types"; +import { expect } from "chai"; +import { BytesLike } from "ethers"; +import { config } from "./config"; + + + +async function main() { + + const { chainId, signers, addresses } = await config(); + + const admin = signers[0]; + + // Symbiotic Staking contract + const symbioticStaking = SymbioticStaking__factory.connect(addresses.proxy.symbiotic_staking, admin); + + /* Remove Image */ + + // Remove Image + const OLD_PCR0 = "0xe74b4ac0423dea145795651690c7fae34179e15ceaad26cf4664ccbe0dc6faf1740ee81a5431182bd2e5514c9215aba9" as BytesLike; + const OLD_PCR1 = "0xbcdf05fefccaa8e55bf2c8d6dee9e79bbff31e34bf28a99aa19e6b29c37ee80b214a414b7607236edf26fcb78654e63f" as BytesLike; + const OLD_PCR2 = "0x3c753e19f2c242ff601df40dad9ebd5913752133d570faa653e5d8e3118ffe0460cfa43d98b1169c051002a8385e1162" as BytesLike; + + let tx = await symbioticStaking.removeEnclaveImage(await symbioticStaking.getImageId(OLD_PCR0, OLD_PCR1, OLD_PCR2)); + tx.wait(); + + /* Add New Image */ + const NEW_PCR0 = "0x3030f7cec2ac000c4ef4513d8b6bf627c246dfdb7d9771595946ab7401fc2a9c8558f15790fb64d0877d189774cafa57" as BytesLike; + const NEW_PCR1 = "0xbcdf05fefccaa8e55bf2c8d6dee9e79bbff31e34bf28a99aa19e6b29c37ee80b214a414b7607236edf26fcb78654e63f" as BytesLike; + const NEW_PCR2 = "0xa72f37d921d94868ffeb4e36f77c15032b5e148b0fa17b08fb1db942850e6d4ec5c012e322a0810aba24fb2d1b2cb0c8" as BytesLike; + + tx = await symbioticStaking.addEnclaveImage(NEW_PCR0, NEW_PCR1, NEW_PCR2); + tx.wait(); + console.log("Enclave image added"); + + // const configPath = `./config/${chainId}.json`; + // const configurationExists = checkFileExists(configPath); + + // if (!configurationExists) { + // throw new Error(`Config doesn't exists for chainId: ${chainId}`); + // } + + // const config = JSON.parse(fs.readFileSync(configPath, "utf-8")); + + // const path = `./addresses/${chainId}.json`; + // const addresses = JSON.parse(fs.readFileSync(path, "utf-8")); + + // let verificationResult; + + // console.log({ verificationResult }); + + return "Done"; +} + +main().then(console.log); diff --git a/scripts/upgradePmp.ts b/scripts/upgradePmp.ts new file mode 100644 index 0000000..616e828 --- /dev/null +++ b/scripts/upgradePmp.ts @@ -0,0 +1,42 @@ +import { ethers, upgrades, run } from "hardhat"; +import * as fs from "fs"; + + +import { checkFileExists } from "../helpers"; + + +async function main(): Promise { + const chainId = (await ethers.provider.getNetwork()).chainId.toString(); + console.log("deploying on chain id:", chainId); + + const signers = await ethers.getSigners(); + console.log("available signers", signers.length); + + const configPath = `./config/${chainId}.json`; + const configurationExists = checkFileExists(configPath); + + if (!configurationExists) { + throw new Error(`Config doesn't exists for chainId: ${chainId}`); + } + + const path = `./addresses/${chainId}.json`; + + let addresses = JSON.parse(fs.readFileSync(path, "utf-8")); + let proof_market_place = addresses.proxy.proof_market_place; + + const ProofMarketplace = await ethers.getContractFactory("ProofMarketplace"); + +// await upgrades.forceImport(proof_market_place, ProofMarketplace, { +// kind: "uups", +// }); + + await upgrades.upgradeProxy(proof_market_place, ProofMarketplace, { + kind: "uups", + constructorArgs: [], + redeployImplementation: "always" + }); + + return "Upgraded ProofMarketplace"; +} + +main().then(console.log).catch(console.log); \ No newline at end of file diff --git a/scripts/verify.ts b/scripts/verify.ts index a068c17..ff4ea09 100644 --- a/scripts/verify.ts +++ b/scripts/verify.ts @@ -1,6 +1,10 @@ -import { run, ethers } from "hardhat"; -import { checkFileExists } from "../helpers"; -import * as fs from "fs"; +import * as fs from 'fs'; +import { + ethers, + run, +} from 'hardhat'; + +import { checkFileExists } from '../helpers'; async function main() { const chainId = (await ethers.provider.getNetwork()).chainId.toString(); @@ -30,7 +34,7 @@ async function main() { let verificationResult; verificationResult = await run("verify:verify", { - address: addresses.implementation.generator_registry, + address: addresses.implementation.prover_registry, constructorArguments: [addresses.proxy.staking_token, addresses.proxy.entity_registry], }); console.log({ verificationResult }); @@ -41,7 +45,7 @@ async function main() { addresses.proxy.payment_token, config.marketCreationCost, await treasury.getAddress(), - addresses.proxy.generator_registry, + addresses.proxy.prover_registry, addresses.proxy.entity_registry, ], }); @@ -54,7 +58,7 @@ async function main() { console.log({ verificationResult }); verificationResult = await run("verify:verify", { - address: addresses.proxy.generator_registry, + address: addresses.proxy.prover_registry, }); console.log({ verificationResult }); diff --git a/scripts/whitelistKeyAv.ts b/scripts/whitelistKeyAv.ts index 43333bd..ffd56ee 100644 --- a/scripts/whitelistKeyAv.ts +++ b/scripts/whitelistKeyAv.ts @@ -1,8 +1,14 @@ -import { ethers } from "hardhat"; -import * as fs from "fs"; - -import { AttestationVerifier__factory } from "../typechain-types"; -import { GodEnclavePCRS, MockEnclave, MockGeneratorPCRS, MockIVSPCRS, checkFileExists } from "../helpers"; +import * as fs from 'fs'; +import { ethers } from 'hardhat'; + +import { + checkFileExists, + GodEnclavePCRS, + MockEnclave, + MockIVSPCRS, + MockProverPCRS, +} from '../helpers'; +import { AttestationVerifier__factory } from '../typechain-types'; async function main(): Promise { const chainId = (await ethers.provider.getNetwork()).chainId.toString(); @@ -33,9 +39,9 @@ async function main(): Promise { const attestation_verifier = AttestationVerifier__factory.connect(addresses.proxy.attestation_verifier, admin); - const mockEnclave = new MockEnclave([MockGeneratorPCRS[2], GodEnclavePCRS[0], MockIVSPCRS[2]]); + const mockEnclave = new MockEnclave([MockProverPCRS[2], GodEnclavePCRS[0], MockIVSPCRS[2]]); try { - let tx = await attestation_verifier.whitelistImage(MockGeneratorPCRS[2], GodEnclavePCRS[0], MockIVSPCRS[2]); + let tx = await attestation_verifier.whitelistEnclaveImage(MockProverPCRS[2], GodEnclavePCRS[0], MockIVSPCRS[2]); let receipt = await tx.wait(); console.log(receipt?.hash); } catch (ex) { @@ -43,7 +49,7 @@ async function main(): Promise { } try { - let tx = await attestation_verifier.whitelistEnclave(mockEnclave.getImageId(), address); + let tx = await attestation_verifier.whitelistEnclaveKey(mockEnclave.getImageId(), address); let receipt = await tx.wait(); console.log(receipt?.hash); } catch (ex) { diff --git a/test/AttestationVerifierZK.ts b/test/AttestationVerifierZK.ts index 75d6f7a..0f3ad4a 100644 --- a/test/AttestationVerifierZK.ts +++ b/test/AttestationVerifierZK.ts @@ -1,17 +1,21 @@ -import { ethers } from "hardhat"; import { expect } from "chai"; -import { AbiCoder, Signer, ZeroAddress } from "ethers"; +import { + AbiCoder, + Signer, + ZeroAddress, +} from "ethers"; +import { ethers } from "hardhat"; + import * as attestation4533 from "../helpers/sample/risc0/attestation.json"; import * as attestation4534 from "../helpers/sample/risc0/attestation4534.json"; - import { - RiscZeroGroth16Verifier__factory, - RiscZeroVerifierEmergencyStop, - RiscZeroVerifierEmergencyStop__factory, AttestationVerifierZK, AttestationVerifierZK__factory, IRiscZeroVerifierRouter__factory, Risc0_attestation_verifier_wrapper__factory, + RiscZeroGroth16Verifier__factory, + RiscZeroVerifierEmergencyStop, + RiscZeroVerifierEmergencyStop__factory, } from "../typechain-types"; describe("Attestation verifier for RISC0, testing", () => { diff --git a/test/EntityKeyRegistry.ts b/test/EntityKeyRegistry.ts index e856fd8..6dfded9 100644 --- a/test/EntityKeyRegistry.ts +++ b/test/EntityKeyRegistry.ts @@ -1,16 +1,23 @@ -import { expect } from "chai"; -import { ethers, upgrades } from "hardhat"; -import { Signer } from "ethers"; +import { expect } from 'chai'; +import { Signer } from 'ethers'; +import { + ethers, + upgrades, +} from 'hardhat'; -import { MockEnclave, MockGeneratorPCRS, generatorFamilyId } from "../helpers"; import { - Error, - Error__factory, + MockEnclave, + MockProverPCRS, + proverFamilyId, +} from '../helpers'; +import { EntityKeyRegistry, EntityKeyRegistry__factory, - MockAttestationVerifier__factory, + Error, + Error__factory, MockAttestationVerifier, -} from "../typechain-types"; + MockAttestationVerifier__factory, +} from '../typechain-types'; describe("Entity key registry tests", () => { let signers: Signer[]; @@ -53,14 +60,14 @@ describe("Entity key registry tests", () => { }); it("Update key", async () => { - const generator_enclave = new MockEnclave(MockGeneratorPCRS); - await entityKeyRegistry.connect(admin).whitelistImageUsingPcrs(generatorFamilyId(1), generator_enclave.getPcrRlp()); + const prover_enclave = new MockEnclave(MockProverPCRS); + await entityKeyRegistry.connect(admin).whitelistImageUsingPcrs(proverFamilyId(1), prover_enclave.getPcrRlp()); await expect( entityKeyRegistry.updatePubkey( randomUser.getAddress(), 0, - generator_enclave.getUncompressedPubkey(), - await generator_enclave.getVerifiedAttestation(generator_enclave), + prover_enclave.getUncompressedPubkey(), + await prover_enclave.getVerifiedAttestation(prover_enclave), ), ) .to.emit(entityKeyRegistry, "UpdateKey") @@ -69,14 +76,14 @@ describe("Entity key registry tests", () => { it("Remove key", async () => { // Adding key to registry - const generator_enclave = new MockEnclave(MockGeneratorPCRS); - await entityKeyRegistry.connect(admin).whitelistImageUsingPcrs(generatorFamilyId(1), generator_enclave.getPcrRlp()); + const prover_enclave = new MockEnclave(MockProverPCRS); + await entityKeyRegistry.connect(admin).whitelistImageUsingPcrs(proverFamilyId(1), prover_enclave.getPcrRlp()); await expect( entityKeyRegistry.updatePubkey( randomUser.getAddress(), 8, - generator_enclave.getUncompressedPubkey(), - await generator_enclave.getVerifiedAttestation(generator_enclave), + prover_enclave.getUncompressedPubkey(), + await prover_enclave.getVerifiedAttestation(prover_enclave), ), ) .to.emit(entityKeyRegistry, "UpdateKey") @@ -84,7 +91,7 @@ describe("Entity key registry tests", () => { // Checking key in registry const pub_key = await entityKeyRegistry.pub_key(randomUser.getAddress(), 8); - expect(pub_key).to.eq(generator_enclave.getUncompressedPubkey()); + expect(pub_key).to.eq(prover_enclave.getUncompressedPubkey()); // Removing key from registry await expect(entityKeyRegistry.removePubkey(randomUser.getAddress(), 9)) diff --git a/test/Generator.ts b/test/Generator.ts deleted file mode 100644 index eb130f5..0000000 --- a/test/Generator.ts +++ /dev/null @@ -1,798 +0,0 @@ -import { expect } from "chai"; -import { ethers } from "hardhat"; -import * as fs from "fs"; -import { Provider, Signer } from "ethers"; -import { BigNumber } from "bignumber.js"; -import { - Error, - GeneratorRegistry, - MockToken, - PriorityLog, - ProofMarketplace, - TransferVerifier__factory, - EntityKeyRegistry, - Transfer_verifier_wrapper__factory, - IVerifier__factory, - IVerifier, -} from "../typechain-types"; - -import { - GeneratorData, - GodEnclavePCRS, - MarketData, - MockEnclave, - MockGeneratorPCRS, - MockIVSPCRS, - MockMEPCRS, - generatorDataToBytes, - marketDataToBytes, - setup, - skipBlocks, -} from "../helpers"; - -import * as transfer_verifier_inputs from "../helpers/sample/transferVerifier/transfer_inputs.json"; -import * as transfer_verifier_proof from "../helpers/sample/transferVerifier/transfer_proof.json"; - -import * as invalid_transfer_verifier_proof from "../helpers/sample/zkbVerifier/transfer_proof.json"; - -describe("Checking Generator's multiple compute", () => { - let proofMarketplace: ProofMarketplace; - let generatorRegistry: GeneratorRegistry; - let tokenToUse: MockToken; - let priorityLog: PriorityLog; - let errorLibrary: Error; - let entityKeyRegistry: EntityKeyRegistry; - let iverifier: IVerifier; - - let signers: Signer[]; - let admin: Signer; - let tokenHolder: Signer; - let treasury: Signer; - let prover: Signer; - let generator: Signer; - - let marketCreator: Signer; - let marketSetupData: MarketData; - let marketId: string; - - let generatorData: GeneratorData; - - const ivsEnclave = new MockEnclave(MockIVSPCRS); - const matchingEngineEnclave = new MockEnclave(MockMEPCRS); - const generatorEnclave = new MockEnclave(MockGeneratorPCRS); - - const godEnclave = new MockEnclave(GodEnclavePCRS); - - const totalTokenSupply: BigNumber = new BigNumber(10).pow(24).multipliedBy(9); - const generatorStakingAmount: BigNumber = new BigNumber(10).pow(18).multipliedBy(1000).multipliedBy(2).minus(1231); // use any random number - const generatorSlashingPenalty: BigNumber = new BigNumber(10).pow(16).multipliedBy(93).minus(182723423); // use any random number - const marketCreationCost: BigNumber = new BigNumber(10).pow(18).multipliedBy(1213).minus(23746287365); // use any random number - const generatorComputeAllocation = new BigNumber(10).pow(19).minus("12782387").div(123).multipliedBy(98); - - const computeGivenToNewMarket = new BigNumber(10).pow(19).minus("98897").div(9233).multipliedBy(98); - - const rewardForProofGeneration = new BigNumber(10).pow(18).multipliedBy(200); - const minRewardByGenerator = new BigNumber(10).pow(18).multipliedBy(199); - - const refreshSetup = async ( - modifiedComputeGivenToNewMarket = computeGivenToNewMarket, - modifiedGeneratorStakingAmount = generatorStakingAmount, - ): Promise => { - signers = await ethers.getSigners(); - admin = signers[0]; - tokenHolder = signers[1]; - treasury = signers[2]; - marketCreator = signers[3]; - prover = signers[4]; - generator = signers[5]; - - marketSetupData = { - zkAppName: "transfer verifier", - proverCode: "url of the prover code", - verifierCode: "url of the verifier code", - proverOysterImage: "oyster image link for the prover", - setupCeremonyData: ["first phase", "second phase", "third phase"], - inputOuputVerifierUrl: "this should be nclave url", - }; - - generatorData = { - name: "some custom name for the generator", - }; - - await admin.sendTransaction({ to: ivsEnclave.getAddress(), value: "1000000000000000000" }); - await admin.sendTransaction({ to: matchingEngineEnclave.getAddress(), value: "1000000000000000000" }); - - const transferVerifier = await new TransferVerifier__factory(admin).deploy(); - - let abiCoder = new ethers.AbiCoder(); - - let inputBytes = abiCoder.encode( - ["uint256[5]"], - [ - [ - transfer_verifier_inputs[0], - transfer_verifier_inputs[1], - transfer_verifier_inputs[2], - transfer_verifier_inputs[3], - transfer_verifier_inputs[4], - ], - ], - ); - - let proofBytes = abiCoder.encode( - ["uint256[8]"], - [ - [ - transfer_verifier_proof.a[0], - transfer_verifier_proof.a[1], - transfer_verifier_proof.b[0][0], - transfer_verifier_proof.b[0][1], - transfer_verifier_proof.b[1][0], - transfer_verifier_proof.b[1][1], - transfer_verifier_proof.c[0], - transfer_verifier_proof.c[1], - ], - ], - ); - const transferVerifierWrapper = await new Transfer_verifier_wrapper__factory(admin).deploy( - await transferVerifier.getAddress(), - inputBytes, - proofBytes, - ); - - iverifier = IVerifier__factory.connect(await transferVerifierWrapper.getAddress(), admin); - - let treasuryAddress = await treasury.getAddress(); - - let data = await setup.rawSetup( - admin, - tokenHolder, - totalTokenSupply, - modifiedGeneratorStakingAmount, - generatorSlashingPenalty, - treasuryAddress, - marketCreationCost, - marketCreator, - marketDataToBytes(marketSetupData), - marketSetupData.inputOuputVerifierUrl, - iverifier, - generator, - generatorDataToBytes(generatorData), - ivsEnclave, - matchingEngineEnclave, - generatorEnclave, - minRewardByGenerator, - generatorComputeAllocation, - modifiedComputeGivenToNewMarket, - godEnclave, - ); - - proofMarketplace = data.proofMarketplace; - generatorRegistry = data.generatorRegistry; - tokenToUse = data.mockToken; - priorityLog = data.priorityLog; - errorLibrary = data.errorLibrary; - entityKeyRegistry = data.entityKeyRegistry; - - marketId = new BigNumber((await proofMarketplace.marketCounter()).toString()).minus(1).toFixed(); - - let marketActivationDelay = await proofMarketplace.MARKET_ACTIVATION_DELAY(); - await skipBlocks(ethers, new BigNumber(marketActivationDelay.toString()).toNumber()); - }; - beforeEach(async () => { - await refreshSetup(); - }); - - it("Using Simple Transfer Verifier", async () => { - let abiCoder = new ethers.AbiCoder(); - - let inputBytes = abiCoder.encode( - ["uint256[5]"], - [ - [ - transfer_verifier_inputs[0], - transfer_verifier_inputs[1], - transfer_verifier_inputs[2], - transfer_verifier_inputs[3], - transfer_verifier_inputs[4], - ], - ], - ); - // console.log({ inputBytes }); - const latestBlock = await ethers.provider.getBlockNumber(); - let assignmentExpiry = 100; // in blocks - let timeTakenForProofGeneration = 100000000; // keep a large number, but only for tests - let maxTimeForProofGeneration = 10000; // in blocks - - const askId = await setup.createAsk( - prover, - tokenHolder, - { - marketId, - proverData: inputBytes, - reward: rewardForProofGeneration.toFixed(), - expiry: assignmentExpiry + latestBlock, - timeTakenForProofGeneration, - deadline: latestBlock + maxTimeForProofGeneration, - refundAddress: await prover.getAddress(), - }, - { - mockToken: tokenToUse, - proofMarketplace, - generatorRegistry, - priorityLog, - errorLibrary, - entityKeyRegistry, - }, - 1, - ); - - await setup.createTask( - matchingEngineEnclave, - admin.provider as Provider, - { - mockToken: tokenToUse, - proofMarketplace, - generatorRegistry, - priorityLog, - errorLibrary, - entityKeyRegistry, - }, - askId, - generator, - ); - - let proofBytes = abiCoder.encode( - ["uint256[8]"], - [ - [ - transfer_verifier_proof.a[0], - transfer_verifier_proof.a[1], - transfer_verifier_proof.b[0][0], - transfer_verifier_proof.b[0][1], - transfer_verifier_proof.b[1][0], - transfer_verifier_proof.b[1][1], - transfer_verifier_proof.c[0], - transfer_verifier_proof.c[1], - ], - ], - ); - await expect(proofMarketplace.submitProof(askId, proofBytes)).to.emit(proofMarketplace, "ProofCreated").withArgs(askId, proofBytes); - }); - - it("Should Fail invalid Proof: Simple Transfer Verifier, but proof generated for some other request", async () => { - let abiCoder = new ethers.AbiCoder(); - - let inputBytes = abiCoder.encode( - ["uint256[5]"], - [ - [ - transfer_verifier_inputs[0], - transfer_verifier_inputs[1], - transfer_verifier_inputs[2], - transfer_verifier_inputs[3], - transfer_verifier_inputs[4], - ], - ], - ); - // console.log({ inputBytes }); - const latestBlock = await ethers.provider.getBlockNumber(); - let assignmentExpiry = 100; // in blocks - let timeTakenForProofGeneration = 100000000; // keep a large number, but only for tests - let maxTimeForProofGeneration = 10000; // in blocks - - const askId = await setup.createAsk( - prover, - tokenHolder, - { - marketId, - proverData: inputBytes, - reward: rewardForProofGeneration.toFixed(), - expiry: assignmentExpiry + latestBlock, - timeTakenForProofGeneration, - deadline: latestBlock + maxTimeForProofGeneration, - refundAddress: await prover.getAddress(), - }, - { - mockToken: tokenToUse, - proofMarketplace, - generatorRegistry, - priorityLog, - errorLibrary, - entityKeyRegistry, - }, - 1, - ); - - await setup.createTask( - matchingEngineEnclave, - admin.provider as Provider, - { - mockToken: tokenToUse, - proofMarketplace, - generatorRegistry, - priorityLog, - errorLibrary, - entityKeyRegistry, - }, - askId, - generator, - ); - - let proofBytes = abiCoder.encode( - ["uint256[8]"], - [ - [ - invalid_transfer_verifier_proof.a[0], - invalid_transfer_verifier_proof.a[1], - invalid_transfer_verifier_proof.b[0][0], - invalid_transfer_verifier_proof.b[0][1], - invalid_transfer_verifier_proof.b[1][0], - invalid_transfer_verifier_proof.b[1][1], - invalid_transfer_verifier_proof.c[0], - invalid_transfer_verifier_proof.c[1], - ], - ], - ); - await expect(proofMarketplace.submitProof(askId, proofBytes)) - .to.revertedWithCustomError(proofMarketplace, "InvalidProof") - .withArgs(askId); - }); - - it("Task Assignment fails if it exceeds compute capacity", async () => { - const max_asks = generatorComputeAllocation.div(computeGivenToNewMarket).toFixed(0); - - let abiCoder = new ethers.AbiCoder(); - - let inputBytes = abiCoder.encode( - ["uint256[5]"], - [ - [ - transfer_verifier_inputs[0], - transfer_verifier_inputs[1], - transfer_verifier_inputs[2], - transfer_verifier_inputs[3], - transfer_verifier_inputs[4], - ], - ], - ); - // console.log({ inputBytes }); - - for (let index = 0; index < parseInt(max_asks) + 2; index++) { - const latestBlock = await ethers.provider.getBlockNumber(); - let assignmentExpiry = 100; // in blocks - let timeTakenForProofGeneration = 100000000; // keep a large number, but only for tests - let maxTimeForProofGeneration = 10000; // in blocks - - if (index >= parseInt(max_asks)) { - const ask = { - marketId, - proverData: inputBytes, - reward: rewardForProofGeneration.toFixed(), - expiry: assignmentExpiry + latestBlock, - timeTakenForProofGeneration, - deadline: latestBlock + maxTimeForProofGeneration, - refundAddress: await prover.getAddress(), - }; - - await tokenToUse.connect(tokenHolder).transfer(await prover.getAddress(), ask.reward.toString()); - - await tokenToUse.connect(prover).approve(await proofMarketplace.getAddress(), ask.reward.toString()); - - const askId = await proofMarketplace.askCounter(); - - await proofMarketplace.connect(prover).createAsk(ask, marketId, "0x", "0x", "0x"); - - const matchingEngine: Signer = new ethers.Wallet(matchingEngineEnclave.getPrivateKey(true), admin.provider); - - await expect( - proofMarketplace.connect(matchingEngine).assignTask(askId, await generator.getAddress(), "0x1234"), - ).to.be.revertedWithCustomError(errorLibrary, "InsufficientGeneratorComputeAvailable"); - } else { - const askId = await setup.createAsk( - prover, - tokenHolder, - { - marketId, - proverData: inputBytes, - reward: rewardForProofGeneration.toFixed(), - expiry: assignmentExpiry + latestBlock, - timeTakenForProofGeneration, - deadline: latestBlock + maxTimeForProofGeneration, - refundAddress: await prover.getAddress(), - }, - { - mockToken: tokenToUse, - proofMarketplace, - generatorRegistry, - priorityLog, - errorLibrary, - entityKeyRegistry, - }, - 1, - ); - - await setup.createTask( - matchingEngineEnclave, - admin.provider as Provider, - { - mockToken: tokenToUse, - proofMarketplace, - generatorRegistry, - priorityLog, - errorLibrary, - entityKeyRegistry, - }, - askId, - generator, - ); - - // console.log({ taskId, index }); - } - } - }); - - it("Leave Market Place with active request", async () => { - const latestBlock = await ethers.provider.getBlockNumber(); - let assignmentExpiry = 100; // in blocks - let timeTakenForProofGeneration = 100000000; // keep a large number, but only for tests - let maxTimeForProofGeneration = 10000; // in blocks - - let abiCoder = new ethers.AbiCoder(); - - let inputBytes = abiCoder.encode( - ["uint256[5]"], - [ - [ - transfer_verifier_inputs[0], - transfer_verifier_inputs[1], - transfer_verifier_inputs[2], - transfer_verifier_inputs[3], - transfer_verifier_inputs[4], - ], - ], - ); - - const askId = await setup.createAsk( - prover, - tokenHolder, - { - marketId, - proverData: inputBytes, - reward: rewardForProofGeneration.toFixed(), - expiry: assignmentExpiry + latestBlock, - timeTakenForProofGeneration, - deadline: latestBlock + maxTimeForProofGeneration, - refundAddress: await prover.getAddress(), - }, - { - mockToken: tokenToUse, - proofMarketplace, - generatorRegistry, - priorityLog, - errorLibrary, - entityKeyRegistry, - }, - 1, - ); - - await setup.createTask( - matchingEngineEnclave, - admin.provider as Provider, - { - mockToken: tokenToUse, - proofMarketplace, - generatorRegistry, - priorityLog, - errorLibrary, - entityKeyRegistry, - }, - askId, - generator, - ); - - await expect(generatorRegistry.connect(generator).leaveMarketplace(marketId)).to.revertedWithCustomError( - generatorRegistry, - "CannotLeaveMarketWithActiveRequest", - ); - }); - - it("Invalid arguments in leave market place", async () => { - await expect(generatorRegistry.connect(admin).leaveMarketplace(marketId)).to.revertedWithCustomError( - generatorRegistry, - "InvalidGeneratorStatePerMarket", - ); - - // some random market id number - await expect(generatorRegistry.connect(generator).leaveMarketplace("287")).to.revertedWithoutReason; // actual reason probably is array-out-of-bonds - }); - - it("Task Assignment fails if it exceeds maximum parallel requests per generators", async () => { - const MAX_PARALLEL_REQUESTS = new BigNumber((await generatorRegistry.PARALLEL_REQUESTS_UPPER_LIMIT()).toString()); - - const newComputeGivenToMarket = generatorComputeAllocation.div(MAX_PARALLEL_REQUESTS).div(105).multipliedBy(100); - - await refreshSetup(newComputeGivenToMarket); - const max_asks = generatorComputeAllocation.div(newComputeGivenToMarket).toFixed(0); - - let abiCoder = new ethers.AbiCoder(); - - let inputBytes = abiCoder.encode( - ["uint256[5]"], - [ - [ - transfer_verifier_inputs[0], - transfer_verifier_inputs[1], - transfer_verifier_inputs[2], - transfer_verifier_inputs[3], - transfer_verifier_inputs[4], - ], - ], - ); - // console.log({ inputBytes }); - - for (let index = 0; index < parseInt(max_asks); index++) { - const latestBlock = await ethers.provider.getBlockNumber(); - let assignmentExpiry = 100; // in blocks - let timeTakenForProofGeneration = 100000000; // keep a large number, but only for tests - let maxTimeForProofGeneration = 10000; // in blocks - - if (index > MAX_PARALLEL_REQUESTS.toNumber()) { - const ask = { - marketId, - proverData: inputBytes, - reward: rewardForProofGeneration.toFixed(), - expiry: assignmentExpiry + latestBlock, - timeTakenForProofGeneration, - deadline: latestBlock + maxTimeForProofGeneration, - refundAddress: await prover.getAddress(), - }; - - await tokenToUse.connect(tokenHolder).transfer(await prover.getAddress(), ask.reward.toString()); - - await tokenToUse.connect(prover).approve(await proofMarketplace.getAddress(), ask.reward.toString()); - - const askId = await proofMarketplace.askCounter(); - - await proofMarketplace.connect(prover).createAsk(ask, marketId, "0x", "0x", "0x"); - - const matchingEngine: Signer = new ethers.Wallet(matchingEngineEnclave.getPrivateKey(true), admin.provider); - - await expect( - proofMarketplace.connect(matchingEngine).assignTask(askId, await generator.getAddress(), "0x1234"), - ).to.be.revertedWithCustomError(generatorRegistry, "MaxParallelRequestsPerMarketExceeded"); - } else { - const askId = await setup.createAsk( - prover, - tokenHolder, - { - marketId, - proverData: inputBytes, - reward: rewardForProofGeneration.toFixed(), - expiry: assignmentExpiry + latestBlock, - timeTakenForProofGeneration, - deadline: latestBlock + maxTimeForProofGeneration, - refundAddress: await prover.getAddress(), - }, - { - mockToken: tokenToUse, - proofMarketplace, - generatorRegistry, - priorityLog, - errorLibrary, - entityKeyRegistry, - }, - 1, - ); - - await setup.createTask( - matchingEngineEnclave, - admin.provider as Provider, - { - mockToken: tokenToUse, - proofMarketplace, - generatorRegistry, - priorityLog, - errorLibrary, - entityKeyRegistry, - }, - askId, - generator, - ); - } - } - }); - - it("Task Assignment fails if generator doesn't have sufficient stake", async () => { - const max_restricted_requests_by_stake = 3; - const newGeneratorStake = generatorSlashingPenalty.multipliedBy(max_restricted_requests_by_stake); - await refreshSetup(computeGivenToNewMarket, newGeneratorStake); - - let abiCoder = new ethers.AbiCoder(); - - let inputBytes = abiCoder.encode( - ["uint256[5]"], - [ - [ - transfer_verifier_inputs[0], - transfer_verifier_inputs[1], - transfer_verifier_inputs[2], - transfer_verifier_inputs[3], - transfer_verifier_inputs[4], - ], - ], - ); - - for (let index = 0; index < max_restricted_requests_by_stake + 12; index++) { - const latestBlock = await ethers.provider.getBlockNumber(); - let assignmentExpiry = 100; // in blocks - let timeTakenForProofGeneration = 100000000; // keep a large number, but only for tests - let maxTimeForProofGeneration = 10000; // in blocks - - if (index >= max_restricted_requests_by_stake) { - const ask = { - marketId, - proverData: inputBytes, - reward: rewardForProofGeneration.toFixed(), - expiry: assignmentExpiry + latestBlock, - timeTakenForProofGeneration, - deadline: latestBlock + maxTimeForProofGeneration, - refundAddress: await prover.getAddress(), - }; - - await tokenToUse.connect(tokenHolder).transfer(await prover.getAddress(), ask.reward.toString()); - - await tokenToUse.connect(prover).approve(await proofMarketplace.getAddress(), ask.reward.toString()); - - const askId = await proofMarketplace.askCounter(); - - await proofMarketplace.connect(prover).createAsk(ask, marketId, "0x", "0x", "0x"); - - const matchingEngine: Signer = new ethers.Wallet(matchingEngineEnclave.getPrivateKey(true), admin.provider); - - await expect( - proofMarketplace.connect(matchingEngine).assignTask(askId, await generator.getAddress(), "0x1234"), - ).to.be.revertedWithCustomError(generatorRegistry, "InsufficientStakeToLock"); - } else { - const askId = await setup.createAsk( - prover, - tokenHolder, - { - marketId, - proverData: inputBytes, - reward: rewardForProofGeneration.toFixed(), - expiry: assignmentExpiry + latestBlock, - timeTakenForProofGeneration, - deadline: latestBlock + maxTimeForProofGeneration, - refundAddress: await prover.getAddress(), - }, - { - mockToken: tokenToUse, - proofMarketplace, - generatorRegistry, - priorityLog, - errorLibrary, - entityKeyRegistry, - }, - 1, - ); - - await setup.createTask( - matchingEngineEnclave, - admin.provider as Provider, - { - mockToken: tokenToUse, - proofMarketplace, - generatorRegistry, - priorityLog, - errorLibrary, - entityKeyRegistry, - }, - askId, - generator, - ); - } - } - }); - - it("Only registered generator should be able to add/update entity keys", async () => { - const generatorEnclave = new MockEnclave(MockGeneratorPCRS); - - let generatorAttestationBytes = await generatorEnclave.getVerifiedAttestation(godEnclave); - - let types = ["bytes", "address"]; - - let values = [generatorAttestationBytes, await generator.getAddress()]; - - let abicode = new ethers.AbiCoder(); - let encoded = abicode.encode(types, values); - let digest = ethers.keccak256(encoded); - let signature = await generatorEnclave.signMessage(ethers.getBytes(digest)); - - await expect(generatorRegistry.connect(generator).updateEncryptionKey(marketId, generatorAttestationBytes, signature)) - .to.emit(entityKeyRegistry, "UpdateKey") - .withArgs(await generator.getAddress(), marketId); - }); - - it("Only admin can set the generator registry role", async () => { - const generatorRole = await entityKeyRegistry.KEY_REGISTER_ROLE(); - await expect(entityKeyRegistry.connect(treasury).addGeneratorRegistry(await proofMarketplace.getAddress())).to.be.reverted; - - await entityKeyRegistry.addGeneratorRegistry(await proofMarketplace.getAddress()); - expect(await entityKeyRegistry.hasRole(generatorRole, await proofMarketplace.getAddress())).to.eq(true); - }); - - it("Updating with invalid key should revert", async () => { - const generatorEnclave = new MockEnclave(MockGeneratorPCRS); - const invalidPubkey = "0x1234"; - - let abiCoder = new ethers.AbiCoder(); - let validAttesationWithInvalidKey = abiCoder.encode( - ["bytes", "bytes", "bytes", "bytes", "bytes", "uint256"], - ["0x00", invalidPubkey, MockGeneratorPCRS[0], MockGeneratorPCRS[1], MockGeneratorPCRS[2], new Date().valueOf()], - ); - - let types = ["bytes", "address"]; - let values = [validAttesationWithInvalidKey, await generator.getAddress()]; - - let abicode = new ethers.AbiCoder(); - let encoded = abicode.encode(types, values); - let digest = ethers.keccak256(encoded); - let signature = await generatorEnclave.signMessage(ethers.getBytes(digest)); - - await expect( - generatorRegistry.connect(generator).updateEncryptionKey(marketId, validAttesationWithInvalidKey, signature), - ).to.be.revertedWithCustomError(errorLibrary, "InvalidEnclaveKey"); - }); - - it("Remove key", async () => { - // Adding key to registry - const generatorEnclave = new MockEnclave(MockGeneratorPCRS); - let newAttesationBytes = await generatorEnclave.getVerifiedAttestation(godEnclave); - - let types = ["bytes", "address"]; - - let values = [newAttesationBytes, await generator.getAddress()]; - - let abicode = new ethers.AbiCoder(); - let encoded = abicode.encode(types, values); - let digest = ethers.keccak256(encoded); - let signature = await generatorEnclave.signMessage(ethers.getBytes(digest)); - - await expect(generatorRegistry.connect(generator).updateEncryptionKey(marketId, newAttesationBytes, signature)) - .to.emit(entityKeyRegistry, "UpdateKey") - .withArgs(await generator.getAddress(), marketId); - - // Checking key in registry - const pub_key = await entityKeyRegistry.pub_key(generator.getAddress(), marketId); - // console.log({ pub_key: pub_key }); - // console.log({pubBytes: pubBytes }); - expect(pub_key).to.eq(generatorEnclave.getUncompressedPubkey()); - - // Removing key from registry - await expect(generatorRegistry.connect(generator).removeEncryptionKey(marketId)) - .to.emit(entityKeyRegistry, "RemoveKey") - .withArgs(await generator.getAddress(), marketId); - }); - - it("Generator Prechecks", async () => { - const exponent = new BigNumber(10).pow(18).toFixed(0); - - const generatorData = await generatorRegistry.generatorRegistry(await generator.getAddress()); - expect(generatorComputeAllocation.toFixed(0)).to.eq(generatorData.declaredCompute.toString()); - expect(generatorData.computeConsumed).to.eq(0); - expect(generatorData.totalStake).to.eq(generatorStakingAmount.toFixed(0)); - expect(generatorData.stakeLocked).to.eq(0); - expect(generatorData.activeMarketplaces).to.eq(1); - expect(generatorData.intendedComputeUtilization).to.eq(exponent); - expect(generatorData.intendedStakeUtilization).to.eq(exponent); - - const marketId = 0; // likely to be 0, if failed change it - const generatorDataPerMarket = await generatorRegistry.generatorInfoPerMarket(await generator.getAddress(), marketId); - - expect(generatorDataPerMarket.state).to.not.eq(0); // 0 means no generator - expect(generatorDataPerMarket.computePerRequestRequired).to.eq(computeGivenToNewMarket.toFixed(0)); - expect(generatorDataPerMarket.proofGenerationCost).to.eq(minRewardByGenerator.toFixed(0)); - expect(generatorDataPerMarket.activeRequests).to.eq(0); - }); -}); diff --git a/test/PrivateMarket.ts b/test/PrivateMarket.ts index f8c19df..be614cb 100644 --- a/test/PrivateMarket.ts +++ b/test/PrivateMarket.ts @@ -1,47 +1,62 @@ -import { expect } from "chai"; -import { ethers } from "hardhat"; -import { Provider, Signer } from "ethers"; -import { BigNumber } from "bignumber.js"; +import { BigNumber } from 'bignumber.js'; +import { expect } from 'chai'; import { - Error, - GeneratorRegistry, - MockToken, - PriorityLog, - ProofMarketplace, - TransferVerifier__factory, - EntityKeyRegistry, - Transfer_verifier_wrapper__factory, - IVerifier__factory, - IVerifier, -} from "../typechain-types"; + Provider, + Signer, +} from 'ethers'; +import { ethers } from 'hardhat'; import { - GeneratorData, GodEnclavePCRS, + ivsFamilyId, MarketData, + marketDataToBytes, MockEnclave, - MockGeneratorPCRS, MockMEPCRS, - generatorDataToBytes, - generatorFamilyId, - ivsFamilyId, - marketDataToBytes, + MockProverPCRS, + ProverData, + proverDataToBytes, + proverFamilyId, setup, skipBlocks, -} from "../helpers"; - -import * as transfer_verifier_inputs from "../helpers/sample/transferVerifier/transfer_inputs.json"; -import * as transfer_verifier_proof from "../helpers/sample/transferVerifier/transfer_proof.json"; +} from '../helpers'; +import * as transfer_verifier_inputs + from '../helpers/sample/transferVerifier/transfer_inputs.json'; +import * as transfer_verifier_proof + from '../helpers/sample/transferVerifier/transfer_proof.json'; +import { + AttestationVerifier, + EntityKeyRegistry, + Error, + IVerifier, + IVerifier__factory, + MockToken, + NativeStaking, + PriorityLog, + ProofMarketplace, + ProverManager, + StakingManager, + SymbioticStaking, + SymbioticStakingReward, + Transfer_verifier_wrapper__factory, + TransferVerifier__factory, +} from '../typechain-types'; -describe("Checking Case where generator and ivs image is same", () => { +describe("Checking Case where prover and ivs image is same", () => { let proofMarketplace: ProofMarketplace; - let generatorRegistry: GeneratorRegistry; + let proverManager: ProverManager; let tokenToUse: MockToken; let priorityLog: PriorityLog; let errorLibrary: Error; let entityKeyRegistry: EntityKeyRegistry; + let attestationVerifier: AttestationVerifier; let iverifier: IVerifier; + let stakingManager: StakingManager; + let nativeStaking: NativeStaking; + let symbioticStaking: SymbioticStaking; + let symbioticStakingReward: SymbioticStakingReward; + let signers: Signer[]; let admin: Signer; let tokenHolder: Signer; @@ -53,23 +68,23 @@ describe("Checking Case where generator and ivs image is same", () => { let marketSetupData: MarketData; let marketId: string; - let generatorData: GeneratorData; + let proverData: ProverData; - const ivsAndGeneratorEnclaveCombined = new MockEnclave(MockGeneratorPCRS); + const ivsAndProverEnclaveCombined = new MockEnclave(MockProverPCRS); const matchingEngineEnclave = new MockEnclave(MockMEPCRS); const godEnclave = new MockEnclave(GodEnclavePCRS); const totalTokenSupply: BigNumber = new BigNumber(10).pow(24).multipliedBy(9); - const generatorStakingAmount: BigNumber = new BigNumber(10).pow(18).multipliedBy(1000).multipliedBy(2).minus(1231); // use any random number - const generatorSlashingPenalty: BigNumber = new BigNumber(10).pow(16).multipliedBy(93).minus(182723423); // use any random number + const proverStakingAmount: BigNumber = new BigNumber(10).pow(18).multipliedBy(1000).multipliedBy(2).minus(1231); // use any random number + const proverSlashingPenalty: BigNumber = new BigNumber(10).pow(16).multipliedBy(93).minus(182723423); // use any random number const marketCreationCost: BigNumber = new BigNumber(10).pow(18).multipliedBy(1213).minus(23746287365); // use any random number - const generatorComputeAllocation = new BigNumber(10).pow(19).minus("12782387").div(123).multipliedBy(98); + const proverComputeAllocation = new BigNumber(10).pow(19).minus("12782387").div(123).multipliedBy(98); const computeGivenToNewMarket = new BigNumber(10).pow(19).minus("98897").div(9233).multipliedBy(98); const rewardForProofGeneration = new BigNumber(10).pow(18).multipliedBy(200); - const minRewardByGenerator = new BigNumber(10).pow(18).multipliedBy(199); + const minRewardByProver = new BigNumber(10).pow(18).multipliedBy(199); beforeEach(async () => { signers = await ethers.getSigners(); @@ -89,11 +104,11 @@ describe("Checking Case where generator and ivs image is same", () => { inputOuputVerifierUrl: "this should be nclave url", }; - generatorData = { - name: "some custom name for the generator", + proverData = { + name: "some custom name for the prover", }; - await admin.sendTransaction({ to: ivsAndGeneratorEnclaveCombined.getAddress(), value: "1000000000000000000" }); + await admin.sendTransaction({ to: ivsAndProverEnclaveCombined.getAddress(), value: "1000000000000000000" }); await admin.sendTransaction({ to: matchingEngineEnclave.getAddress(), value: "1000000000000000000" }); const transferVerifier = await new TransferVerifier__factory(admin).deploy(); @@ -142,8 +157,8 @@ describe("Checking Case where generator and ivs image is same", () => { admin, tokenHolder, totalTokenSupply, - generatorStakingAmount, - generatorSlashingPenalty, + proverStakingAmount, + proverSlashingPenalty, treasuryAddress, marketCreationCost, marketCreator, @@ -151,31 +166,36 @@ describe("Checking Case where generator and ivs image is same", () => { marketSetupData.inputOuputVerifierUrl, iverifier, generator, - generatorDataToBytes(generatorData), - ivsAndGeneratorEnclaveCombined, // USED AS IVS HERE + proverDataToBytes(proverData), + ivsAndProverEnclaveCombined, // USED AS IVS HERE matchingEngineEnclave, - ivsAndGeneratorEnclaveCombined, // USED AS GENERATOR HERE - minRewardByGenerator, - generatorComputeAllocation, + ivsAndProverEnclaveCombined, // USED AS GENERATOR HERE + minRewardByProver, + proverComputeAllocation, computeGivenToNewMarket, godEnclave, ); proofMarketplace = data.proofMarketplace; - generatorRegistry = data.generatorRegistry; + proverManager = data.proverManager; tokenToUse = data.mockToken; priorityLog = data.priorityLog; errorLibrary = data.errorLibrary; entityKeyRegistry = data.entityKeyRegistry; + attestationVerifier = data.attestationVerifier; + stakingManager = data.stakingManager; + nativeStaking = data.nativeStaking; + symbioticStaking = data.symbioticStaking; + symbioticStakingReward = data.symbioticStakingReward; marketId = new BigNumber((await proofMarketplace.marketCounter()).toString()).minus(1).toFixed(); - let marketActivationDelay = await proofMarketplace.MARKET_ACTIVATION_DELAY(); - await skipBlocks(ethers, new BigNumber(marketActivationDelay.toString()).toNumber()); + // let marketActivationDelay = await proofMarketplace.MARKET_ACTIVATION_DELAY(); + // await skipBlocks(ethers, new BigNumber(marketActivationDelay.toString()).toNumber()); }); - it("Add new images for generators and ivs", async () => { - const newGeneratorImages = [MockEnclave.someRandomPcrs(), MockEnclave.someRandomPcrs(), MockEnclave.someRandomPcrs()].map( + it("Add new images for provers and ivs", async () => { + const newProverImages = [MockEnclave.someRandomPcrs(), MockEnclave.someRandomPcrs(), MockEnclave.someRandomPcrs()].map( (a) => new MockEnclave(a), ); @@ -187,17 +207,18 @@ describe("Checking Case where generator and ivs image is same", () => { proofMarketplace, "OnlyMarketCreator", ); - await expect(proofMarketplace.connect(marketCreator).addExtraImages(marketId, [], [])).to.not.be.reverted; - - await proofMarketplace.connect(marketCreator).addExtraImages( - marketId, - newGeneratorImages.map((a) => a.getPcrRlp()), - newIvsImages.map((a) => a.getPcrRlp()), - ); - for (let index = 0; index < newGeneratorImages.length; index++) { - const generator = newGeneratorImages[index]; - const isAllowed = await entityKeyRegistry.isImageInFamily(generator.getImageId(), generatorFamilyId(marketId)); + await expect( + proofMarketplace.connect(marketCreator).addExtraImages( + marketId, + newProverImages.map((a) => a.getPcrRlp()), + newIvsImages.map((a) => a.getPcrRlp()), + ), + ).to.not.be.reverted; + + for (let index = 0; index < newProverImages.length; index++) { + const prover = newProverImages[index]; + const isAllowed = await entityKeyRegistry.isImageInFamily(prover.getImageId(), proverFamilyId(marketId)); expect(isAllowed).is.true; } @@ -209,18 +230,18 @@ describe("Checking Case where generator and ivs image is same", () => { }); it("Check events during adding and removing extra images", async () => { - const newGenerator = new MockEnclave(MockEnclave.someRandomPcrs()); + const newProver = new MockEnclave(MockEnclave.someRandomPcrs()); const newIvs = new MockEnclave(MockEnclave.someRandomPcrs()); - await expect(proofMarketplace.connect(marketCreator).addExtraImages(marketId, [newGenerator.getPcrRlp()], [newIvs.getPcrRlp()])) + await expect(proofMarketplace.connect(marketCreator).addExtraImages(marketId, [newProver.getPcrRlp()], [newIvs.getPcrRlp()])) .to.emit(proofMarketplace, "AddExtraProverImage") - .withArgs(marketId, newGenerator.getImageId()) + .withArgs(marketId, newProver.getImageId()) .to.emit(proofMarketplace, "AddExtraIVSImage") .withArgs(marketId, newIvs.getImageId()); - await expect(proofMarketplace.connect(marketCreator).removeExtraImages(marketId, [newGenerator.getPcrRlp()], [newIvs.getPcrRlp()])) + await expect(proofMarketplace.connect(marketCreator).removeExtraImages(marketId, [newProver.getPcrRlp()], [newIvs.getPcrRlp()])) .to.emit(proofMarketplace, "RemoveExtraProverImage") - .withArgs(marketId, newGenerator.getImageId()) + .withArgs(marketId, newProver.getImageId()) .to.emit(proofMarketplace, "RemoveExtraIVSImage") .withArgs(marketId, newIvs.getImageId()); }); @@ -232,15 +253,15 @@ describe("Checking Case where generator and ivs image is same", () => { ); await expect( - proofMarketplace.connect(marketCreator).removeExtraImages(marketId, [ivsAndGeneratorEnclaveCombined.getPcrRlp()], []), + proofMarketplace.connect(marketCreator).removeExtraImages(marketId, [ivsAndProverEnclaveCombined.getPcrRlp()], []), ).to.revertedWithCustomError(proofMarketplace, "CannotRemoveDefaultImageFromMarket"); await expect( - proofMarketplace.connect(marketCreator).removeExtraImages(marketId, [], [ivsAndGeneratorEnclaveCombined.getPcrRlp()]), + proofMarketplace.connect(marketCreator).removeExtraImages(marketId, [], [ivsAndProverEnclaveCombined.getPcrRlp()]), ).to.revertedWithCustomError(proofMarketplace, "CannotRemoveDefaultImageFromMarket"); }); describe("Submit Proof For invalid request", () => { - let askId: string; + let bidId: string; const updateIvsKey = async (ivsEnclave: MockEnclave) => { // use any enclave here as AV is mocked let ivsAttestationBytes = await ivsEnclave.getVerifiedAttestation(godEnclave); // means ivs should get verified attestation from noUseEnclave @@ -254,17 +275,19 @@ describe("Checking Case where generator and ivs image is same", () => { let signature = await ivsEnclave.signMessage(ethers.getBytes(digest)); // use any enclave to get verfied attestation as mockAttesationVerifier is used here - await expect(generatorRegistry.connect(generator).addIvsKey(marketId, ivsAttestationBytes, signature)) - .to.emit(generatorRegistry, "AddIvsKey") + await expect(proverManager.connect(generator).addIvsKey(marketId, ivsAttestationBytes, signature)) + .to.emit(proverManager, "IvKeyAdded") .withArgs(marketId, ivsEnclave.getAddress()); }; beforeEach(async () => { + const latestBlock = await ethers.provider.getBlock("latest"); + const blockTimestamp = latestBlock?.timestamp ?? 0; + let abiCoder = new ethers.AbiCoder(); let assignmentExpiry = 100; // in blocks - let timeTakenForProofGeneration = 100000000; // keep a large number, but only for tests - let maxTimeForProofGeneration = 10000; // in blocks - const latestBlock = await ethers.provider.getBlockNumber(); + let timeForProofGeneration = 10000; // keep a large number, but only for tests + let maxTimeForProofGeneration = 24 * 60 * 60; // 1 day let inputBytes = abiCoder.encode( ["uint256[5]"], @@ -279,25 +302,30 @@ describe("Checking Case where generator and ivs image is same", () => { ], ); - askId = await setup.createAsk( + bidId = await setup.createBid( prover, tokenHolder, { marketId, proverData: inputBytes, reward: rewardForProofGeneration.toFixed(), - expiry: assignmentExpiry + latestBlock, - timeTakenForProofGeneration, - deadline: latestBlock + maxTimeForProofGeneration, + expiry: (assignmentExpiry + blockTimestamp).toString(), + timeForProofGeneration: timeForProofGeneration.toString(), + deadline: (blockTimestamp + maxTimeForProofGeneration).toString(), refundAddress: await prover.getAddress(), }, { mockToken: tokenToUse, proofMarketplace, - generatorRegistry, + proverManager, priorityLog, errorLibrary, entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, }, 1, ); @@ -308,83 +336,87 @@ describe("Checking Case where generator and ivs image is same", () => { { mockToken: tokenToUse, proofMarketplace, - generatorRegistry, + proverManager, priorityLog, errorLibrary, entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, }, - askId, + bidId, generator, ); }); - it("Submit proof for invalid requests directly from generator", async () => { - const askData = await proofMarketplace.listOfAsk(askId); + it("Submit proof for invalid requests directly from prover", async () => { + const bidData = await proofMarketplace.listOfBid(bidId); const types = ["uint256", "bytes"]; - const values = [askId, askData.ask.proverData]; + const values = [bidId, bidData.bid.proverData]; const abicode = new ethers.AbiCoder(); const encoded = abicode.encode(types, values); const digest = ethers.keccak256(encoded); - const signature = await ivsAndGeneratorEnclaveCombined.signMessage(ethers.getBytes(digest)); + const signature = await ivsAndProverEnclaveCombined.signMessage(ethers.getBytes(digest)); - await proofMarketplace.flush(await treasury.getAddress()); // remove anything if is already there + // TODO + // await proofMarketplace.flush(await treasury.getAddress()); // remove anything if is already there - await expect(proofMarketplace.submitProofForInvalidInputs(askId, signature)).to.emit(proofMarketplace, "InvalidInputsDetected"); + await expect(proofMarketplace.submitProofForInvalidInputs(bidId, signature)).to.emit(proofMarketplace, "InvalidInputsDetected"); }); it("Submit proof for invalid requests directly from new generators added by market maker", async () => { - const newGeneratorImage = new MockEnclave(MockEnclave.someRandomPcrs()); + const newProverImage = new MockEnclave(MockEnclave.someRandomPcrs()); await proofMarketplace .connect(marketCreator) - .addExtraImages(marketId, [newGeneratorImage.getPcrRlp()], [newGeneratorImage.getPcrRlp()]); + .addExtraImages(marketId, [newProverImage.getPcrRlp()], [newProverImage.getPcrRlp()]); - await updateIvsKey(newGeneratorImage); + await updateIvsKey(newProverImage); - const askData = await proofMarketplace.listOfAsk(askId); + const bidData = await proofMarketplace.listOfBid(bidId); const types = ["uint256", "bytes"]; - const values = [askId, askData.ask.proverData]; + const values = [bidId, bidData.bid.proverData]; const abicode = new ethers.AbiCoder(); const encoded = abicode.encode(types, values); const digest = ethers.keccak256(encoded); - const signature = await newGeneratorImage.signMessage(ethers.getBytes(digest)); - - await proofMarketplace.flush(await treasury.getAddress()); // remove anything if is already there + const signature = await newProverImage.signMessage(ethers.getBytes(digest)); - await expect(proofMarketplace.submitProofForInvalidInputs(askId, signature)).to.emit(proofMarketplace, "InvalidInputsDetected"); + await expect(proofMarketplace.submitProofForInvalidInputs(bidId, signature)).to.emit(proofMarketplace, "InvalidInputsDetected"); }); - it("Should fail to ecies key when the generator image is not added by market creator", async () => { - const newGeneratorImage = new MockEnclave(MockEnclave.someRandomPcrs()); - let generatorAttestationBytes = await newGeneratorImage.getVerifiedAttestation(godEnclave); + it("Should fail to ecies key when the prover image is not added by market creator", async () => { + const newProverImage = new MockEnclave(MockEnclave.someRandomPcrs()); + let proverAttestationBytes = await newProverImage.getVerifiedAttestation(godEnclave); let types = ["bytes", "address"]; - let values = [generatorAttestationBytes, await generator.getAddress()]; + let values = [proverAttestationBytes, await prover.getAddress()]; let abicode = new ethers.AbiCoder(); let encoded = abicode.encode(types, values); let digest = ethers.keccak256(encoded); - let signature = await newGeneratorImage.signMessage(ethers.getBytes(digest)); + let signature = await newProverImage.signMessage(ethers.getBytes(digest)); await expect( - generatorRegistry.connect(generator).updateEncryptionKey(marketId, generatorAttestationBytes, signature), - ).to.be.revertedWithCustomError(generatorRegistry, "IncorrectImageId"); + proverManager.connect(generator).updateEncryptionKey(marketId, proverAttestationBytes, signature), + ).to.be.revertedWithCustomError(proverManager, "IncorrectImageId"); }); it("Can't add same extra image twice", async () => { - const newGeneratorImage = new MockEnclave(MockEnclave.someRandomPcrs()); + const newProverImage = new MockEnclave(MockEnclave.someRandomPcrs()); await proofMarketplace .connect(marketCreator) - .addExtraImages(marketId, [newGeneratorImage.getPcrRlp()], [newGeneratorImage.getPcrRlp()]); + .addExtraImages(marketId, [newProverImage.getPcrRlp()], [newProverImage.getPcrRlp()]); await expect( - proofMarketplace.connect(marketCreator).addExtraImages(marketId, [newGeneratorImage.getPcrRlp()], [newGeneratorImage.getPcrRlp()]), + proofMarketplace.connect(marketCreator).addExtraImages(marketId, [newProverImage.getPcrRlp()], [newProverImage.getPcrRlp()]), ) .to.be.revertedWithCustomError(proofMarketplace, "ImageAlreadyInFamily") - .withArgs(newGeneratorImage.getImageId(), generatorFamilyId(marketId)); + .withArgs(newProverImage.getImageId(), proverFamilyId(marketId)); }); it("Can't add same extra ivs image twice", async () => { @@ -396,24 +428,24 @@ describe("Checking Case where generator and ivs image is same", () => { .withArgs(newIvsImage.getImageId(), ivsFamilyId(marketId)); }); - it("Update Ecies key when the generator image is updated", async () => { - const newGeneratorImage = new MockEnclave(MockEnclave.someRandomPcrs()); + it("Update Ecies key when the prover image is updated", async () => { + const newProverImage = new MockEnclave(MockEnclave.someRandomPcrs()); await proofMarketplace .connect(marketCreator) - .addExtraImages(marketId, [newGeneratorImage.getPcrRlp()], [newGeneratorImage.getPcrRlp()]); + .addExtraImages(marketId, [newProverImage.getPcrRlp()], [newProverImage.getPcrRlp()]); - let generatorAttestationBytes = await newGeneratorImage.getVerifiedAttestation(godEnclave); + let proverAttestationBytes = await newProverImage.getVerifiedAttestation(godEnclave); let types = ["bytes", "address"]; - let values = [generatorAttestationBytes, await generator.getAddress()]; + let values = [proverAttestationBytes, await generator.getAddress()]; let abicode = new ethers.AbiCoder(); let encoded = abicode.encode(types, values); let digest = ethers.keccak256(encoded); - let signature = await newGeneratorImage.signMessage(ethers.getBytes(digest)); + let signature = await newProverImage.signMessage(ethers.getBytes(digest)); - await expect(generatorRegistry.connect(generator).updateEncryptionKey(marketId, generatorAttestationBytes, signature)) + await expect(proverManager.connect(generator).updateEncryptionKey(marketId, proverAttestationBytes, signature)) .to.emit(entityKeyRegistry, "UpdateKey") .withArgs(await generator.getAddress(), marketId); }); @@ -427,28 +459,30 @@ describe("Checking Case where generator and ivs image is same", () => { }); it("Submit proof for invalid requests directly from if only new ivs added by market maker", async () => { - const askData = await proofMarketplace.listOfAsk(askId); + const bidData = await proofMarketplace.listOfBid(bidId); const types = ["uint256", "bytes"]; - const values = [askId, askData.ask.proverData]; + const values = [bidId, bidData.bid.proverData]; const abicode = new ethers.AbiCoder(); const encoded = abicode.encode(types, values); const digest = ethers.keccak256(encoded); const signature = await newIvsImage.signMessage(ethers.getBytes(digest)); - await proofMarketplace.flush(await treasury.getAddress()); // remove anything if is already there + // TODO + // await proofMarketplace.flush(await treasury.getAddress()); // remove anything if is already there - await expect(proofMarketplace.submitProofForInvalidInputs(askId, signature)).to.emit(proofMarketplace, "InvalidInputsDetected"); + await expect(proofMarketplace.submitProofForInvalidInputs(bidId, signature)).to.emit(proofMarketplace, "InvalidInputsDetected"); }); it("Should Fail: can't submit proofs if signature os invalid", async () => { const signature = "0x0000111100001111000011110000111100001111000011110000111100001111000011110000111100001111000011110000111100001111000011110000ddddff"; - await proofMarketplace.flush(await treasury.getAddress()); // remove anything if is already there + // TODO + // await proofMarketplace.flush(await treasury.getAddress()); // remove anything if is already there - await expect(proofMarketplace.submitProofForInvalidInputs(askId, signature)).to.revertedWithCustomError( + await expect(proofMarketplace.submitProofForInvalidInputs(bidId, signature)).to.revertedWithCustomError( proofMarketplace, "ECDSAInvalidSignature", ); @@ -459,19 +493,20 @@ describe("Checking Case where generator and ivs image is same", () => { .to.emit(entityKeyRegistry, "EnclaveImageRemovedFromFamily") .withArgs(newIvsImage.getImageId(), ivsFamilyId(marketId)); - const askData = await proofMarketplace.listOfAsk(askId); + const bidData = await proofMarketplace.listOfBid(bidId); const types = ["uint256", "bytes"]; - const values = [askId, askData.ask.proverData]; + const values = [bidId, bidData.bid.proverData]; const abicode = new ethers.AbiCoder(); const encoded = abicode.encode(types, values); const digest = ethers.keccak256(encoded); const signature = await newIvsImage.signMessage(ethers.getBytes(digest)); - await proofMarketplace.flush(await treasury.getAddress()); // remove anything if is already there + // TODO + // await proofMarketplace.flush(await treasury.getAddress()); // remove anything if is already there - await expect(proofMarketplace.submitProofForInvalidInputs(askId, signature)).to.revertedWithCustomError( + await expect(proofMarketplace.submitProofForInvalidInputs(bidId, signature)).to.revertedWithCustomError( entityKeyRegistry, "AttestationAutherImageNotInFamily", ); diff --git a/test/ProofMarketPlaceBasic.ts b/test/ProofMarketPlaceBasic.ts index 6e995b6..197c1f0 100644 --- a/test/ProofMarketPlaceBasic.ts +++ b/test/ProofMarketPlaceBasic.ts @@ -1,12 +1,31 @@ +import { BigNumber } from "bignumber.js"; import { expect } from "chai"; -import { ethers, upgrades } from "hardhat"; import { Signer } from "ethers"; -import { BigNumber } from "bignumber.js"; import { + ethers, + upgrades, +} from "hardhat"; + +import { mine } from "@nomicfoundation/hardhat-network-helpers"; + +import { + BridgeEnclavePCRS, + bytesToHexString, + generateRandomBytes, + GodEnclavePCRS, + matchingEngineFamilyId, + MockEnclave, + MockIVSPCRS, + MockMEPCRS, + MockProverPCRS, + skipBlocks, +} from "../helpers"; +import { + Dispute__factory, + EntityKeyRegistry, + EntityKeyRegistry__factory, Error, Error__factory, - GeneratorRegistry, - GeneratorRegistry__factory, MockAttestationVerifier__factory, MockToken, MockToken__factory, @@ -14,43 +33,34 @@ import { MockVerifier__factory, ProofMarketplace, ProofMarketplace__factory, - EntityKeyRegistry__factory, - Dispute__factory, - EntityKeyRegistry, + ProverManager, + ProverManager__factory, + StakingManager, + StakingManager__factory, + SymbioticStaking, + SymbioticStaking__factory, + SymbioticStakingReward, + SymbioticStakingReward__factory, } from "../typechain-types"; -import { - GodEnclavePCRS, - MockEnclave, - MockGeneratorPCRS, - MockIVSPCRS, - MockMEPCRS, - bytesToHexString, - generateRandomBytes, - matchingEngineFamilyId, - skipBlocks, -} from "../helpers"; - -import { mine } from "@nomicfoundation/hardhat-network-helpers"; - describe("Proof market place", () => { let signers: Signer[]; let admin: Signer; let tokenHolder: Signer; let treasury: Signer; let marketCreator: Signer; - let mockToken: MockToken; let tokenSupply: BigNumber = new BigNumber(10).pow(24).multipliedBy(4); let marketCreationCost: BigNumber = new BigNumber(10).pow(20).multipliedBy(5); + let proverStakingAmount = new BigNumber(10).pow(21).multipliedBy(6); + let minRewardForProver = new BigNumber(10).pow(18).multipliedBy(100); - let generatorStakingAmount = new BigNumber(10).pow(21).multipliedBy(6); - - let minRewardForGenerator = new BigNumber(10).pow(18).multipliedBy(100); - + let stakingManager: StakingManager; + let symbioticStaking: SymbioticStaking; + let symbioticStakingReward: SymbioticStakingReward; let proofMarketplace: ProofMarketplace; - let generatorRegistry: GeneratorRegistry; + let proverManager: ProverManager; let entityRegistry: EntityKeyRegistry; let mockVerifier: MockVerifier; @@ -61,7 +71,7 @@ describe("Proof market place", () => { const matchingEngineEnclave = new MockEnclave(MockMEPCRS); const ivsEnclave = new MockEnclave(MockIVSPCRS); - + const bridgeEnclave = new MockEnclave(BridgeEnclavePCRS); let matchingEngineSigner: Signer; beforeEach(async () => { @@ -87,24 +97,38 @@ describe("Proof market place", () => { }); entityRegistry = EntityKeyRegistry__factory.connect(await _entityKeyRegistry.getAddress(), admin); - const GeneratorRegistryContract = await ethers.getContractFactory("GeneratorRegistry"); - const generatorProxy = await upgrades.deployProxy(GeneratorRegistryContract, [], { + const StakingManager = await ethers.getContractFactory("StakingManager"); + const _stakingManager = await upgrades.deployProxy(StakingManager, [], { kind: "uups", - constructorArgs: [await mockToken.getAddress(), await entityRegistry.getAddress()], initializer: false, }); - generatorRegistry = GeneratorRegistry__factory.connect(await generatorProxy.getAddress(), signers[0]); + stakingManager = StakingManager__factory.connect(await _stakingManager.getAddress(), admin); + + const ProverManagerContract = await ethers.getContractFactory("ProverManager"); + const proverProxy = await upgrades.deployProxy(ProverManagerContract, [], { + kind: "uups", + initializer: false, + }); + proverManager = ProverManager__factory.connect(await proverProxy.getAddress(), signers[0]); + + const SymbioticStaking = await ethers.getContractFactory("SymbioticStaking"); + const _symbioticStaking = await upgrades.deployProxy(SymbioticStaking, [], { + kind: "uups", + initializer: false, + }); + symbioticStaking = SymbioticStaking__factory.connect(await _symbioticStaking.getAddress(), admin); + + const SymbioticStakingReward = await ethers.getContractFactory("SymbioticStakingReward"); + const _symbioticStakingReward = await upgrades.deployProxy(SymbioticStakingReward, [], { + kind: "uups", + initializer: false, + }); + symbioticStakingReward = SymbioticStakingReward__factory.connect(await _symbioticStakingReward.getAddress(), admin); const ProofMarketplace = await ethers.getContractFactory("ProofMarketplace"); const proxy = await upgrades.deployProxy(ProofMarketplace, [], { kind: "uups", - constructorArgs: [ - await mockToken.getAddress(), - marketCreationCost.toString(), - await treasury.getAddress(), - await generatorRegistry.getAddress(), - await entityRegistry.getAddress(), - ], + constructorArgs: [], initializer: false, }); @@ -112,17 +136,54 @@ describe("Proof market place", () => { const dispute = await new Dispute__factory(admin).deploy(await entityRegistry.getAddress()); - await generatorRegistry.initialize(await admin.getAddress(), await proofMarketplace.getAddress()); - await proofMarketplace.initialize(await admin.getAddress()); + await stakingManager.initialize( + await admin.getAddress(), + await proofMarketplace.getAddress(), + await proverManager.getAddress(), + await symbioticStaking.getAddress(), + await mockToken.getAddress(), + ); + await stakingManager.grantRole(await stakingManager.PROVER_MANAGER_ROLE(), await proverManager.getAddress()); + await symbioticStaking.initialize( + await admin.getAddress(), + await mockAttestationVerifier.getAddress(), + await proofMarketplace.getAddress(), + await stakingManager.getAddress(), + await symbioticStakingReward.getAddress(), + ); + await symbioticStakingReward.initialize( + await admin.getAddress(), + await proofMarketplace.getAddress(), + await symbioticStaking.getAddress(), + await mockToken.getAddress(), + ); + await proverManager.initialize( + await admin.getAddress(), + await proofMarketplace.getAddress(), + await stakingManager.getAddress(), + await entityRegistry.getAddress(), + ); + await proofMarketplace.initialize( + await admin.getAddress(), + await mockToken.getAddress(), + await treasury.getAddress(), + await proverManager.getAddress(), + await entityRegistry.getAddress(), + marketCreationCost.toFixed(), + ); expect(ethers.isAddress(await proofMarketplace.getAddress())).is.true; await mockToken.connect(tokenHolder).transfer(await marketCreator.getAddress(), marketCreationCost.toFixed()); await entityRegistry.connect(admin).grantRole(await entityRegistry.KEY_REGISTER_ROLE(), await proofMarketplace.getAddress()); - await entityRegistry.connect(admin).grantRole(await entityRegistry.KEY_REGISTER_ROLE(), await generatorRegistry.getAddress()); + await entityRegistry.connect(admin).grantRole(await entityRegistry.KEY_REGISTER_ROLE(), await proverManager.getAddress()); await proofMarketplace.connect(admin).grantRole(await proofMarketplace.UPDATER_ROLE(), await admin.getAddress()); + await proofMarketplace.connect(admin).grantRole(await proofMarketplace.SYMBIOTIC_STAKING_ROLE(), await symbioticStaking.getAddress()); + await proofMarketplace + .connect(admin) + .grantRole(await proofMarketplace.SYMBIOTIC_STAKING_REWARD_ROLE(), await symbioticStakingReward.getAddress()); }); it("Create Market", async () => { @@ -132,15 +193,14 @@ describe("Proof market place", () => { await mockToken.connect(marketCreator).approve(await proofMarketplace.getAddress(), marketCreationCost.toFixed()); - const mockGenerator = new MockEnclave(MockGeneratorPCRS); + const mockProver = new MockEnclave(MockProverPCRS); const tx = proofMarketplace .connect(marketCreator) - .createMarketplace( + .createMarket( marketBytes, await mockVerifier.getAddress(), - penaltyForNotComputingProof, - mockGenerator.getPcrRlp(), + mockProver.getPcrRlp(), ivsEnclave.getPcrRlp(), ); @@ -148,7 +208,7 @@ describe("Proof market place", () => { .to.emit(proofMarketplace, "MarketplaceCreated") .withArgs(marketId) .to.emit(entityRegistry, "EnclaveImageWhitelisted") - .withArgs(mockGenerator.getImageId(), ...mockGenerator.pcrs) + .withArgs(mockProver.getImageId(), ...mockProver.pcrs) .to.emit(entityRegistry, "EnclaveImageWhitelisted") .withArgs(ivsEnclave.getImageId(), ...ivsEnclave.pcrs); @@ -158,20 +218,19 @@ describe("Proof market place", () => { describe("Public Market", () => { let marketBytes: string; let marketId: string; - let mockGenerator: MockEnclave; + let mockProver: MockEnclave; beforeEach(async () => { marketBytes = "0x" + bytesToHexString(await generateRandomBytes(1024 * 10)); // 10 MB marketId = new BigNumber((await proofMarketplace.marketCounter()).toString()).toFixed(); await mockToken.connect(marketCreator).approve(await proofMarketplace.getAddress(), marketCreationCost.toFixed()); - mockGenerator = new MockEnclave(); // pcrs will be 00 + mockProver = new MockEnclave(); // pcrs will be 00 const tx = proofMarketplace .connect(marketCreator) - .createMarketplace( + .createMarket( marketBytes, await mockVerifier.getAddress(), - penaltyForNotComputingProof, - mockGenerator.getPcrRlp(), + mockProver.getPcrRlp(), ivsEnclave.getPcrRlp(), ); @@ -188,13 +247,13 @@ describe("Proof market place", () => { it("cant add any provers to public markets as it is not an enclave", async () => { await expect( - proofMarketplace.connect(marketCreator).addExtraImages(marketId, [mockGenerator.getPcrRlp()], []), + proofMarketplace.connect(marketCreator).addExtraImages(marketId, [mockProver.getPcrRlp()], []), ).to.revertedWithCustomError(proofMarketplace, "CannotModifyImagesForPublicMarkets"); }); it("IVS must be an enclave", async () => { await expect( - proofMarketplace.connect(marketCreator).addExtraImages(marketId, [], [mockGenerator.getPcrRlp()]), + proofMarketplace.connect(marketCreator).addExtraImages(marketId, [], [mockProver.getPcrRlp()]), ).to.revertedWithCustomError(entityRegistry, "MustBeAnEnclave"); }); }); @@ -204,23 +263,22 @@ describe("Proof market place", () => { await mockToken.connect(marketCreator).approve(await proofMarketplace.getAddress(), marketCreationCost.toFixed()); - const mockGenerator = new MockEnclave(MockGeneratorPCRS); + const mockProver = new MockEnclave(MockProverPCRS); const non_enclave_ivs = new MockEnclave(); const tx = proofMarketplace .connect(marketCreator) - .createMarketplace( + .createMarket( marketBytes, await mockVerifier.getAddress(), - penaltyForNotComputingProof, - mockGenerator.getPcrRlp(), + mockProver.getPcrRlp(), non_enclave_ivs.getPcrRlp(), ); await expect(tx).to.revertedWithCustomError(entityRegistry, "MustBeAnEnclave").withArgs(non_enclave_ivs.getImageId()); }); - it("Can't create a marketplace if generator/ivs enclave is blacklisted", async () => { + it("Can't create a marketplace if prover/ivs enclave is blacklisted", async () => { await entityRegistry.connect(admin).grantRole(await entityRegistry.MODERATOR_ROLE(), await admin.getAddress()); await entityRegistry.connect(admin).blacklistImage(ivsEnclave.getImageId()); @@ -228,37 +286,35 @@ describe("Proof market place", () => { await mockToken.connect(marketCreator).approve(await proofMarketplace.getAddress(), marketCreationCost.toFixed()); - const tempGenerator = new MockEnclave(MockGeneratorPCRS); + const tempProver = new MockEnclave(MockProverPCRS); await expect( proofMarketplace .connect(marketCreator) - .createMarketplace( + .createMarket( marketBytes, await mockVerifier.getAddress(), - penaltyForNotComputingProof, - tempGenerator.getPcrRlp(), + tempProver.getPcrRlp(), ivsEnclave.getPcrRlp(), ), ) .to.be.revertedWithCustomError(entityRegistry, "BlacklistedImage") .withArgs(ivsEnclave.getImageId()); - await entityRegistry.connect(admin).blacklistImage(tempGenerator.getImageId()); + await entityRegistry.connect(admin).blacklistImage(tempProver.getImageId()); await expect( proofMarketplace .connect(marketCreator) - .createMarketplace( + .createMarket( marketBytes, await mockVerifier.getAddress(), - penaltyForNotComputingProof, - tempGenerator.getPcrRlp(), + tempProver.getPcrRlp(), ivsEnclave.getPcrRlp(), ), ) .to.be.revertedWithCustomError(entityRegistry, "BlacklistedImage") - .withArgs(tempGenerator.getImageId()); + .withArgs(tempProver.getImageId()); }); it("Update Marketplace address", async () => { @@ -302,13 +358,13 @@ describe("Proof market place", () => { ); }); - describe("Ask: Private Market", () => { + describe("Bid: Private Market", () => { let prover: Signer; let reward = new BigNumber(10).pow(20).multipliedBy(3); let marketId: string; let assignmentExpiry = 100; // in blocks - let timeTakenForProofGeneration = 1000; // in blocks + let timeForProofGeneration = 1000; // in blocks let maxTimeForProofGeneration = 10000; // in blocks beforeEach(async () => { @@ -323,31 +379,32 @@ describe("Proof market place", () => { await proofMarketplace .connect(marketCreator) - .createMarketplace( + .createMarket( marketBytes, await mockVerifier.getAddress(), - penaltyForNotComputingProof, - new MockEnclave(MockGeneratorPCRS).getPcrRlp(), + new MockEnclave(MockProverPCRS).getPcrRlp(), ivsEnclave.getPcrRlp(), ); - let marketActivationDelay = await proofMarketplace.MARKET_ACTIVATION_DELAY(); - await skipBlocks(ethers, new BigNumber(marketActivationDelay.toString()).toNumber()); + // let marketActivationDelay = await proofMarketplace.MARKET_ACTIVATION_DELAY(); + // const ONE_DAY_IN_BLOCKS = 24 * 60 * 60; + // await skipBlocks(ethers, ONE_DAY_IN_BLOCKS); }); - it("Create Ask Request", async () => { - const latestBlock = await ethers.provider.getBlockNumber(); + it("Create Bid Request", async () => { + const latestBlock = await ethers.provider.getBlock("latest"); + const blockTimestamp = latestBlock?.timestamp ?? 0; - const askIdToBeGenerated = await proofMarketplace.askCounter(); + const bidIdToBeGenerated = await proofMarketplace.bidCounter(); const proverBytes = "0x" + bytesToHexString(await generateRandomBytes(1024 * 1)); // 1 MB - const askRequest = { + const bidRequest = { marketId, proverData: proverBytes, reward: reward.toFixed(), - expiry: assignmentExpiry + latestBlock, - timeTakenForProofGeneration, - deadline: latestBlock + maxTimeForProofGeneration, + expiry: (assignmentExpiry + blockTimestamp).toString(), + timeForProofGeneration: timeForProofGeneration.toString(), + deadline: (blockTimestamp + maxTimeForProofGeneration).toString(), refundAddress: await prover.getAddress(), }; @@ -357,29 +414,29 @@ describe("Proof market place", () => { await proofMarketplace.connect(admin).grantRole(await proofMarketplace.UPDATER_ROLE(), await admin.getAddress()); await proofMarketplace.connect(admin).updateCostPerBytes(1, 1000); - const platformFee = await proofMarketplace.getPlatformFee(1, askRequest, secretInfo, aclInfo); + const platformFee = await proofMarketplace.getPlatformFee(1, bidRequest, secretInfo, aclInfo); await mockToken.connect(tokenHolder).transfer(await prover.getAddress(), platformFee); await mockToken .connect(prover) .approve(await proofMarketplace.getAddress(), new BigNumber(platformFee.toString()).plus(reward).toFixed()); - await expect(proofMarketplace.connect(prover).createAsk(askRequest, 1, secretInfo, aclInfo, "0x")) - .to.emit(proofMarketplace, "AskCreated") - .withArgs(askIdToBeGenerated, true, "0x2345", "0x21", "0x") + await expect(proofMarketplace.connect(prover).createBid(bidRequest, 1, secretInfo, aclInfo, "0x")) + .to.emit(proofMarketplace, "BidCreated") + .withArgs(bidIdToBeGenerated, true, "0x2345", "0x21", "0x") .to.emit(mockToken, "Transfer") .withArgs(await prover.getAddress(), await proofMarketplace.getAddress(), new BigNumber(platformFee.toString()).plus(reward)); - expect((await proofMarketplace.listOfAsk(askIdToBeGenerated)).state).to.equal(1); // 1 means create state + expect((await proofMarketplace.listOfBid(bidIdToBeGenerated)).state).to.equal(1); // 1 means create state }); }); - describe("Ask: Public Market", () => { + describe("Bid: Public Market", () => { let prover: Signer; let reward = new BigNumber(10).pow(20).multipliedBy(3); let marketId: string; let assignmentExpiry = 100; // in blocks - let timeTakenForProofGeneration = 1000; // in blocks + let timeForProofGeneration = 1000; // in blocks let maxTimeForProofGeneration = 10000; // in blocks const computeUnitsRequired = 100; // temporary absolute number @@ -394,31 +451,31 @@ describe("Proof market place", () => { await mockToken.connect(marketCreator).approve(await proofMarketplace.getAddress(), marketCreationCost.toFixed()); - await proofMarketplace.connect(marketCreator).createMarketplace( + await proofMarketplace.connect(marketCreator).createMarket( marketBytes, await mockVerifier.getAddress(), - penaltyForNotComputingProof, new MockEnclave().getPcrRlp(), // no pcrs means not enclave ivsEnclave.getPcrRlp(), ); - let marketActivationDelay = await proofMarketplace.MARKET_ACTIVATION_DELAY(); - await skipBlocks(ethers, new BigNumber(marketActivationDelay.toString()).toNumber()); + // let marketActivationDelay = await proofMarketplace.MARKET_ACTIVATION_DELAY(); + // await skipBlocks(ethers, new BigNumber(marketActivationDelay.toString()).toNumber()); }); - it("Create Ask Request", async () => { - const latestBlock = await ethers.provider.getBlockNumber(); + it("Create Bid Request", async () => { + const latestBlock = await ethers.provider.getBlock("latest"); + const blockTimestamp = latestBlock?.timestamp ?? 0; - const askIdToBeGenerated = await proofMarketplace.askCounter(); + const bidIdToBeGenerated = await proofMarketplace.bidCounter(); const proverBytes = "0x" + bytesToHexString(await generateRandomBytes(1024 * 1)); // 1 MB - const askRequest = { + const bidRequest = { marketId, proverData: proverBytes, reward: reward.toFixed(), - expiry: assignmentExpiry + latestBlock, - timeTakenForProofGeneration, - deadline: latestBlock + maxTimeForProofGeneration, + expiry: (assignmentExpiry + blockTimestamp).toString(), + timeForProofGeneration: timeForProofGeneration.toString(), + deadline: (blockTimestamp + maxTimeForProofGeneration).toString(), refundAddress: await prover.getAddress(), }; @@ -428,40 +485,41 @@ describe("Proof market place", () => { await proofMarketplace.connect(admin).grantRole(await proofMarketplace.UPDATER_ROLE(), await admin.getAddress()); await proofMarketplace.connect(admin).updateCostPerBytes(1, 1000); - const platformFee = await proofMarketplace.getPlatformFee(1, askRequest, secretInfo, aclInfo); + const platformFee = await proofMarketplace.getPlatformFee(1, bidRequest, secretInfo, aclInfo); await mockToken.connect(tokenHolder).transfer(await prover.getAddress(), platformFee); await mockToken .connect(prover) .approve(await proofMarketplace.getAddress(), new BigNumber(platformFee.toString()).plus(reward).toFixed()); - await expect(proofMarketplace.connect(prover).createAsk(askRequest, 1, secretInfo, aclInfo, "0x")) - .to.emit(proofMarketplace, "AskCreated") - .withArgs(askIdToBeGenerated, false, "0x", "0x", "0x") + await expect(proofMarketplace.connect(prover).createBid(bidRequest, 1, secretInfo, aclInfo, "0x")) + .to.emit(proofMarketplace, "BidCreated") + .withArgs(bidIdToBeGenerated, false, "0x", "0x", "0x") .to.emit(mockToken, "Transfer") .withArgs(await prover.getAddress(), await proofMarketplace.getAddress(), new BigNumber(platformFee.toString()).plus(reward)); - expect((await proofMarketplace.listOfAsk(askIdToBeGenerated)).state).to.equal(1); // 1 means create state + expect((await proofMarketplace.listOfBid(bidIdToBeGenerated)).state).to.equal(1); // 1 means create state }); it("Should Fail: when try creating market in invalid market", async () => { await mockToken.connect(prover).approve(await proofMarketplace.getAddress(), reward.toFixed()); const proverBytes = "0x" + bytesToHexString(await generateRandomBytes(1024 * 1)); // 1 MB - const latestBlock = await ethers.provider.getBlockNumber(); + const latestBlock = await ethers.provider.getBlock("latest"); + const blockTimestamp = latestBlock?.timestamp ?? 0; const marketBytes = "0x" + bytesToHexString(await generateRandomBytes(1024 * 2)); // 10 MB const invalidMarketId = ethers.keccak256(marketBytes); await expect( - proofMarketplace.connect(prover).createAsk( + proofMarketplace.connect(prover).createBid( { marketId: invalidMarketId, proverData: proverBytes, reward: reward.toFixed(), - expiry: assignmentExpiry + latestBlock, - timeTakenForProofGeneration, - deadline: latestBlock + maxTimeForProofGeneration, + expiry: (assignmentExpiry + blockTimestamp).toString(), + timeForProofGeneration: timeForProofGeneration.toString(), + deadline: (blockTimestamp + maxTimeForProofGeneration).toString(), refundAddress: await prover.getAddress(), }, 0, @@ -472,241 +530,259 @@ describe("Proof market place", () => { ).to.be.revertedWithPanic(0x32); // 0x32 mean array out of bounds // market is not created }); - describe("Generator", () => { - let generatorData: string; - let generator: Signer; + describe("Prover", () => { + let proverData: string; + let prover: Signer; beforeEach(async () => { - generator = await signers[12]; - generatorData = "0x" + bytesToHexString(await generateRandomBytes(1024 * 1)); // 1 MB - await mockToken.connect(tokenHolder).transfer(await generator.getAddress(), generatorStakingAmount.toFixed()); + prover = await signers[12]; + proverData = "0x" + bytesToHexString(await generateRandomBytes(1024 * 1)); // 1 MB + await mockToken.connect(tokenHolder).transfer(await prover.getAddress(), proverStakingAmount.toFixed()); - await mockToken.connect(generator).approve(await generatorRegistry.getAddress(), generatorStakingAmount.toFixed()); + // await mockToken.connect(prover).approve(await proverManager.getAddress(), proverStakingAmount.toFixed()); // amount locked can be anything, it get overrides within the contract }); - it("Check generator data", async () => { - await expect( - generatorRegistry - .connect(generator) - .register(await generator.getAddress(), computeUnitsRequired, generatorStakingAmount.toFixed(0), generatorData), - ) - .to.emit(generatorRegistry, "RegisteredGenerator") - .withArgs(await generator.getAddress(), computeUnitsRequired, generatorStakingAmount.toFixed(0)); + it("Check prover data", async () => { + await expect(proverManager.connect(prover).register(await prover.getAddress(), computeUnitsRequired, proverData)) + .to.emit(proverManager, "ProverRegistered") + .withArgs(await prover.getAddress(), computeUnitsRequired, proverData); - let generatorEnclave = new MockEnclave(MockGeneratorPCRS); + let proverEnclave = new MockEnclave(MockProverPCRS); await expect( - generatorRegistry - .connect(generator) - .joinMarketplace( - marketId, - computeUnitsRequired, - minRewardForGenerator.toFixed(), - 100, - false, - await generatorEnclave.getVerifiedAttestation(generatorEnclave), - "0x", - ), + proverManager.connect(prover).joinMarketplace( + marketId, + computeUnitsRequired, + minRewardForProver.toFixed(), + 100, + new BigNumber(10).pow(18).multipliedBy(0.1).toFixed(0), // 10% + false, + await proverEnclave.getVerifiedAttestation(proverEnclave), + "0x", + ), ) - .to.emit(generatorRegistry, "JoinedMarketplace") - .withArgs(await generator.getAddress(), marketId, computeUnitsRequired); + .to.emit(proverManager, "ProverJoinedMarketplace") + .withArgs(await prover.getAddress(), marketId, computeUnitsRequired, new BigNumber(10).pow(18).multipliedBy(0.1).toFixed(0)); // 10% - const rewardAddress = (await generatorRegistry.generatorRegistry(await generator.getAddress())).rewardAddress; - expect(rewardAddress).to.eq(await generator.getAddress()); + const rewardAddress = (await proverManager.proverRegistry(await prover.getAddress())).rewardAddress; + expect(rewardAddress).to.eq(await prover.getAddress()); - expect((await generatorRegistry.generatorInfoPerMarket(await generator.getAddress(), marketId)).state).to.eq(1); //1 means JOINED + expect((await proverManager.proverInfoPerMarket(await prover.getAddress(), marketId)).state).to.eq(1); //1 means JOINED }); it("request for market place exit", async () => { - await generatorRegistry - .connect(generator) - .register(await generator.getAddress(), computeUnitsRequired, generatorStakingAmount.toFixed(0), generatorData); - - await generatorRegistry - .connect(generator) - .joinMarketplace(marketId, computeUnitsRequired, minRewardForGenerator.toFixed(), 100, false, "0x", "0x"); - - await expect(generatorRegistry.connect(generator).requestForExitMarketplace(marketId)) - .to.emit(generatorRegistry, "RequestExitMarketplace") - .withArgs(await generator.getAddress(), marketId) - .to.emit(generatorRegistry, "LeftMarketplace") - .withArgs(await generator.getAddress(), marketId); + await proverManager.connect(prover).register(await prover.getAddress(), computeUnitsRequired, proverData); + + await proverManager.connect(prover).joinMarketplace( + marketId, + computeUnitsRequired, + minRewardForProver.toFixed(), + 100, + new BigNumber(10).pow(18).multipliedBy(0.1).toFixed(0), // 10% + false, + "0x", + "0x", + ); + + await expect(proverManager.connect(prover).requestForExitMarketplace(marketId)) + .to.emit(proverManager, "ProverRequestedMarketplaceExit") + .withArgs(await prover.getAddress(), marketId) + .to.emit(proverManager, "ProverLeftMarketplace") + .withArgs(await prover.getAddress(), marketId); }); it("request for market place exit: array", async () => { - await generatorRegistry - .connect(generator) - .register(await generator.getAddress(), computeUnitsRequired, generatorStakingAmount.toFixed(0), generatorData); - - await generatorRegistry - .connect(generator) - .joinMarketplace(marketId, computeUnitsRequired, minRewardForGenerator.toFixed(), 100, false, "0x", "0x"); + await proverManager.connect(prover).register(await prover.getAddress(), computeUnitsRequired, proverData); + + await proverManager.connect(prover).joinMarketplace( + marketId, + computeUnitsRequired, + minRewardForProver.toFixed(), + 100, + new BigNumber(10).pow(18).multipliedBy(0.1).toFixed(0), // 10% + false, + "0x", + "0x", + ); - await expect(generatorRegistry.connect(generator).requestForExitMarketplaces([marketId])) - .to.emit(generatorRegistry, "RequestExitMarketplace") - .withArgs(await generator.getAddress(), marketId); + await expect(proverManager.connect(prover).requestForExitMarketplaces([marketId])) + .to.emit(proverManager, "ProverRequestedMarketplaceExit") + .withArgs(await prover.getAddress(), marketId); }); it("leave market place", async () => { - await generatorRegistry - .connect(generator) - .register(await generator.getAddress(), computeUnitsRequired, generatorStakingAmount.toFixed(0), generatorData); - - await generatorRegistry - .connect(generator) - .joinMarketplace(marketId, computeUnitsRequired, minRewardForGenerator.toFixed(), 100, false, "0x", "0x"); + await proverManager.connect(prover).register(await prover.getAddress(), computeUnitsRequired, proverData); + + await proverManager.connect(prover).joinMarketplace( + marketId, + computeUnitsRequired, + minRewardForProver.toFixed(), + 100, + new BigNumber(10).pow(18).multipliedBy(0.1).toFixed(0), // 10% + false, + "0x", + "0x", + ); - await expect(generatorRegistry.connect(generator).leaveMarketplace(marketId)) - .to.emit(generatorRegistry, "LeftMarketplace") - .withArgs(await generator.getAddress(), marketId); + await expect(proverManager.connect(prover).leaveMarketplace(marketId)) + .to.emit(proverManager, "ProverLeftMarketplace") + .withArgs(await prover.getAddress(), marketId); }); it("leave multiple markets", async () => { - await generatorRegistry - .connect(generator) - .register(await generator.getAddress(), computeUnitsRequired, generatorStakingAmount.toFixed(0), generatorData); - - await generatorRegistry - .connect(generator) - .joinMarketplace(marketId, computeUnitsRequired, minRewardForGenerator.toFixed(), 100, false, "0x", "0x"); + await proverManager.connect(prover).register(await prover.getAddress(), computeUnitsRequired, proverData); + + await proverManager.connect(prover).joinMarketplace( + marketId, + computeUnitsRequired, + minRewardForProver.toFixed(), + 100, + new BigNumber(10).pow(18).multipliedBy(0.1).toFixed(0), // 10% + false, + "0x", + "0x", + ); - await expect(generatorRegistry.connect(generator).leaveMarketplaces([marketId])) - .to.emit(generatorRegistry, "LeftMarketplace") - .withArgs(await generator.getAddress(), marketId); + await expect(proverManager.connect(prover).leaveMarketplaces([marketId])) + .to.emit(proverManager, "ProverLeftMarketplace") + .withArgs(await prover.getAddress(), marketId); }); - it("Can't de-register if generator is active part of proof market", async () => { - await generatorRegistry - .connect(generator) - .register(await generator.getAddress(), computeUnitsRequired, generatorStakingAmount.toFixed(0), generatorData); + it("Can't de-register if prover is active part of proof market", async () => { + await proverManager.connect(prover).register(await prover.getAddress(), computeUnitsRequired, proverData); - await generatorRegistry - .connect(generator) - .joinMarketplace(marketId, computeUnitsRequired, minRewardForGenerator.toFixed(), 100, false, "0x", "0x"); + await proverManager.connect(prover).joinMarketplace( + marketId, + computeUnitsRequired, + minRewardForProver.toFixed(), + 100, + new BigNumber(10).pow(18).multipliedBy(0.1).toFixed(0), // 10% + false, + "0x", + "0x", + ); - await expect(generatorRegistry.connect(generator).deregister(await generator.getAddress())).to.be.revertedWithCustomError( + await expect(proverManager.connect(prover).deregister()).to.be.revertedWithCustomError( errorLibrary, "CannotLeaveWithActiveMarket", ); }); - it("Deregister generator data", async () => { - await generatorRegistry - .connect(generator) - .register(await generator.getAddress(), computeUnitsRequired, generatorStakingAmount.toFixed(0), generatorData); + it("Deregister prover data", async () => { + await proverManager.connect(prover).register(await prover.getAddress(), computeUnitsRequired, proverData); - await expect(generatorRegistry.connect(generator).deregister(await generator.getAddress())) - .to.emit(generatorRegistry, "DeregisteredGenerator") - .withArgs(await generator.getAddress()); + await expect(proverManager.connect(prover).deregister()) + .to.emit(proverManager, "ProverDeregistered") + .withArgs(await prover.getAddress()); }); - it("extra stash can be added to generator by anyone", async () => { - await generatorRegistry - .connect(generator) - .register(await generator.getAddress(), computeUnitsRequired, generatorStakingAmount.toFixed(0), generatorData); + // it("extra stash can be added to prover by anyone", async () => { + // await proverManager + // .connect(prover) + // .register(await prover.getAddress(), computeUnitsRequired, proverData); - const extraStash = "112987298347983"; - await mockToken.connect(tokenHolder).approve(await generatorRegistry.getAddress(), extraStash); + // const extraStash = "112987298347983"; + // await mockToken.connect(tokenHolder).approve(await proverManager.getAddress(), extraStash); - await expect(generatorRegistry.connect(tokenHolder).stake(await generator.getAddress(), extraStash)) - .to.emit(generatorRegistry, "AddedStake") - .withArgs(await generator.getAddress(), extraStash) - .to.emit(mockToken, "Transfer") - .withArgs(await tokenHolder.getAddress(), await generatorRegistry.getAddress(), extraStash); - }); + // await expect(proverManager.connect(tokenHolder).stake(await prover.getAddress(), extraStash)) + // .to.emit(proverManager, "AddedStake") + // .withArgs(await prover.getAddress(), extraStash) + // .to.emit(mockToken, "Transfer") + // .withArgs(await tokenHolder.getAddress(), await proverManager.getAddress(), extraStash); + // }); - describe("Generator After Staking", () => { + describe("Prover After Staking", () => { const extraStash = "112987298347983"; beforeEach(async () => { - await generatorRegistry - .connect(generator) - .register(await generator.getAddress(), computeUnitsRequired, generatorStakingAmount.toFixed(0), generatorData); + await proverManager.connect(prover).register(await prover.getAddress(), computeUnitsRequired, proverData); - await mockToken.connect(tokenHolder).approve(await generatorRegistry.getAddress(), extraStash); + await mockToken.connect(tokenHolder).approve(await proverManager.getAddress(), extraStash); - await expect(generatorRegistry.connect(tokenHolder).stake(await generator.getAddress(), extraStash)) - .to.emit(generatorRegistry, "AddedStake") - .withArgs(await generator.getAddress(), extraStash) - .to.emit(mockToken, "Transfer") - .withArgs(await tokenHolder.getAddress(), await generatorRegistry.getAddress(), extraStash); + // await expect(proverManager.connect(tokenHolder).stake(await prover.getAddress(), extraStash)) + // .to.emit(proverManager, "AddedStake") + // .withArgs(await prover.getAddress(), extraStash) + // .to.emit(mockToken, "Transfer") + // .withArgs(await tokenHolder.getAddress(), await proverManager.getAddress(), extraStash); }); - it("unstake should fail without request", async () => { - await expect(generatorRegistry.connect(generator).unstake(await generator.getAddress())).to.be.revertedWithCustomError( - errorLibrary, - "UnstakeRequestNotInPlace", - ); - }); + // it("unstake should fail without request", async () => { + // await expect(proverManager.connect(prover).unstake(await prover.getAddress())).to.be.revertedWithCustomError( + // errorLibrary, + // "UnstakeRequestNotInPlace", + // ); + // }); it("Decrease Compute should fail without request", async () => { - await expect(generatorRegistry.connect(generator).decreaseDeclaredCompute()).to.be.revertedWithCustomError( + await expect(proverManager.connect(prover).decreaseDeclaredCompute()).to.be.revertedWithCustomError( errorLibrary, "ReduceComputeRequestNotInPlace", ); }); - describe("Request to Decrease Stake", () => { - const updatedGeneratorStakingAmount = generatorStakingAmount.plus(extraStash); - - const stakeToReduce = updatedGeneratorStakingAmount.multipliedBy(9).div(10); - const expectedNewTotalStake = updatedGeneratorStakingAmount.minus(stakeToReduce); - const newUtilization = expectedNewTotalStake.multipliedBy(exponent).dividedBy(updatedGeneratorStakingAmount).minus(1); // to offset the uint256 thing in solidity - - beforeEach(async () => { - await expect(generatorRegistry.connect(generator).intendToReduceStake(stakeToReduce.toFixed(0))) - .to.emit(generatorRegistry, "RequestStakeDecrease") - .withArgs(await generator.getAddress(), newUtilization.toFixed(0)); - }); - - it("Generator utilization check and unstake", async () => { - const generatorData = await generatorRegistry.generatorRegistry(await generator.getAddress()); - expect(generatorData.intendedStakeUtilization).to.eq(newUtilization); - - const totalStakeBefore = generatorData.totalStake; - const expectedStakeAfter = new BigNumber(totalStakeBefore.toString()).multipliedBy(newUtilization).div(exponent); - const expectedAmountRelease = new BigNumber(totalStakeBefore.toString()).minus(expectedStakeAfter).toFixed(0); - - await expect(generatorRegistry.connect(generator).unstake(await generator.getAddress())) - .to.emit(generatorRegistry, "RemovedStake") - .withArgs(await generator.getAddress(), expectedAmountRelease) - .to.emit(mockToken, "Transfer") - .withArgs(await generatorRegistry.getAddress(), await generator.getAddress(), expectedAmountRelease); - }); - - it("Should fail if unstake is called more than once per request", async () => { - await generatorRegistry.connect(generator).unstake(await generator.getAddress()); - await expect(generatorRegistry.connect(generator).unstake(await generator.getAddress())).to.be.revertedWithCustomError( - errorLibrary, - "UnstakeRequestNotInPlace", - ); - }); - }); + // describe("Request to Decrease Stake", () => { + // const updatedProverStakingAmount = proverStakingAmount.plus(extraStash); + + // const stakeToReduce = updatedProverStakingAmount.multipliedBy(9).div(10); + // const expectedNewTotalStake = updatedProverStakingAmount.minus(stakeToReduce); + // const newUtilization = expectedNewTotalStake.multipliedBy(exponent).dividedBy(updatedProverStakingAmount).minus(1); // to offset the uint256 thing in solidity + + // beforeEach(async () => { + // await expect(proverManager.connect(prover).intendToReduceStake(stakeToReduce.toFixed(0))) + // .to.emit(proverManager, "RequestStakeDecrease") + // .withArgs(await prover.getAddress(), newUtilization.toFixed(0)); + // }); + + // it("Prover utilization check and unstake", async () => { + // const proverData = await proverManager.proverManager(await prover.getAddress()); + // expect(proverData.intendedStakeUtilization).to.eq(newUtilization); + + // const totalStakeBefore = proverData.totalStake; + // const expectedStakeAfter = new BigNumber(totalStakeBefore.toString()).multipliedBy(newUtilization).div(exponent); + // const expectedAmountRelease = new BigNumber(totalStakeBefore.toString()).minus(expectedStakeAfter).toFixed(0); + + // await expect(proverManager.connect(prover).unstake(await prover.getAddress())) + // .to.emit(proverManager, "RemovedStake") + // .withArgs(await prover.getAddress(), expectedAmountRelease) + // .to.emit(mockToken, "Transfer") + // .withArgs(await proverManager.getAddress(), await prover.getAddress(), expectedAmountRelease); + // }); + + // it("Should fail if unstake is called more than once per request", async () => { + // await proverManager.connect(prover).unstake(await prover.getAddress()); + // await expect(proverManager.connect(prover).unstake(await prover.getAddress())).to.be.revertedWithCustomError( + // errorLibrary, + // "UnstakeRequestNotInPlace", + // ); + // }); + // }); describe("Request to reduce compute", () => { const computeToReduce = new BigNumber(computeUnitsRequired).multipliedBy(9).div(10).toFixed(0); const newUtilization = exponent.dividedBy(10); // should be 10% of if compute is reduced by 90% beforeEach(async () => { - await expect(generatorRegistry.connect(generator).intendToReduceCompute(computeToReduce)) - .to.emit(generatorRegistry, "RequestComputeDecrease") - .withArgs(await generator.getAddress(), newUtilization.toFixed(0)); + await expect(proverManager.connect(prover).intendToReduceCompute(computeToReduce)) + .to.emit(proverManager, "ComputeDecreaseRequested") + .withArgs(await prover.getAddress(), newUtilization.toFixed(0)); + + await skipBlocks(ethers, 1000); }); - it("Generator utilization check and reduce compute", async () => { - const generatorData = await generatorRegistry.generatorRegistry(await generator.getAddress()); - expect(generatorData.intendedComputeUtilization).to.eq(newUtilization); + it("Prover utilization check and reduce compute", async () => { + const proverData = await proverManager.proverRegistry(await prover.getAddress()); + expect(proverData.intendedComputeUtilization).to.eq(newUtilization); - const totalComputeBefore = generatorData.declaredCompute; + const totalComputeBefore = proverData.declaredCompute; const expectedComputeAfter = new BigNumber(totalComputeBefore.toString()).multipliedBy(newUtilization).div(exponent); const expectedComputeToRelease = new BigNumber(totalComputeBefore.toString()).minus(expectedComputeAfter).toFixed(0); - await expect(generatorRegistry.connect(generator).decreaseDeclaredCompute()) - .to.emit(generatorRegistry, "DecreaseCompute") - .withArgs(await generator.getAddress(), expectedComputeToRelease); + await expect(proverManager.connect(prover).decreaseDeclaredCompute()) + .to.emit(proverManager, "ComputeDecreased") + .withArgs(await prover.getAddress(), expectedComputeToRelease); }); it("Should fail if decrease compute is called more than once per request", async () => { - await generatorRegistry.connect(generator).decreaseDeclaredCompute(); - await expect(generatorRegistry.connect(generator).decreaseDeclaredCompute()).to.be.revertedWithCustomError( + await proverManager.connect(prover).decreaseDeclaredCompute(); + await expect(proverManager.connect(prover).decreaseDeclaredCompute()).to.be.revertedWithCustomError( errorLibrary, "ReduceComputeRequestNotInPlace", ); @@ -716,13 +792,14 @@ describe("Proof market place", () => { describe("Task", () => { let proverBytes: string; - let latestBlock: number; - - let askId: BigNumber; + let latestBlock: any; + let blockTimestamp: number; + let bidId: BigNumber; beforeEach(async () => { proverBytes = "0x" + bytesToHexString(await generateRandomBytes(1024 * 1)); // 1 MB - latestBlock = await ethers.provider.getBlockNumber(); - + latestBlock = await ethers.provider.getBlock("latest"); + blockTimestamp = latestBlock?.timestamp ?? 0; + let meAttestationBytes = await matchingEngineEnclave.getVerifiedAttestation(matchingEngineEnclave); let types = ["bytes", "address"]; @@ -736,17 +813,17 @@ describe("Proof market place", () => { await proofMarketplace.connect(admin).setMatchingEngineImage(matchingEngineEnclave.getPcrRlp()); await proofMarketplace.connect(admin).verifyMatchingEngine(meAttestationBytes, signature); - askId = new BigNumber((await proofMarketplace.askCounter()).toString()); + bidId = new BigNumber((await proofMarketplace.bidCounter()).toString()); await mockToken.connect(prover).approve(await proofMarketplace.getAddress(), reward.toFixed()); - await proofMarketplace.connect(prover).createAsk( + await proofMarketplace.connect(prover).createBid( { marketId, proverData: proverBytes, reward: reward.toFixed(), - expiry: latestBlock + assignmentExpiry, - timeTakenForProofGeneration, - deadline: latestBlock + maxTimeForProofGeneration, + expiry: (blockTimestamp + assignmentExpiry).toString(), + timeForProofGeneration: timeForProofGeneration.toString(), + deadline: (blockTimestamp + maxTimeForProofGeneration).toString(), refundAddress: await prover.getAddress(), }, 0, @@ -755,48 +832,51 @@ describe("Proof market place", () => { "0x", ); - await generatorRegistry - .connect(generator) - .register(await generator.getAddress(), computeUnitsRequired, generatorStakingAmount.toFixed(0), generatorData); + await proverManager.connect(prover).register(await prover.getAddress(), computeUnitsRequired, proverData); - await generatorRegistry - .connect(generator) - .joinMarketplace(marketId, computeUnitsRequired, minRewardForGenerator.toFixed(), 100, false, "0x", "0x"); + await proverManager.connect(prover).joinMarketplace( + marketId, + computeUnitsRequired, + minRewardForProver.toFixed(), + 100, + new BigNumber(10).pow(18).multipliedBy(0.1).toFixed(0), // 10% + false, + "0x", + "0x", + ); }); it("Can't discard request before assignment (by anyone)", async () => { - await expect(proofMarketplace.connect(generator).discardRequest(askId.toString())) + await expect(proofMarketplace.connect(prover).discardRequest(bidId.toString())) .to.revertedWithCustomError(proofMarketplace, "ShouldBeInAssignedState") - .withArgs(askId); + .withArgs(bidId); - await expect(proofMarketplace.connect(treasury).discardRequest(askId.toString())) + await expect(proofMarketplace.connect(treasury).discardRequest(bidId.toString())) .to.revertedWithCustomError(proofMarketplace, "ShouldBeInAssignedState") - .withArgs(askId); + .withArgs(bidId); }); it("Matching engine assignment", async () => { - await expect(proofMarketplace.connect(matchingEngineSigner).assignTask(askId.toString(), await generator.getAddress(), "0x1234")) + await expect(proofMarketplace.connect(matchingEngineSigner).assignTask(bidId.toString(), await prover.getAddress(), "0x1234")) .to.emit(proofMarketplace, "TaskCreated") - .withArgs(askId, await generator.getAddress(), "0x1234") - .to.emit(generatorRegistry, "StakeLockImposed") - .withArgs(await generator.getAddress(), penaltyForNotComputingProof) - .to.emit(generatorRegistry, "ComputeLockImposed") - .withArgs(await generator.getAddress(), computeUnitsRequired); + .withArgs(bidId, await prover.getAddress(), "0x1234") + .to.emit(proverManager, "ComputeLocked") + .withArgs(await prover.getAddress(), computeUnitsRequired); - expect((await proofMarketplace.listOfAsk(askId.toString())).state).to.eq(3); // 3 means ASSIGNED + expect((await proofMarketplace.listOfBid(bidId.toString())).state).to.eq(3); // 3 means ASSIGNED // in store it will be 1 - expect((await generatorRegistry.generatorInfoPerMarket(await generator.getAddress(), marketId)).state).to.eq(1); + expect((await proverManager.proverInfoPerMarket(await prover.getAddress(), marketId)).state).to.eq(1); // but via function it should be 2 - const data = await generatorRegistry.getGeneratorState(await generator.getAddress(), marketId); + const data = await proverManager.getProverState(await prover.getAddress(), marketId); expect(data[0]).to.eq(2); }); it("Matching Engine should assign using relayers [multiple tasks]", async () => { const types = ["uint256[]", "address[]", "bytes[]"]; - const values = [[askId.toFixed(0)], [await generator.getAddress()], ["0x1234"]]; + const values = [[bidId.toFixed(0)], [await prover.getAddress()], ["0x1234"]]; const abicode = new ethers.AbiCoder(); const encoded = abicode.encode(types, values); @@ -808,37 +888,37 @@ describe("Proof market place", () => { await expect( proofMarketplace .connect(someRandomRelayer) - .relayBatchAssignTasks([askId.toString()], [await generator.getAddress()], ["0x1234"], signature), + .relayBatchAssignTasks([bidId.toString()], [await prover.getAddress()], ["0x1234"], signature), ) .to.emit(proofMarketplace, "TaskCreated") - .withArgs(askId, await generator.getAddress(), "0x1234"); + .withArgs(bidId, await prover.getAddress(), "0x1234"); - expect((await proofMarketplace.listOfAsk(askId.toString())).state).to.eq(3); // 3 means ASSIGNED + expect((await proofMarketplace.listOfBid(bidId.toString())).state).to.eq(3); // 3 means ASSIGNED // in store it will be 1 - expect((await generatorRegistry.generatorInfoPerMarket(await generator.getAddress(), marketId)).state).to.eq(1); + expect((await proverManager.proverInfoPerMarket(await prover.getAddress(), marketId)).state).to.eq(1); // but via function it should be 2 - const data = await generatorRegistry.getGeneratorState(await generator.getAddress(), marketId); + const data = await proverManager.getProverState(await prover.getAddress(), marketId); expect(data[0]).to.eq(2); }); it("Matching Engine can't assign more than vcpus", async () => { - await proofMarketplace.connect(matchingEngineSigner).assignTask(askId.toString(), await generator.getAddress(), "0x1234"); + await proofMarketplace.connect(matchingEngineSigner).assignTask(bidId.toString(), await prover.getAddress(), "0x1234"); - let anotherAskId = new BigNumber((await proofMarketplace.askCounter()).toString()); + let anotherbidId = new BigNumber((await proofMarketplace.bidCounter()).toString()); let anotherProverBytes = "0x" + bytesToHexString(await generateRandomBytes(1024 * 1)); // 1 MB await mockToken.connect(tokenHolder).transfer(await prover.getAddress(), reward.toFixed()); await mockToken.connect(prover).approve(await proofMarketplace.getAddress(), reward.toFixed()); - await proofMarketplace.connect(prover).createAsk( + await proofMarketplace.connect(prover).createBid( { marketId, proverData: anotherProverBytes, reward: reward.toFixed(), - expiry: latestBlock + assignmentExpiry, - timeTakenForProofGeneration, - deadline: latestBlock + maxTimeForProofGeneration, + expiry: (blockTimestamp + assignmentExpiry).toString(), + timeForProofGeneration: timeForProofGeneration.toString(), + deadline: (blockTimestamp + maxTimeForProofGeneration).toString(), refundAddress: await prover.getAddress(), }, 0, @@ -848,26 +928,26 @@ describe("Proof market place", () => { ); await expect( - proofMarketplace.connect(matchingEngineSigner).assignTask(anotherAskId.toString(), await generator.getAddress(), "0x1234"), - ).to.be.revertedWithCustomError(errorLibrary, "AssignOnlyToIdleGenerators"); + proofMarketplace.connect(matchingEngineSigner).assignTask(anotherbidId.toString(), await prover.getAddress(), "0x1234"), + ).to.be.revertedWithCustomError(errorLibrary, "AssignOnlyToIdleProvers"); }); - it("Should fail: Matching engine will not be able to assign task if ask is expired", async () => { + it("Should fail: Matching engine will not be able to assign task if bid is expired", async () => { await mine(assignmentExpiry); await expect( - proofMarketplace.connect(matchingEngineSigner).assignTask(askId.toString(), await generator.getAddress(), "0x"), + proofMarketplace.connect(matchingEngineSigner).assignTask(bidId.toString(), await prover.getAddress(), "0x"), ).to.be.revertedWithCustomError(errorLibrary, "ShouldBeInCreateState"); }); - it("Can cancel ask once the ask is expired", async () => { + it("Can cancel bid once the bid is expired", async () => { await mine(assignmentExpiry); - await expect(proofMarketplace.connect(admin).cancelAsk(askId.toString())) - .to.emit(proofMarketplace, "AskCancelled") - .withArgs(askId); + await expect(proofMarketplace.connect(admin).cancelBid(bidId.toString())) + .to.emit(proofMarketplace, "BidCancelled") + .withArgs(bidId); - await expect(proofMarketplace.flush(await prover.getAddress())) - .to.emit(mockToken, "Transfer") - .withArgs(await proofMarketplace.getAddress(), await prover.getAddress(), reward.toFixed()); + // await expect(proofMarketplace.flush(await prover.getAddress())) + // .to.emit(mockToken, "Transfer") + // .withArgs(await proofMarketplace.getAddress(), await prover.getAddress(), reward.toFixed()); }); it("Matching can't assign task if it image is blacklisted by moderator", async () => { @@ -875,7 +955,7 @@ describe("Proof market place", () => { await entityRegistry.connect(admin).blacklistImage(matchingEngineEnclave.getImageId()); await expect( - proofMarketplace.connect(matchingEngineSigner).assignTask(askId.toString(), await generator.getAddress(), "0x"), + proofMarketplace.connect(matchingEngineSigner).assignTask(bidId.toString(), await prover.getAddress(), "0x"), ).to.be.revertedWithCustomError(entityRegistry, "AttestationAutherImageNotWhitelisted"); }); @@ -889,7 +969,7 @@ describe("Proof market place", () => { ); await expect( - proofMarketplace.connect(matchingEngineSigner).assignTask(askId.toString(), await generator.getAddress(), "0x"), + proofMarketplace.connect(matchingEngineSigner).assignTask(bidId.toString(), await prover.getAddress(), "0x"), ).to.be.revertedWithCustomError(entityRegistry, "AttestationAutherImageNotInFamily"); }); @@ -901,19 +981,19 @@ describe("Proof market place", () => { newIvsEnclave = new MockEnclave(MockIVSPCRS); proof = "0x" + bytesToHexString(await generateRandomBytes(1024 * 1)); // 1 MB - await proofMarketplace.connect(matchingEngineSigner).assignTask(askId.toString(), await generator.getAddress(), "0x"); + await proofMarketplace.connect(matchingEngineSigner).assignTask(bidId.toString(), await prover.getAddress(), "0x"); - // generator should register his ivs for invalid inputs + // prover should register his ivs for invalid inputs await updateIvsKey(newIvsEnclave); }); const updateIvsKey = async (ivsEnclave: MockEnclave) => { // use any enclave here as AV is mocked - const noUseEnclave = new MockEnclave([MockIVSPCRS[2], MockGeneratorPCRS[2], GodEnclavePCRS[2]]); + const noUseEnclave = new MockEnclave([MockIVSPCRS[2], MockProverPCRS[2], GodEnclavePCRS[2]]); let ivsAttestationBytes = await ivsEnclave.getVerifiedAttestation(noUseEnclave); // means ivs should get verified attestation from noUseEnclave let types = ["bytes", "address"]; - let values = [ivsAttestationBytes, await generator.getAddress()]; + let values = [ivsAttestationBytes, await prover.getAddress()]; let abicode = new ethers.AbiCoder(); let encoded = abicode.encode(types, values); @@ -924,101 +1004,97 @@ describe("Proof market place", () => { // console.log("let expected_signature = \""+signature+"\";") // console.log("let recovery_address = \""+ivsEnclave.getAddress()+"\";") // console.log("let private_key = \""+ivsEnclave.getPrivateKey(true)+"\";") - // console.log("let address_to_sign = \""+await generator.getAddress()+"\";") + // console.log("let address_to_sign = \""+await prover.getAddress()+"\";") // use any enclave to get verfied attestation as mockAttesationVerifier is used here - await expect(generatorRegistry.connect(generator).addIvsKey(marketId, ivsAttestationBytes, signature)) - .to.emit(generatorRegistry, "AddIvsKey") + await expect(proverManager.connect(prover).addIvsKey(marketId, ivsAttestationBytes, signature)) + .to.emit(proverManager, "IvKeyAdded") .withArgs(marketId, ivsEnclave.getAddress()); }; it("submit proof", async () => { - const generatorAddress = await generator.getAddress(); - const expectedGeneratorReward = (await generatorRegistry.generatorInfoPerMarket(generatorAddress, marketId)) - .proofGenerationCost; + const proverAddress = await prover.getAddress(); + const expectedProverReward = (await proverManager.proverInfoPerMarket(proverAddress, marketId)).proofGenerationCost; const proverRefundAddress = await prover.getAddress(); - const expectedProverRefund = new BigNumber(reward).minus(expectedGeneratorReward.toString()); + const expectedProverRefund = new BigNumber(reward).minus(expectedProverReward.toString()); - await expect(proofMarketplace.submitProof(askId.toString(), proof)) + await expect(proofMarketplace.submitProof(bidId.toString(), proof)) .to.emit(proofMarketplace, "ProofCreated") - .withArgs(askId, proof) - .to.emit(generatorRegistry, "StakeLockReleased") - .withArgs(await generator.getAddress(), penaltyForNotComputingProof) - .to.emit(generatorRegistry, "ComputeLockReleased") - .withArgs(await generator.getAddress(), computeUnitsRequired); - - await expect(proofMarketplace.flush(generatorAddress)) - .to.emit(mockToken, "Transfer") - .withArgs(await proofMarketplace.getAddress(), generatorAddress, expectedGeneratorReward); - - await expect(proofMarketplace.flush(proverRefundAddress)) - .to.emit(mockToken, "Transfer") - .withArgs(await proofMarketplace.getAddress(), proverRefundAddress, expectedProverRefund); - - expect((await proofMarketplace.listOfAsk(askId.toString())).state).to.eq(4); // 4 means COMPLETE - expect((await generatorRegistry.generatorInfoPerMarket(await generator.getAddress(), marketId)).state).to.eq(1); // 1 means JOINED and idle now + .withArgs(bidId, proof) + .to.emit(proverManager, "ComputeReleased") + .withArgs(await prover.getAddress(), computeUnitsRequired); + + // await expect(proofMarketplace.flush(proverAddress)) + // .to.emit(mockToken, "Transfer") + // .withArgs(await proofMarketplace.getAddress(), proverAddress, expectedProverReward); + + // await expect(proofMarketplace.flush(proverRefundAddress)) + // .to.emit(mockToken, "Transfer") + // .withArgs(await proofMarketplace.getAddress(), proverRefundAddress, expectedProverRefund); + + expect((await proofMarketplace.listOfBid(bidId.toString())).state).to.eq(4); // 4 means COMPLETE + expect((await proverManager.proverInfoPerMarket(await prover.getAddress(), marketId)).state).to.eq(1); // 1 means JOINED and idle now }); it("Submit Proof via array", async () => { - const generatorAddress = await generator.getAddress(); - const expectedGeneratorReward = (await generatorRegistry.generatorInfoPerMarket(generatorAddress, marketId)) - .proofGenerationCost; + const proverAddress = await prover.getAddress(); + const expectedProverReward = (await proverManager.proverInfoPerMarket(proverAddress, marketId)).proofGenerationCost; const proverRefundAddress = await prover.getAddress(); - const expectedProverRefund = new BigNumber(reward).minus(expectedGeneratorReward.toString()); + const expectedProverRefund = new BigNumber(reward).minus(expectedProverReward.toString()); - await expect(proofMarketplace.submitProofs([askId.toString()], [proof])) + await expect(proofMarketplace.submitProofs([bidId.toString()], [proof])) .to.emit(proofMarketplace, "ProofCreated") - .withArgs(askId, proof); + .withArgs(bidId, proof); - await expect(proofMarketplace.flush(generatorAddress)) - .to.emit(mockToken, "Transfer") - .withArgs(await proofMarketplace.getAddress(), generatorAddress, expectedGeneratorReward); + // await expect(proofMarketplace.flush(proverAddress)) + // .to.emit(mockToken, "Transfer") + // .withArgs(await proofMarketplace.getAddress(), proverAddress, expectedProverReward); - await expect(proofMarketplace.flush(proverRefundAddress)) - .to.emit(mockToken, "Transfer") - .withArgs(await proofMarketplace.getAddress(), proverRefundAddress, expectedProverRefund); + // await expect(proofMarketplace.flush(proverRefundAddress)) + // .to.emit(mockToken, "Transfer") + // .withArgs(await proofMarketplace.getAddress(), proverRefundAddress, expectedProverRefund); - expect((await proofMarketplace.listOfAsk(askId.toString())).state).to.eq(4); // 4 means COMPLETE - expect((await generatorRegistry.generatorInfoPerMarket(await generator.getAddress(), marketId)).state).to.eq(1); // 1 means JOINED and idle now + expect((await proofMarketplace.listOfBid(bidId.toString())).state).to.eq(4); // 4 means COMPLETE + expect((await proverManager.proverInfoPerMarket(await prover.getAddress(), marketId)).state).to.eq(1); // 1 means JOINED and idle now }); it("Submit Proof for invalid request: using own ivs", async () => { - const askData = await proofMarketplace.listOfAsk(askId.toFixed(0)); + const askData = await proofMarketplace.listOfBid(bidId.toFixed(0)); const types = ["uint256", "bytes"]; - const values = [askId.toFixed(0), askData.ask.proverData]; + const values = [bidId.toFixed(0), askData.bid.proverData]; const abicode = new ethers.AbiCoder(); const encoded = abicode.encode(types, values); const digest = ethers.keccak256(encoded); const signature = await newIvsEnclave.signMessage(ethers.getBytes(digest)); - const generatorAddress = await generator.getAddress(); - const expectedGeneratorReward = (await generatorRegistry.generatorInfoPerMarket(generatorAddress, marketId)) - .proofGenerationCost; + const proverAddress = await prover.getAddress(); + const expectedProverReward = (await proverManager.proverInfoPerMarket(proverAddress, marketId)).proofGenerationCost; const treasuryRefundAddress = await treasury.getAddress(); - const expectedRefund = new BigNumber(reward).minus(expectedGeneratorReward.toString()); + const expectedRefund = new BigNumber(reward).minus(expectedProverReward.toString()); - await proofMarketplace.flush(await treasury.getAddress()); // remove anything if is already there + // TODO + // await proofMarketplace.flush(await treasury.getAddress()); // remove anything if is already there - await expect(proofMarketplace.submitProofForInvalidInputs(askId.toFixed(0), signature)) + await expect(proofMarketplace.submitProofForInvalidInputs(bidId.toFixed(0), signature)) .to.emit(proofMarketplace, "InvalidInputsDetected") - .withArgs(askId); + .withArgs(bidId); - await expect(proofMarketplace.flush(generatorAddress)) - .to.emit(mockToken, "Transfer") - .withArgs(await proofMarketplace.getAddress(), generatorAddress, expectedGeneratorReward); + // await expect(proofMarketplace.flush(proverAddress)) + // .to.emit(mockToken, "Transfer") + // .withArgs(await proofMarketplace.getAddress(), proverAddress, expectedProverReward); - await expect(proofMarketplace.flush(await treasury.getAddress())) - .to.emit(mockToken, "Transfer") - .withArgs(await proofMarketplace.getAddress(), treasuryRefundAddress, expectedRefund); + // await expect(proofMarketplace.flush(await treasury.getAddress())) + // .to.emit(mockToken, "Transfer") + // .withArgs(await proofMarketplace.getAddress(), treasuryRefundAddress, expectedRefund); }); it("Submit Proof for invalid request, from another ivs enclave with same image id", async () => { - const askData = await proofMarketplace.listOfAsk(askId.toFixed(0)); + const askData = await proofMarketplace.listOfBid(bidId.toFixed(0)); const types = ["uint256", "bytes"]; - const values = [askId.toFixed(0), askData.ask.proverData]; + const values = [bidId.toFixed(0), askData.bid.proverData]; const abicode = new ethers.AbiCoder(); const encoded = abicode.encode(types, values); @@ -1026,54 +1102,54 @@ describe("Proof market place", () => { const anotherIvsEnclave = new MockEnclave(MockIVSPCRS); const signature = await anotherIvsEnclave.signMessage(ethers.getBytes(digest)); - const generatorAddress = await generator.getAddress(); - const expectedGeneratorReward = (await generatorRegistry.generatorInfoPerMarket(generatorAddress, marketId)) - .proofGenerationCost; + const proverAddress = await prover.getAddress(); + const expectedProverReward = (await proverManager.proverInfoPerMarket(proverAddress, marketId)).proofGenerationCost; const treasuryRefundAddress = await treasury.getAddress(); - const expectedRefund = new BigNumber(reward).minus(expectedGeneratorReward.toString()); + const expectedRefund = new BigNumber(reward).minus(expectedProverReward.toString()); - await proofMarketplace.flush(await treasury.getAddress()); // remove anything if is already there + // TODO + // await proofMarketplace.flush(await treasury.getAddress()); // remove anything if is already there // because enclave key for new enclave is not verified yet - await expect(proofMarketplace.submitProofForInvalidInputs(askId.toFixed(0), signature)).to.be.revertedWithCustomError( + await expect(proofMarketplace.submitProofForInvalidInputs(bidId.toFixed(0), signature)).to.be.revertedWithCustomError( entityRegistry, "AttestationAutherKeyNotVerified", ); await updateIvsKey(anotherIvsEnclave); - await expect(proofMarketplace.submitProofForInvalidInputs(askId.toFixed(0), signature)) + await expect(proofMarketplace.submitProofForInvalidInputs(bidId.toFixed(0), signature)) .to.emit(proofMarketplace, "InvalidInputsDetected") - .withArgs(askId); + .withArgs(bidId); - await expect(proofMarketplace.flush(generatorAddress)) - .to.emit(mockToken, "Transfer") - .withArgs(await proofMarketplace.getAddress(), generatorAddress, expectedGeneratorReward); + // await expect(proofMarketplace.flush(proverAddress)) + // .to.emit(mockToken, "Transfer") + // .withArgs(await proofMarketplace.getAddress(), proverAddress, expectedProverReward); - await expect(proofMarketplace.flush(await treasury.getAddress())) - .to.emit(mockToken, "Transfer") - .withArgs(await proofMarketplace.getAddress(), treasuryRefundAddress, expectedRefund); + // await expect(proofMarketplace.flush(await treasury.getAddress())) + // .to.emit(mockToken, "Transfer") + // .withArgs(await proofMarketplace.getAddress(), treasuryRefundAddress, expectedRefund); }); - it("Generator can ignore the request", async () => { - await expect(proofMarketplace.connect(generator).discardRequest(askId.toString())) + it("Prover can ignore the request", async () => { + await expect(proofMarketplace.connect(prover).discardRequest(bidId.toString())) .to.emit(proofMarketplace, "ProofNotGenerated") - .withArgs(askId); - await expect(proofMarketplace.flush(await prover.getAddress())) - .to.emit(mockToken, "Transfer") - .withArgs(await proofMarketplace.getAddress(), await prover.getAddress(), reward.toFixed(0)); + .withArgs(bidId); + // await expect(proofMarketplace.flush(await prover.getAddress())) + // .to.emit(mockToken, "Transfer") + // .withArgs(await proofMarketplace.getAddress(), await prover.getAddress(), reward.toFixed(0)); }); - it("Should Fail: No one other than generator discard his own request", async () => { - await expect(proofMarketplace.connect(treasury).discardRequest(askId.toString())) - .to.revertedWithCustomError(proofMarketplace, "OnlyGeneratorCanDiscardRequest") - .withArgs(askId); + it("Should Fail: No one other than prover discard his own request", async () => { + await expect(proofMarketplace.connect(treasury).discardRequest(bidId.toString())) + .to.revertedWithCustomError(proofMarketplace, "OnlyProverCanDiscardRequest") + .withArgs(bidId); }); - it("Can't slash request before deadline", async () => { - await expect( - proofMarketplace.connect(admin).slashGenerator(askId.toString(), await admin.getAddress()), - ).to.be.revertedWithCustomError(errorLibrary, "ShouldBeInCrossedDeadlineState"); - }); + // it("Can't slash request before deadline", async () => { + // await expect( + // proofMarketplace.connect(admin).slashProver(bidId.toString(), await admin.getAddress()), + // ).to.be.revertedWithCustomError(errorLibrary, "DeadlineNotCrossed"); + // }); describe("Failed submiited proof", () => { let slasher: Signer; @@ -1084,29 +1160,29 @@ describe("Proof market place", () => { }); it("State should be deadline crossed", async () => { - expect(await proofMarketplace.getAskState(askId.toString())).to.eq(5); // 5 means deadline crossed + expect(await proofMarketplace.getBidState(bidId.toString())).to.eq(5); // 5 means deadline crossed }); - it("Generator can't discard request when deadline crossed", async () => { - await expect(proofMarketplace.connect(generator).discardRequest(askId.toString())) + it("Prover can't discard request when deadline crossed", async () => { + await expect(proofMarketplace.connect(prover).discardRequest(bidId.toString())) .to.revertedWithCustomError(proofMarketplace, "ShouldBeInAssignedState") - .withArgs(askId); + .withArgs(bidId); }); - it("When deadline is crossed, it is slashable by anyone", async () => { - await expect(proofMarketplace.connect(admin).slashGenerator(askId.toString(), await admin.getAddress())) - .to.emit(proofMarketplace, "ProofNotGenerated") - .withArgs(askId); + // it("When deadline is crossed, it is slashable by anyone", async () => { + // await expect(proofMarketplace.connect(admin).slashProver(bidId.toString(), await admin.getAddress())) + // .to.emit(proofMarketplace, "ProofNotGenerated") + // .withArgs(bidId); - await expect(proofMarketplace.flush(await prover.getAddress())) - .to.emit(mockToken, "Transfer") - .withArgs(await proofMarketplace.getAddress(), await prover.getAddress(), reward.toFixed(0)); - }); + // await expect(proofMarketplace.flush(await prover.getAddress())) + // .to.emit(mockToken, "Transfer") + // .withArgs(await proofMarketplace.getAddress(), await prover.getAddress(), reward.toFixed(0)); + // }); it("Should fail: Submit proof after deadline", async () => { - await expect(proofMarketplace.submitProofs([askId.toString()], [proof])) - .to.revertedWithCustomError(proofMarketplace, "OnlyAssignedAsksCanBeProved") - .withArgs(askId); + await expect(proofMarketplace.submitProofs([bidId.toString()], [proof])) + .to.revertedWithCustomError(proofMarketplace, "OnlyAssignedBidsCanBeProved") + .withArgs(bidId); }); }); }); diff --git a/test/ProofMarketPlaceForAttestationZkVerifier.ts b/test/ProofMarketPlaceForAttestationZkVerifier.ts index 94033ff..bf97956 100644 --- a/test/ProofMarketPlaceForAttestationZkVerifier.ts +++ b/test/ProofMarketPlaceForAttestationZkVerifier.ts @@ -1,46 +1,53 @@ -import { expect } from "chai"; -import { ethers, upgrades } from "hardhat"; -import { AbiCoder, Signer } from "ethers"; import { BigNumber } from "bignumber.js"; +import { expect } from "chai"; import { + AbiCoder, + Signer, +} from "ethers"; +import { ethers } from "hardhat"; + +import { + GodEnclavePCRS, + MarketData, + marketDataToBytes, + MockEnclave, + MockIVSPCRS, + MockMEPCRS, + MockProverPCRS, + ProverData, + proverDataToBytes, + setup, +} from "../helpers"; +// import * as attestation from "../helpers/sample/risc0/attestation_struct.json"; +import * as attestation from "../helpers/sample/risc0/attestation.json"; +import { + AttestationVerifier, AttestationVerifierZK__factory, EntityKeyRegistry, Error, - GeneratorRegistry, IVerifier, IVerifier__factory, MockToken, + NativeStaking, PriorityLog, ProofMarketplace, + ProverManager, Risc0_attestation_verifier_wrapper__factory, RiscZeroGroth16Verifier__factory, RiscZeroVerifierEmergencyStop__factory, + StakingManager, + SymbioticStaking, + SymbioticStakingReward, } from "../typechain-types"; -import { - GeneratorData, - GodEnclavePCRS, - MarketData, - MockEnclave, - MockGeneratorPCRS, - MockIVSPCRS, - MockMEPCRS, - generatorDataToBytes, - marketDataToBytes, - setup, - skipBlocks, -} from "../helpers"; -// import * as attestation from "../helpers/sample/risc0/attestation_struct.json"; -import * as attestation from "../helpers/sample/risc0/attestation.json"; - describe("Proof Market Place for Attestation Verifier", () => { let proofMarketplace: ProofMarketplace; - let generatorRegistry: GeneratorRegistry; + let proverManager: ProverManager; let tokenToUse: MockToken; let priorityLog: PriorityLog; let errorLibrary: Error; let entityKeyRegistry: EntityKeyRegistry; - + let attestationVerifier: AttestationVerifier; let signers: Signer[]; let admin: Signer; let tokenHolder: Signer; @@ -48,29 +55,34 @@ describe("Proof Market Place for Attestation Verifier", () => { let prover: Signer; let generator: Signer; + let stakingManager: StakingManager; + let nativeStaking: NativeStaking; + let symbioticStaking: SymbioticStaking; + let symbioticStakingReward: SymbioticStakingReward; + let marketCreator: Signer; let marketSetupData: MarketData; let marketId: string; - let generatorData: GeneratorData; + let proverData: ProverData; let iverifier: IVerifier; const ivsEnclave = new MockEnclave(MockIVSPCRS); const matchingEngineEnclave = new MockEnclave(MockMEPCRS); - const generatorEnclave = new MockEnclave(MockGeneratorPCRS); + const proverEnclave = new MockEnclave(MockProverPCRS); const godEnclave = new MockEnclave(GodEnclavePCRS); const totalTokenSupply: BigNumber = new BigNumber(10).pow(24).multipliedBy(9); const generatorStakingAmount: BigNumber = new BigNumber(10).pow(18).multipliedBy(1000).multipliedBy(2).minus(1231); // use any random number const generatorSlashingPenalty: BigNumber = new BigNumber(10).pow(16).multipliedBy(93).minus(182723423); // use any random number const marketCreationCost: BigNumber = new BigNumber(10).pow(18).multipliedBy(1213).minus(23746287365); // use any random number - const generatorComputeAllocation = new BigNumber(10).pow(19).minus("12782387").div(123).multipliedBy(98); + const proverComputeAllocation = new BigNumber(10).pow(19).minus("12782387").div(123).multipliedBy(98); const computeGivenToNewMarket = new BigNumber(10).pow(19).minus("98897").div(9233).multipliedBy(98); const rewardForProofGeneration = new BigNumber(10).pow(18).multipliedBy(200); - const minRewardByGenerator = new BigNumber(10).pow(18).multipliedBy(199); + const minRewardByProver = new BigNumber(10).pow(18).multipliedBy(199); // TODO: save it somewhere latter let seal = @@ -110,8 +122,8 @@ describe("Proof Market Place for Attestation Verifier", () => { inputOuputVerifierUrl: "this should be enclave url", }; - generatorData = { - name: "some custom name for the generator", + proverData = { + name: "some custom name for the prover", }; const riscZeroVerifier = await new RiscZeroGroth16Verifier__factory(admin).deploy( @@ -148,27 +160,35 @@ describe("Proof Market Place for Attestation Verifier", () => { marketDataToBytes(marketSetupData), marketSetupData.inputOuputVerifierUrl, iverifier, - generator, - generatorDataToBytes(generatorData), + prover, + proverDataToBytes(proverData), ivsEnclave, matchingEngineEnclave, - generatorEnclave, - minRewardByGenerator, - generatorComputeAllocation, + proverEnclave, + minRewardByProver, + proverComputeAllocation, computeGivenToNewMarket, godEnclave, ); proofMarketplace = data.proofMarketplace; - generatorRegistry = data.generatorRegistry; + proverManager = data.proverManager; tokenToUse = data.mockToken; priorityLog = data.priorityLog; errorLibrary = data.errorLibrary; entityKeyRegistry = data.entityKeyRegistry; + entityKeyRegistry = data.entityKeyRegistry; + attestationVerifier = data.attestationVerifier; + + /* Staking Contracts */ + stakingManager = data.stakingManager; + nativeStaking = data.nativeStaking; + symbioticStaking = data.symbioticStaking; + symbioticStakingReward = data.symbioticStakingReward; marketId = new BigNumber((await proofMarketplace.marketCounter()).toString()).minus(1).toFixed(); - let marketActivationDelay = await proofMarketplace.MARKET_ACTIVATION_DELAY(); - await skipBlocks(ethers, new BigNumber(marketActivationDelay.toString()).toNumber()); + // let marketActivationDelay = await proofMarketplace.MARKET_ACTIVATION_DELAY(); + // await skipBlocks(ethers, new BigNumber(marketActivationDelay.toString()).toNumber()); }); it.skip("Print function calldata", async () => { @@ -178,31 +198,37 @@ describe("Proof Market Place for Attestation Verifier", () => { }); it("Check risc0 attestation zk verifier", async () => { - const latestBlock = await ethers.provider.getBlockNumber(); + const latestBlock = await ethers.provider.getBlock("latest"); + const blockTimestamp = latestBlock?.timestamp ?? 0; - let assignmentExpiry = 100; // in blocks - let timeTakenForProofGeneration = 100000000; // keep a large number, but only for tests - let maxTimeForProofGeneration = 10000; // in blocks + let assignmentExpiry = 100; // in seconds + let timeForProofGeneration = 10000; // keep a large number, but only for tests + let maxTimeForProofGeneration = 60 * 60 * 24; // 1 day - const askId = await setup.createAsk( + const bidId = await setup.createBid( prover, tokenHolder, { marketId, proverData: inputBytes, reward: rewardForProofGeneration.toFixed(), - expiry: assignmentExpiry + latestBlock, - timeTakenForProofGeneration, - deadline: latestBlock + maxTimeForProofGeneration, + expiry: (assignmentExpiry + blockTimestamp).toString(), + timeForProofGeneration: timeForProofGeneration.toString(), + deadline: (blockTimestamp + maxTimeForProofGeneration).toString(), refundAddress: await prover.getAddress(), }, { mockToken: tokenToUse, proofMarketplace, - generatorRegistry, + attestationVerifier, + proverManager, priorityLog, errorLibrary, entityKeyRegistry, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, }, 1, extraData, @@ -214,15 +240,20 @@ describe("Proof Market Place for Attestation Verifier", () => { { mockToken: tokenToUse, proofMarketplace, - generatorRegistry, + attestationVerifier, + proverManager, priorityLog, errorLibrary, entityKeyRegistry, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, }, - askId, - generator, + bidId, + prover, ); - await expect(proofMarketplace.submitProof(askId, proofBytes)).to.emit(proofMarketplace, "ProofCreated").withArgs(askId, proofBytes); + await expect(proofMarketplace.submitProof(bidId, proofBytes)).to.emit(proofMarketplace, "ProofCreated").withArgs(bidId, proofBytes); }); }); diff --git a/test/ProorMarketPlaceWithCircomVerifier.ts b/test/ProofMarketPlaceWithCircomVerifier.ts similarity index 68% rename from test/ProorMarketPlaceWithCircomVerifier.ts rename to test/ProofMarketPlaceWithCircomVerifier.ts index b6ff06e..9778795 100644 --- a/test/ProorMarketPlaceWithCircomVerifier.ts +++ b/test/ProofMarketPlaceWithCircomVerifier.ts @@ -1,45 +1,55 @@ -import { expect } from "chai"; -import { ethers, upgrades } from "hardhat"; -import { Signer } from "ethers"; -import { BigNumber } from "bignumber.js"; -import { - GeneratorRegistry, - IVerifier, - IVerifier__factory, - MockToken, - ProofMarketplace, - XorVerifier__factory, - Xor2_verifier_wrapper__factory, - PriorityLog, - Error, - EntityKeyRegistry, -} from "../typechain-types"; +import { BigNumber } from 'bignumber.js'; +import { expect } from 'chai'; +import { Signer } from 'ethers'; +import { ethers } from 'hardhat'; import { - GeneratorData, GodEnclavePCRS, MarketData, + marketDataToBytes, MockEnclave, - MockGeneratorPCRS, MockIVSPCRS, MockMEPCRS, - generatorDataToBytes, - marketDataToBytes, + MockProverPCRS, + ProverData, + proverDataToBytes, setup, skipBlocks, -} from "../helpers"; - -import * as circom_verifier_inputs from "../helpers/sample/circomVerifier/input.json"; -import * as circom_verifier_proof from "../helpers/sample/circomVerifier/proof.json"; +} from '../helpers'; +import * as circom_verifier_inputs + from '../helpers/sample/circomVerifier/input.json'; +import * as circom_verifier_proof + from '../helpers/sample/circomVerifier/proof.json'; +import { + AttestationVerifier, + EntityKeyRegistry, + Error, + IVerifier, + IVerifier__factory, + MockToken, + NativeStaking, + PriorityLog, + ProofMarketplace, + ProverManager, + StakingManager, + SymbioticStaking, + SymbioticStakingReward, + Xor2_verifier_wrapper__factory, + XorVerifier__factory, +} from '../typechain-types'; describe("Proof Market Place for Circom Verifier", () => { let proofMarketplace: ProofMarketplace; - let generatorRegistry: GeneratorRegistry; + let proverManager: ProverManager; let tokenToUse: MockToken; let priorityLog: PriorityLog; let errorLibrary: Error; let entityKeyRegistry: EntityKeyRegistry; - + let stakingManager: StakingManager; + let nativeStaking: NativeStaking; + let symbioticStaking: SymbioticStaking; + let symbioticStakingReward: SymbioticStakingReward; + let attestationVerifier: AttestationVerifier; let signers: Signer[]; let admin: Signer; let tokenHolder: Signer; @@ -51,13 +61,13 @@ describe("Proof Market Place for Circom Verifier", () => { let marketSetupData: MarketData; let marketId: string; - let generatorData: GeneratorData; + let proverData: ProverData; let iverifier: IVerifier; const ivsEnclave = new MockEnclave(MockIVSPCRS); const matchingEngineEnclave = new MockEnclave(MockMEPCRS); - const generatorEnclave = new MockEnclave(MockGeneratorPCRS); + const proverEnclave = new MockEnclave(MockProverPCRS); const godEnclave = new MockEnclave(GodEnclavePCRS); const totalTokenSupply: BigNumber = new BigNumber(10).pow(24).multipliedBy(9); @@ -89,7 +99,7 @@ describe("Proof Market Place for Circom Verifier", () => { inputOuputVerifierUrl: "this should be nclave url", }; - generatorData = { + proverData = { name: "some custom name for the generator", }; @@ -125,58 +135,71 @@ describe("Proof Market Place for Circom Verifier", () => { marketSetupData.inputOuputVerifierUrl, iverifier, generator, - generatorDataToBytes(generatorData), + proverDataToBytes(proverData), ivsEnclave, matchingEngineEnclave, - generatorEnclave, + proverEnclave, minRewardByGenerator, generatorComputeAllocation, computeGivenToNewMarket, godEnclave, ); + attestationVerifier = data.attestationVerifier; proofMarketplace = data.proofMarketplace; - generatorRegistry = data.generatorRegistry; + proverManager = data.proverManager; tokenToUse = data.mockToken; priorityLog = data.priorityLog; errorLibrary = data.errorLibrary; entityKeyRegistry = data.entityKeyRegistry; + stakingManager = data.stakingManager; + nativeStaking = data.nativeStaking; + symbioticStaking = data.symbioticStaking; + symbioticStakingReward = data.symbioticStakingReward; await circomVerifierWrapper.setProofMarketplaceContract(await proofMarketplace.getAddress()); marketId = new BigNumber((await proofMarketplace.marketCounter()).toString()).minus(1).toFixed(); - let marketActivationDelay = await proofMarketplace.MARKET_ACTIVATION_DELAY(); - await skipBlocks(ethers, new BigNumber(marketActivationDelay.toString()).toNumber()); + // let marketActivationDelay = await proofMarketplace.MARKET_ACTIVATION_DELAY(); + // await skipBlocks(ethers, new BigNumber(marketActivationDelay.toString()).toNumber()); }); it("Check circom verifier", async () => { let abiCoder = new ethers.AbiCoder(); let inputBytes = abiCoder.encode(["uint[1]"], [[circom_verifier_inputs[0]]]); // console.log({ inputBytes }); - const latestBlock = await ethers.provider.getBlockNumber(); + + const latestBlock = await ethers.provider.getBlock("latest"); + const blockTimestamp = latestBlock?.timestamp ?? 0; + let assignmentExpiry = 100; // in blocks - let timeTakenForProofGeneration = 100000000; // keep a large number, but only for tests - let maxTimeForProofGeneration = 10000; // in blocks + let timeForProofGeneration = 10000; // keep a large number, but only for tests + let maxTimeForProofGeneration = 24 * 60 * 60; // 1 day - const askId = await setup.createAsk( + const bidId = await setup.createBid( prover, tokenHolder, { marketId, proverData: inputBytes, reward: rewardForProofGeneration.toFixed(), - expiry: assignmentExpiry + latestBlock, - timeTakenForProofGeneration, - deadline: latestBlock + maxTimeForProofGeneration, + expiry: (assignmentExpiry + blockTimestamp).toString(), + timeForProofGeneration: timeForProofGeneration.toString(), + deadline: (blockTimestamp + maxTimeForProofGeneration).toString(), refundAddress: await prover.getAddress(), }, { mockToken: tokenToUse, proofMarketplace, - generatorRegistry, + proverManager, priorityLog, errorLibrary, entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, }, 1, ); @@ -187,12 +210,17 @@ describe("Proof Market Place for Circom Verifier", () => { { mockToken: tokenToUse, proofMarketplace, - generatorRegistry, + proverManager, priorityLog, errorLibrary, entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, }, - askId, + bidId, generator, ); @@ -200,6 +228,6 @@ describe("Proof Market Place for Circom Verifier", () => { ["uint[2]", "uint[2][2]", "uint[2]"], [circom_verifier_proof[0], circom_verifier_proof[1], circom_verifier_proof[2]], ); - await expect(proofMarketplace.submitProof(askId, proofBytes)).to.emit(proofMarketplace, "ProofCreated").withArgs(askId, proofBytes); + await expect(proofMarketplace.submitProof(bidId, proofBytes)).to.emit(proofMarketplace, "ProofCreated").withArgs(bidId, proofBytes); }); }); diff --git a/test/ProorMarketPlaceWithPlonk.ts b/test/ProofMarketPlaceWithPlonk.ts similarity index 68% rename from test/ProorMarketPlaceWithPlonk.ts rename to test/ProofMarketPlaceWithPlonk.ts index e5ef08a..440fd0f 100644 --- a/test/ProorMarketPlaceWithPlonk.ts +++ b/test/ProofMarketPlaceWithPlonk.ts @@ -1,45 +1,58 @@ -import { expect } from "chai"; -import { ethers, upgrades } from "hardhat"; -import { Signer } from "ethers"; -import { BigNumber } from "bignumber.js"; -import { - GeneratorRegistry, - IVerifier, - IVerifier__factory, - MockToken, - PriorityLog, - ProofMarketplace, - UltraVerifier__factory, - Plonk_verifier_wrapper__factory, - Error, - EntityKeyRegistry, -} from "../typechain-types"; +import { BigNumber } from 'bignumber.js'; +import { expect } from 'chai'; +import { Signer } from 'ethers'; +import * as fs from 'fs'; +import { ethers } from 'hardhat'; import { - GeneratorData, GodEnclavePCRS, MarketData, + marketDataToBytes, MockEnclave, - MockGeneratorPCRS, MockIVSPCRS, MockMEPCRS, - generatorDataToBytes, - marketDataToBytes, + MockProverPCRS, + ProverData, + proverDataToBytes, setup, skipBlocks, -} from "../helpers"; -import * as fs from "fs"; +} from '../helpers'; +import { + a as plonkInputs, +} from '../helpers/sample/plonk/verification_params.json'; +import { + AttestationVerifier, + EntityKeyRegistry, + Error, + IVerifier, + IVerifier__factory, + MockToken, + NativeStaking, + Plonk_verifier_wrapper__factory, + PriorityLog, + ProofMarketplace, + ProverManager, + StakingManager, + SymbioticStaking, + SymbioticStakingReward, + UltraVerifier__factory, +} from '../typechain-types'; -import { a as plonkInputs } from "../helpers/sample/plonk/verification_params.json"; const plonkProof = "0x" + fs.readFileSync("helpers/sample/plonk/p.proof", "utf-8"); describe("Proof Market Place for Plonk Verifier", () => { let proofMarketplace: ProofMarketplace; - let generatorRegistry: GeneratorRegistry; + let proverManager: ProverManager; let tokenToUse: MockToken; let priorityLog: PriorityLog; let errorLibrary: Error; let entityKeyRegistry: EntityKeyRegistry; + let attestationVerifier: AttestationVerifier; + + let stakingManager: StakingManager; + let nativeStaking: NativeStaking; + let symbioticStaking: SymbioticStaking; + let symbioticStakingReward: SymbioticStakingReward; let signers: Signer[]; let admin: Signer; @@ -52,13 +65,13 @@ describe("Proof Market Place for Plonk Verifier", () => { let marketSetupData: MarketData; let marketId: string; - let generatorData: GeneratorData; + let proverData: ProverData; let iverifier: IVerifier; const ivsEnclave = new MockEnclave(MockIVSPCRS); const matchingEngineEnclave = new MockEnclave(MockMEPCRS); - const generatorEnclave = new MockEnclave(MockGeneratorPCRS); + const proverEnclave = new MockEnclave(MockProverPCRS); const godEnclave = new MockEnclave(GodEnclavePCRS); const totalTokenSupply: BigNumber = new BigNumber(10).pow(24).multipliedBy(9); @@ -90,7 +103,7 @@ describe("Proof Market Place for Plonk Verifier", () => { inputOuputVerifierUrl: "this should be nclave url", }; - generatorData = { + proverData = { name: "some custom name for the generator", }; @@ -124,58 +137,71 @@ describe("Proof Market Place for Plonk Verifier", () => { marketSetupData.inputOuputVerifierUrl, iverifier, generator, - generatorDataToBytes(generatorData), + proverDataToBytes(proverData), ivsEnclave, matchingEngineEnclave, - generatorEnclave, + proverEnclave, minRewardByGenerator, generatorComputeAllocation, computeGivenToNewMarket, godEnclave, ); proofMarketplace = data.proofMarketplace; - generatorRegistry = data.generatorRegistry; + proverManager = data.proverManager; tokenToUse = data.mockToken; priorityLog = data.priorityLog; errorLibrary = data.errorLibrary; entityKeyRegistry = data.entityKeyRegistry; + stakingManager = data.stakingManager; + nativeStaking = data.nativeStaking; + symbioticStaking = data.symbioticStaking; + symbioticStakingReward = data.symbioticStakingReward; + attestationVerifier = data.attestationVerifier; await plonkVerifierWrapper.setProofMarketplaceContract(await proofMarketplace.getAddress()); marketId = new BigNumber((await proofMarketplace.marketCounter()).toString()).minus(1).toFixed(); - let marketActivationDelay = await proofMarketplace.MARKET_ACTIVATION_DELAY(); - await skipBlocks(ethers, new BigNumber(marketActivationDelay.toString()).toNumber()); + // let marketActivationDelay = await proofMarketplace.MARKET_ACTIVATION_DELAY(); + // await skipBlocks(ethers, new BigNumber(marketActivationDelay.toString()).toNumber()); }); it("Check plonk verifier", async () => { let abiCoder = new ethers.AbiCoder(); let inputBytes = abiCoder.encode(["bytes32[]"], [[plonkInputs]]); // console.log({ inputBytes }); - const latestBlock = await ethers.provider.getBlockNumber(); + const latestBlock = await ethers.provider.getBlock("latest"); + const blockTimestamp = latestBlock?.timestamp ?? 0; + + let assignmentExpiry = 100; // in blocks - let timeTakenForProofGeneration = 100000000; // keep a large number, but only for tests - let maxTimeForProofGeneration = 10000; // in blocks + let timeForProofGeneration = 10000; // keep a large number, but only for tests + let maxTimeForProofGeneration = 24 * 60 * 60; // 1 day - const askId = await setup.createAsk( + const bidId = await setup.createBid( prover, tokenHolder, { marketId, proverData: inputBytes, reward: rewardForProofGeneration.toFixed(), - expiry: assignmentExpiry + latestBlock, - timeTakenForProofGeneration, - deadline: latestBlock + maxTimeForProofGeneration, + expiry: (assignmentExpiry + blockTimestamp).toString(), + timeForProofGeneration: timeForProofGeneration.toString(), + deadline: (blockTimestamp + maxTimeForProofGeneration).toString(), refundAddress: await prover.getAddress(), }, { mockToken: tokenToUse, proofMarketplace, - generatorRegistry, + proverManager, priorityLog, errorLibrary, entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, }, 1, ); @@ -186,17 +212,22 @@ describe("Proof Market Place for Plonk Verifier", () => { { mockToken: tokenToUse, proofMarketplace, - generatorRegistry, + proverManager, priorityLog, errorLibrary, entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, }, - askId, + bidId, generator, ); // console.log({ plonkProof }); let proofBytes = abiCoder.encode(["bytes"], [plonkProof]); - await expect(proofMarketplace.submitProof(askId, proofBytes)).to.emit(proofMarketplace, "ProofCreated").withArgs(askId, proofBytes); + await expect(proofMarketplace.submitProof(bidId, proofBytes)).to.emit(proofMarketplace, "ProofCreated").withArgs(bidId, proofBytes); }); }); diff --git a/test/ProorMarketPlaceWithTransferVerifier.ts b/test/ProofMarketPlaceWithTransferVerifier.ts similarity index 72% rename from test/ProorMarketPlaceWithTransferVerifier.ts rename to test/ProofMarketPlaceWithTransferVerifier.ts index 80eaffc..6adeaf8 100644 --- a/test/ProorMarketPlaceWithTransferVerifier.ts +++ b/test/ProofMarketPlaceWithTransferVerifier.ts @@ -1,44 +1,55 @@ -import { expect } from "chai"; -import { ethers, upgrades } from "hardhat"; -import { Signer } from "ethers"; -import { BigNumber } from "bignumber.js"; -import { - EntityKeyRegistry, - Error, - GeneratorRegistry, - IVerifier, - IVerifier__factory, - MockToken, - PriorityLog, - ProofMarketplace, - TransferVerifier__factory, - Transfer_verifier_wrapper__factory, -} from "../typechain-types"; +import { BigNumber } from 'bignumber.js'; +import { expect } from 'chai'; +import { Signer } from 'ethers'; +import { ethers } from 'hardhat'; import { - GeneratorData, GodEnclavePCRS, MarketData, + marketDataToBytes, MockEnclave, - MockGeneratorPCRS, MockIVSPCRS, MockMEPCRS, - generatorDataToBytes, - marketDataToBytes, + MockProverPCRS, + ProverData, + proverDataToBytes, setup, skipBlocks, -} from "../helpers"; - -import * as transfer_verifier_inputs from "../helpers/sample/transferVerifier/transfer_inputs.json"; -import * as transfer_verifier_proof from "../helpers/sample/transferVerifier/transfer_proof.json"; +} from '../helpers'; +import * as transfer_verifier_inputs + from '../helpers/sample/transferVerifier/transfer_inputs.json'; +import * as transfer_verifier_proof + from '../helpers/sample/transferVerifier/transfer_proof.json'; +import { + AttestationVerifier, + EntityKeyRegistry, + Error, + IVerifier, + IVerifier__factory, + MockToken, + NativeStaking, + PriorityLog, + ProofMarketplace, + ProverManager, + StakingManager, + SymbioticStaking, + SymbioticStakingReward, + Transfer_verifier_wrapper__factory, + TransferVerifier__factory, +} from '../typechain-types'; describe("Proof Market Place for Transfer Verifier", () => { let proofMarketplace: ProofMarketplace; - let generatorRegistry: GeneratorRegistry; + let proverManager: ProverManager; let tokenToUse: MockToken; let priorityLog: PriorityLog; let errorLibrary: Error; let entityKeyRegistry: EntityKeyRegistry; + let stakingManager: StakingManager; + let nativeStaking: NativeStaking; + let symbioticStaking: SymbioticStaking; + let symbioticStakingReward: SymbioticStakingReward; + let attestationVerifier: AttestationVerifier; let signers: Signer[]; let admin: Signer; @@ -51,13 +62,13 @@ describe("Proof Market Place for Transfer Verifier", () => { let marketSetupData: MarketData; let marketId: string; - let generatorData: GeneratorData; + let proverData: ProverData; let iverifier: IVerifier; const ivsEnclave = new MockEnclave(MockIVSPCRS); const matchingEngineEnclave = new MockEnclave(MockMEPCRS); - const generatorEnclave = new MockEnclave(MockGeneratorPCRS); + const proverEnclave = new MockEnclave(MockProverPCRS); const godEnclave = new MockEnclave(GodEnclavePCRS); const totalTokenSupply: BigNumber = new BigNumber(10).pow(24).multipliedBy(9); @@ -89,7 +100,7 @@ describe("Proof Market Place for Transfer Verifier", () => { inputOuputVerifierUrl: "this should be nclave url", }; - generatorData = { + proverData = { name: "some custom name for the generator", }; @@ -149,28 +160,32 @@ describe("Proof Market Place for Transfer Verifier", () => { marketSetupData.inputOuputVerifierUrl, iverifier, generator, - generatorDataToBytes(generatorData), + proverDataToBytes(proverData), ivsEnclave, matchingEngineEnclave, - generatorEnclave, + proverEnclave, minRewardByGenerator, generatorComputeAllocation, computeGivenToNewMarket, godEnclave, ); proofMarketplace = data.proofMarketplace; - generatorRegistry = data.generatorRegistry; + proverManager = data.proverManager; tokenToUse = data.mockToken; priorityLog = data.priorityLog; errorLibrary = data.errorLibrary; entityKeyRegistry = data.entityKeyRegistry; - + stakingManager = data.stakingManager; + nativeStaking = data.nativeStaking; + symbioticStaking = data.symbioticStaking; + symbioticStakingReward = data.symbioticStakingReward; + attestationVerifier = data.attestationVerifier; await transferVerifierWrapper.setProofMarketplaceContract(await proofMarketplace.getAddress()); marketId = new BigNumber((await proofMarketplace.marketCounter()).toString()).minus(1).toFixed(); - let marketActivationDelay = await proofMarketplace.MARKET_ACTIVATION_DELAY(); - await skipBlocks(ethers, new BigNumber(marketActivationDelay.toString()).toNumber()); + // let marketActivationDelay = await proofMarketplace.MARKET_ACTIVATION_DELAY(); + // await skipBlocks(ethers, new BigNumber(marketActivationDelay.toString()).toNumber()); }); it("Check transfer verifier", async () => { let abiCoder = new ethers.AbiCoder(); @@ -188,30 +203,36 @@ describe("Proof Market Place for Transfer Verifier", () => { ], ); // console.log({ inputBytes }); - const latestBlock = await ethers.provider.getBlockNumber(); + const latestBlock = await ethers.provider.getBlock("latest"); + const blockTimestamp = latestBlock?.timestamp ?? 0; let assignmentExpiry = 100; // in blocks - let timeTakenForProofGeneration = 100000000; // keep a large number, but only for tests - let maxTimeForProofGeneration = 10000; // in blocks + let timeForProofGeneration = 10000; // keep a large number, but only for tests + let maxTimeForProofGeneration = 24 * 60 * 60; // 1 day - const askId = await setup.createAsk( + const bidId = await setup.createBid( prover, tokenHolder, { marketId, proverData: inputBytes, reward: rewardForProofGeneration.toFixed(), - expiry: assignmentExpiry + latestBlock, - timeTakenForProofGeneration, - deadline: latestBlock + maxTimeForProofGeneration, + expiry: (assignmentExpiry + blockTimestamp).toString(), + timeForProofGeneration: timeForProofGeneration.toString(), + deadline: (blockTimestamp + maxTimeForProofGeneration).toString(), refundAddress: await prover.getAddress(), }, { mockToken: tokenToUse, proofMarketplace, - generatorRegistry, + proverManager, priorityLog, errorLibrary, entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, }, 1, ); @@ -222,12 +243,17 @@ describe("Proof Market Place for Transfer Verifier", () => { { mockToken: tokenToUse, proofMarketplace, - generatorRegistry, + proverManager, priorityLog, errorLibrary, entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, }, - askId, + bidId, generator, ); @@ -246,6 +272,6 @@ describe("Proof Market Place for Transfer Verifier", () => { ], ], ); - await expect(proofMarketplace.submitProof(askId, proofBytes)).to.emit(proofMarketplace, "ProofCreated").withArgs(askId, proofBytes); + await expect(proofMarketplace.submitProof(bidId, proofBytes)).to.emit(proofMarketplace, "ProofCreated").withArgs(bidId, proofBytes); }); }); diff --git a/test/ProorMarketPlaceWithTreeVerifier.ts b/test/ProofMarketPlaceWithTreeVerifier.ts similarity index 64% rename from test/ProorMarketPlaceWithTreeVerifier.ts rename to test/ProofMarketPlaceWithTreeVerifier.ts index 8ba957c..e193b29 100644 --- a/test/ProorMarketPlaceWithTreeVerifier.ts +++ b/test/ProofMarketPlaceWithTreeVerifier.ts @@ -1,45 +1,57 @@ -import { expect } from "chai"; -import { ethers, upgrades } from "hardhat"; -import { Signer } from "ethers"; -import { BigNumber } from "bignumber.js"; +import { BigNumber } from 'bignumber.js'; +import { expect } from 'chai'; +import { Signer } from 'ethers'; +import { + ethers, + upgrades, +} from 'hardhat'; + +import { + GodEnclavePCRS, + MarketData, + marketDataToBytes, + MockEnclave, + MockIVSPCRS, + MockMEPCRS, + MockProverPCRS, + ProverData, + proverDataToBytes, + setup, + skipBlocks, +} from '../helpers'; import { AttestationVerifier, AttestationVerifier__factory, EntityKeyRegistry, Error, - GeneratorRegistry, IVerifier, IVerifier__factory, MockToken, + NativeStaking, PriorityLog, ProofMarketplace, + ProverManager, + StakingManager, + SymbioticStaking, + SymbioticStakingReward, Tee_verifier_wrapper, Tee_verifier_wrapper__factory, Tee_verifier_wrapper_factory__factory, -} from "../typechain-types"; - -import { - GeneratorData, - GodEnclavePCRS, - MarketData, - MockEnclave, - MockGeneratorPCRS, - MockIVSPCRS, - MockMEPCRS, - generatorDataToBytes, - marketDataToBytes, - setup, - skipBlocks, -} from "../helpers"; +} from '../typechain-types'; describe("Proof Market Place for Tee Verifier", () => { let proofMarketplace: ProofMarketplace; - let generatorRegistry: GeneratorRegistry; + let proverManager: ProverManager; let tokenToUse: MockToken; let priorityLog: PriorityLog; let errorLibrary: Error; let entityKeyRegistry: EntityKeyRegistry; + let stakingManager: StakingManager; + let nativeStaking: NativeStaking; + let symbioticStaking: SymbioticStaking; + let symbioticStakingReward: SymbioticStakingReward; + let signers: Signer[]; let admin: Signer; let tokenHolder: Signer; @@ -51,7 +63,7 @@ describe("Proof Market Place for Tee Verifier", () => { let marketSetupData: MarketData; let marketId: string; - let generatorData: GeneratorData; + let proverData: ProverData; let attestationVerifier: AttestationVerifier; let tee_verifier_wrapper: Tee_verifier_wrapper; @@ -59,14 +71,14 @@ describe("Proof Market Place for Tee Verifier", () => { const ivsEnclave = new MockEnclave(MockIVSPCRS); const matchingEngineEnclave = new MockEnclave(MockMEPCRS); - const generatorEnclave = new MockEnclave(MockGeneratorPCRS); + const proverEnclave = new MockEnclave(MockProverPCRS); const godEnclave = new MockEnclave(GodEnclavePCRS); const totalTokenSupply: BigNumber = new BigNumber(10).pow(24).multipliedBy(9); const generatorStakingAmount: BigNumber = new BigNumber(10).pow(18).multipliedBy(1000).multipliedBy(2).minus(1231); // use any random number const generatorSlashingPenalty: BigNumber = new BigNumber(10).pow(16).multipliedBy(93).minus(182723423); // use any random number const marketCreationCost: BigNumber = new BigNumber(10).pow(18).multipliedBy(1213).minus(23746287365); // use any random number - const generatorComputeAllocation = new BigNumber(10).pow(19).minus("12782387").div(123).multipliedBy(98); + const proverComputeAllocation = new BigNumber(10).pow(19).minus("12782387").div(123).multipliedBy(98); const computeGivenToNewMarket = new BigNumber(10).pow(19).minus("98897").div(9233).multipliedBy(98); @@ -91,7 +103,7 @@ describe("Proof Market Place for Tee Verifier", () => { inputOuputVerifierUrl: "this should be nclave url", }; - generatorData = { + proverData = { name: "some custom name for the generator", }; @@ -109,10 +121,10 @@ describe("Proof Market Place for Tee Verifier", () => { tee_verifier_wrapper = await new Tee_verifier_wrapper__factory(admin).deploy( await admin.getAddress(), await attestationVerifier.getAddress(), - [generatorEnclave.getPcrRlp()], + [proverEnclave.getPcrRlp()], ); - let tee_verifier_key_attestation = await generatorEnclave.getVerifiedAttestation(godEnclave); + let tee_verifier_key_attestation = await proverEnclave.getVerifiedAttestation(godEnclave); await tee_verifier_wrapper.verifyKey(tee_verifier_key_attestation); iverifier = IVerifier__factory.connect(await tee_verifier_wrapper.getAddress(), admin); @@ -133,26 +145,30 @@ describe("Proof Market Place for Tee Verifier", () => { marketSetupData.inputOuputVerifierUrl, iverifier, generator, - generatorDataToBytes(generatorData), + proverDataToBytes(proverData), ivsEnclave, matchingEngineEnclave, - generatorEnclave, + proverEnclave, minRewardByGenerator, - generatorComputeAllocation, + proverComputeAllocation, computeGivenToNewMarket, godEnclave, ); proofMarketplace = data.proofMarketplace; - generatorRegistry = data.generatorRegistry; + proverManager = data.proverManager; tokenToUse = data.mockToken; priorityLog = data.priorityLog; errorLibrary = data.errorLibrary; entityKeyRegistry = data.entityKeyRegistry; - + stakingManager = data.stakingManager; + nativeStaking = data.nativeStaking; + symbioticStaking = data.symbioticStaking; + symbioticStakingReward = data.symbioticStakingReward; + attestationVerifier = data.attestationVerifier; marketId = new BigNumber((await proofMarketplace.marketCounter()).toString()).minus(1).toFixed(); - let marketActivationDelay = await proofMarketplace.MARKET_ACTIVATION_DELAY(); - await skipBlocks(ethers, new BigNumber(marketActivationDelay.toString()).toNumber()); + // let marketActivationDelay = await proofMarketplace.MARKET_ACTIVATION_DELAY(); + // await skipBlocks(ethers, new BigNumber(marketActivationDelay.toString()).toNumber()); }); it("Check tee verifier deployer", async () => { @@ -169,30 +185,37 @@ describe("Proof Market Place for Tee Verifier", () => { let inputBytes = "0x1234"; let proofBytes = "0x0987"; // console.log({ inputBytes }); - const latestBlock = await ethers.provider.getBlockNumber(); + const latestBlock = await ethers.provider.getBlock("latest"); + const blockTimestamp = latestBlock?.timestamp ?? 0; + let assignmentExpiry = 100; // in blocks - let timeTakenForProofGeneration = 100000000; // keep a large number, but only for tests - let maxTimeForProofGeneration = 10000; // in blocks + let timeForProofGeneration = 10000; // keep a large number, but only for tests + let maxTimeForProofGeneration = 24 * 60 * 60; // 1 day - const askId = await setup.createAsk( + const bidId = await setup.createBid( prover, tokenHolder, { marketId, proverData: inputBytes, reward: rewardForProofGeneration.toFixed(), - expiry: assignmentExpiry + latestBlock, - timeTakenForProofGeneration, - deadline: latestBlock + maxTimeForProofGeneration, + expiry: (assignmentExpiry + blockTimestamp).toString(), + timeForProofGeneration: timeForProofGeneration.toString(), + deadline: (blockTimestamp + maxTimeForProofGeneration).toString(), refundAddress: await prover.getAddress(), }, { - mockToken: tokenToUse, + mockToken: tokenToUse, proofMarketplace, - generatorRegistry, + proverManager, priorityLog, errorLibrary, entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, }, 1, ); @@ -203,53 +226,65 @@ describe("Proof Market Place for Tee Verifier", () => { { mockToken: tokenToUse, proofMarketplace, - generatorRegistry, + proverManager, priorityLog, errorLibrary, entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, }, - askId, + bidId, generator, ); let abiCoder = new ethers.AbiCoder(); const messageBytes = abiCoder.encode(["bytes", "bytes"], [inputBytes, proofBytes]); let digest = ethers.keccak256(messageBytes); - let signature = await generatorEnclave.signMessage(ethers.getBytes(digest)); + let signature = await proverEnclave.signMessage(ethers.getBytes(digest)); let proofToSend = abiCoder.encode(["bytes", "bytes", "bytes"], [inputBytes, proofBytes, signature]); - await expect(proofMarketplace.submitProof(askId, proofToSend)).to.emit(proofMarketplace, "ProofCreated").withArgs(askId, proofToSend); + await expect(proofMarketplace.submitProof(bidId, proofToSend)).to.emit(proofMarketplace, "ProofCreated").withArgs(bidId, proofToSend); }); it("Check tee verifier, after adding new image to tee verifier", async () => { let inputBytes = "0x1234"; let proofBytes = "0x0987"; // console.log({ inputBytes }); - const latestBlock = await ethers.provider.getBlockNumber(); + const latestBlock = await ethers.provider.getBlock("latest"); + const blockTimestamp = latestBlock?.timestamp ?? 0; + let assignmentExpiry = 100; // in blocks - let timeTakenForProofGeneration = 100000000; // keep a large number, but only for tests - let maxTimeForProofGeneration = 10000; // in blocks + let timeForProofGeneration = 10000; // keep a large number, but only for tests + let maxTimeForProofGeneration = 24 * 60 * 60; // 1 day - const askId = await setup.createAsk( + const bidId = await setup.createBid( prover, tokenHolder, { marketId, proverData: inputBytes, reward: rewardForProofGeneration.toFixed(), - expiry: assignmentExpiry + latestBlock, - timeTakenForProofGeneration, - deadline: latestBlock + maxTimeForProofGeneration, + expiry: (assignmentExpiry + blockTimestamp).toString(), + timeForProofGeneration: timeForProofGeneration.toString(), + deadline: (blockTimestamp + maxTimeForProofGeneration).toString(), refundAddress: await prover.getAddress(), }, { mockToken: tokenToUse, proofMarketplace, - generatorRegistry, + proverManager, priorityLog, errorLibrary, entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, }, 1, ); @@ -260,12 +295,17 @@ describe("Proof Market Place for Tee Verifier", () => { { mockToken: tokenToUse, proofMarketplace, - generatorRegistry, + proverManager, priorityLog, errorLibrary, entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, }, - askId, + bidId, generator, ); @@ -288,37 +328,44 @@ describe("Proof Market Place for Tee Verifier", () => { let proofToSend = abiCoder.encode(["bytes", "bytes", "bytes"], [inputBytes, proofBytes, signature]); - await expect(proofMarketplace.submitProof(askId, proofToSend)).to.emit(proofMarketplace, "ProofCreated").withArgs(askId, proofToSend); + await expect(proofMarketplace.submitProof(bidId, proofToSend)).to.emit(proofMarketplace, "ProofCreated").withArgs(bidId, proofToSend); }); it("Shoulf fail: if inputs don't match when used to generate proof", async () => { let inputBytes = "0x1234"; let proofBytes = "0x0987"; // console.log({ inputBytes }); - const latestBlock = await ethers.provider.getBlockNumber(); + const latestBlock = await ethers.provider.getBlock("latest"); + const blockTimestamp = latestBlock?.timestamp ?? 0; + let assignmentExpiry = 100; // in blocks - let timeTakenForProofGeneration = 100000000; // keep a large number, but only for tests - let maxTimeForProofGeneration = 10000; // in blocks + let timeForProofGeneration = 10000; // keep a large number, but only for tests + let maxTimeForProofGeneration = 24 * 60 * 60; // 1 day - const askId = await setup.createAsk( + const bidId = await setup.createBid( prover, tokenHolder, { marketId, proverData: inputBytes, reward: rewardForProofGeneration.toFixed(), - expiry: assignmentExpiry + latestBlock, - timeTakenForProofGeneration, - deadline: latestBlock + maxTimeForProofGeneration, + expiry: (assignmentExpiry + blockTimestamp).toString(), + timeForProofGeneration: timeForProofGeneration.toString(), + deadline: (blockTimestamp + maxTimeForProofGeneration).toString(), refundAddress: await prover.getAddress(), }, { mockToken: tokenToUse, proofMarketplace, - generatorRegistry, + proverManager, priorityLog, errorLibrary, entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, }, 1, ); @@ -329,12 +376,17 @@ describe("Proof Market Place for Tee Verifier", () => { { mockToken: tokenToUse, proofMarketplace, - generatorRegistry, + proverManager, priorityLog, errorLibrary, entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, }, - askId, + bidId, generator, ); @@ -344,41 +396,48 @@ describe("Proof Market Place for Tee Verifier", () => { const messageBytes = abiCoder.encode(["bytes", "bytes"], [wrongInputs, proofBytes]); let digest = ethers.keccak256(messageBytes); - let signature = await generatorEnclave.signMessage(ethers.getBytes(digest)); + let signature = await proverEnclave.signMessage(ethers.getBytes(digest)); let proofToSend = abiCoder.encode(["bytes", "bytes", "bytes"], [wrongInputs, proofBytes, signature]); - await expect(proofMarketplace.submitProof(askId, proofToSend)).to.be.revertedWithCustomError(proofMarketplace, "InvalidInputs"); + await expect(proofMarketplace.submitProof(bidId, proofToSend)).to.be.revertedWithCustomError(proofMarketplace, "InvalidInputs"); }); it("Shoulf fail: if wrong signature is provided", async () => { let inputBytes = "0x1234"; let proofBytes = "0x0987"; // console.log({ inputBytes }); - const latestBlock = await ethers.provider.getBlockNumber(); + const latestBlock = await ethers.provider.getBlock("latest"); + const blockTimestamp = latestBlock?.timestamp ?? 0; + let assignmentExpiry = 100; // in blocks - let timeTakenForProofGeneration = 100000000; // keep a large number, but only for tests - let maxTimeForProofGeneration = 10000; // in blocks + let timeForProofGeneration = 10000; // keep a large number, but only for tests + let maxTimeForProofGeneration = 24 * 60 * 60; // 1 day - const askId = await setup.createAsk( + const bidId = await setup.createBid( prover, tokenHolder, { marketId, proverData: inputBytes, reward: rewardForProofGeneration.toFixed(), - expiry: assignmentExpiry + latestBlock, - timeTakenForProofGeneration, - deadline: latestBlock + maxTimeForProofGeneration, + expiry: (assignmentExpiry + blockTimestamp).toString(), + timeForProofGeneration: timeForProofGeneration.toString(), + deadline: (blockTimestamp + maxTimeForProofGeneration).toString(), refundAddress: await prover.getAddress(), }, { mockToken: tokenToUse, proofMarketplace, - generatorRegistry, + proverManager, priorityLog, errorLibrary, entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, }, 1, ); @@ -389,12 +448,17 @@ describe("Proof Market Place for Tee Verifier", () => { { mockToken: tokenToUse, proofMarketplace, - generatorRegistry, + proverManager, priorityLog, errorLibrary, entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, }, - askId, + bidId, generator, ); @@ -404,11 +468,11 @@ describe("Proof Market Place for Tee Verifier", () => { const messageBytes = abiCoder.encode(["bytes", "bytes"], [wrongInputs, proofBytes]); let digest = ethers.keccak256(messageBytes); - let wrongSignature = await generatorEnclave.signMessage(ethers.getBytes(digest)); + let wrongSignature = await proverEnclave.signMessage(ethers.getBytes(digest)); let proofToSend = abiCoder.encode(["bytes", "bytes", "bytes"], [inputBytes, proofBytes, wrongSignature]); - await expect(proofMarketplace.submitProof(askId, proofToSend)).to.be.revertedWithCustomError( + await expect(proofMarketplace.submitProof(bidId, proofToSend)).to.be.revertedWithCustomError( tee_verifier_wrapper, "AttestationAutherKeyNotVerified", ); @@ -418,30 +482,37 @@ describe("Proof Market Place for Tee Verifier", () => { let inputBytes = "0x1234"; let proofBytes = "0x0987"; // console.log({ inputBytes }); - const latestBlock = await ethers.provider.getBlockNumber(); + const latestBlock = await ethers.provider.getBlock("latest"); + const blockTimestamp = latestBlock?.timestamp ?? 0; + let assignmentExpiry = 100; // in blocks - let timeTakenForProofGeneration = 100000000; // keep a large number, but only for tests - let maxTimeForProofGeneration = 10000; // in blocks + let timeForProofGeneration = 10000; // keep a large number, but only for tests + let maxTimeForProofGeneration = 24 * 60 * 60; // 1 day - const askId = await setup.createAsk( + const bidId = await setup.createBid( prover, tokenHolder, { marketId, proverData: inputBytes, reward: rewardForProofGeneration.toFixed(), - expiry: assignmentExpiry + latestBlock, - timeTakenForProofGeneration, - deadline: latestBlock + maxTimeForProofGeneration, + expiry: (assignmentExpiry + blockTimestamp).toString(), + timeForProofGeneration: timeForProofGeneration.toString(), + deadline: (blockTimestamp + maxTimeForProofGeneration).toString(), refundAddress: await prover.getAddress(), }, { mockToken: tokenToUse, proofMarketplace, - generatorRegistry, + proverManager, priorityLog, errorLibrary, entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, }, 1, ); @@ -452,12 +523,17 @@ describe("Proof Market Place for Tee Verifier", () => { { mockToken: tokenToUse, proofMarketplace, - generatorRegistry, + proverManager, priorityLog, errorLibrary, entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, }, - askId, + bidId, generator, ); @@ -471,7 +547,7 @@ describe("Proof Market Place for Tee Verifier", () => { let proofToSend = abiCoder.encode(["bytes", "bytes", "bytes"], [inputBytes, proofBytes, signature]); - await expect(proofMarketplace.submitProof(askId, proofToSend)).to.be.revertedWithCustomError( + await expect(proofMarketplace.submitProof(bidId, proofToSend)).to.be.revertedWithCustomError( tee_verifier_wrapper, "AttestationAutherKeyNotVerified", ); diff --git a/test/ProorMarketPlaceWithZkSync.ts b/test/ProofMarketPlaceWithZkSync.ts similarity index 69% rename from test/ProorMarketPlaceWithZkSync.ts rename to test/ProofMarketPlaceWithZkSync.ts index a974b41..6017c60 100644 --- a/test/ProorMarketPlaceWithZkSync.ts +++ b/test/ProofMarketPlaceWithZkSync.ts @@ -1,43 +1,52 @@ -import { expect } from "chai"; -import { ethers, upgrades } from "hardhat"; -import { Signer } from "ethers"; -import { BigNumber } from "bignumber.js"; -import { - GeneratorRegistry, - IVerifier, - IVerifier__factory, - MockToken, - PriorityLog, - ProofMarketplace, - ZkSyncVerifier__factory, - Zksync_verifier_wrapper__factory, - Error, - EntityKeyRegistry, -} from "../typechain-types"; +import { BigNumber } from 'bignumber.js'; +import { expect } from 'chai'; +import { Signer } from 'ethers'; +import { ethers } from 'hardhat'; import { - GeneratorData, GodEnclavePCRS, MarketData, + marketDataToBytes, MockEnclave, - MockGeneratorPCRS, MockIVSPCRS, MockMEPCRS, - generatorDataToBytes, - marketDataToBytes, + MockProverPCRS, + ProverData, + proverDataToBytes, setup, skipBlocks, -} from "../helpers"; - -import * as zksync_data from "../helpers/sample/zksync/data.json"; +} from '../helpers'; +import * as zksync_data from '../helpers/sample/zksync/data.json'; +import { + AttestationVerifier, + EntityKeyRegistry, + Error, + IVerifier, + IVerifier__factory, + MockToken, + NativeStaking, + PriorityLog, + ProofMarketplace, + ProverManager, + StakingManager, + SymbioticStaking, + SymbioticStakingReward, + Zksync_verifier_wrapper__factory, + ZkSyncVerifier__factory, +} from '../typechain-types'; describe("Proof Market Place for zksync Verifier", () => { let proofMarketplace: ProofMarketplace; - let generatorRegistry: GeneratorRegistry; + let proverManager: ProverManager; let tokenToUse: MockToken; + let attestationVerifier: AttestationVerifier; let priorityLog: PriorityLog; let errorLibrary: Error; let entityKeyRegistry: EntityKeyRegistry; + let stakingManager: StakingManager; + let nativeStaking: NativeStaking; + let symbioticStaking: SymbioticStaking; + let symbioticStakingReward: SymbioticStakingReward; let signers: Signer[]; let admin: Signer; @@ -50,13 +59,13 @@ describe("Proof Market Place for zksync Verifier", () => { let marketSetupData: MarketData; let marketId: string; - let generatorData: GeneratorData; + let proverData: ProverData; let iverifier: IVerifier; const ivsEnclave = new MockEnclave(MockIVSPCRS); const matchingEngineEnclave = new MockEnclave(MockMEPCRS); - const generatorEnclave = new MockEnclave(MockGeneratorPCRS); + const proverEnclave = new MockEnclave(MockProverPCRS); const godEnclave = new MockEnclave(GodEnclavePCRS); const totalTokenSupply: BigNumber = new BigNumber(10).pow(24).multipliedBy(9); @@ -88,7 +97,7 @@ describe("Proof Market Place for zksync Verifier", () => { inputOuputVerifierUrl: "this should be nclave url", }; - generatorData = { + proverData = { name: "some custom name for the generator", }; @@ -123,56 +132,67 @@ describe("Proof Market Place for zksync Verifier", () => { marketSetupData.inputOuputVerifierUrl, iverifier, generator, - generatorDataToBytes(generatorData), + proverDataToBytes(proverData), ivsEnclave, matchingEngineEnclave, - generatorEnclave, + proverEnclave, minRewardByGenerator, generatorComputeAllocation, computeGivenToNewMarket, godEnclave, ); proofMarketplace = data.proofMarketplace; - generatorRegistry = data.generatorRegistry; + proverManager = data.proverManager; tokenToUse = data.mockToken; priorityLog = data.priorityLog; errorLibrary = data.errorLibrary; entityKeyRegistry = data.entityKeyRegistry; - + stakingManager = data.stakingManager; + nativeStaking = data.nativeStaking; + symbioticStaking = data.symbioticStaking; + symbioticStakingReward = data.symbioticStakingReward; + attestationVerifier = data.attestationVerifier; marketId = new BigNumber((await proofMarketplace.marketCounter()).toString()).minus(1).toFixed(); - let marketActivationDelay = await proofMarketplace.MARKET_ACTIVATION_DELAY(); - await skipBlocks(ethers, new BigNumber(marketActivationDelay.toString()).toNumber()); + // let marketActivationDelay = await proofMarketplace.MARKET_ACTIVATION_DELAY(); + // await skipBlocks(ethers, new BigNumber(marketActivationDelay.toString()).toNumber()); }); it("Check zksync verifier", async () => { let abiCoder = new ethers.AbiCoder(); let inputBytes = abiCoder.encode(["uint256[]"], [zksync_data.publicInputs]); // console.log({ inputBytes }); - const latestBlock = await ethers.provider.getBlockNumber(); + const latestBlock = await ethers.provider.getBlock("latest"); + const blockTimestamp = latestBlock?.timestamp ?? 0; + let assignmentExpiry = 100; // in blocks - let timeTakenForProofGeneration = 100000000; // keep a large number, but only for tests - let maxTimeForProofGeneration = 10000; // in blocks + let timeForProofGeneration = 10000; // keep a large number, but only for tests + let maxTimeForProofGeneration = 24 * 60 * 60; // 1 day - const askId = await setup.createAsk( + const bidId = await setup.createBid( prover, tokenHolder, { marketId, proverData: inputBytes, reward: rewardForProofGeneration.toFixed(), - expiry: assignmentExpiry + latestBlock, - timeTakenForProofGeneration, - deadline: latestBlock + maxTimeForProofGeneration, + expiry: (assignmentExpiry + blockTimestamp).toString(), + timeForProofGeneration: timeForProofGeneration.toString(), + deadline: (blockTimestamp + maxTimeForProofGeneration).toString(), refundAddress: await prover.getAddress(), }, { mockToken: tokenToUse, proofMarketplace, - generatorRegistry, + proverManager, priorityLog, errorLibrary, entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, }, 1, ); @@ -183,16 +203,21 @@ describe("Proof Market Place for zksync Verifier", () => { { mockToken: tokenToUse, proofMarketplace, - generatorRegistry, + proverManager, priorityLog, errorLibrary, entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, }, - askId, + bidId, generator, ); let proofBytes = abiCoder.encode(["uint256[]", "uint256[]"], [zksync_data.serializedProof, zksync_data.recursiveAggregationInput]); - await expect(proofMarketplace.submitProof(askId, proofBytes)).to.emit(proofMarketplace, "ProofCreated").withArgs(askId, proofBytes); + await expect(proofMarketplace.submitProof(bidId, proofBytes)).to.emit(proofMarketplace, "ProofCreated").withArgs(bidId, proofBytes); }); }); diff --git a/test/Prover.ts b/test/Prover.ts new file mode 100644 index 0000000..94c3e2a --- /dev/null +++ b/test/Prover.ts @@ -0,0 +1,999 @@ +import { BigNumber } from 'bignumber.js'; +import { expect } from 'chai'; +import { + Provider, + Signer, +} from 'ethers'; +import { ethers } from 'hardhat'; + +import { + BridgeEnclavePCRS, + GodEnclavePCRS, + MarketData, + marketDataToBytes, + MockEnclave, + MockIVSPCRS, + MockMEPCRS, + MockProverPCRS, + ProverData, + proverDataToBytes, + setup, +} from '../helpers'; +import * as transfer_verifier_inputs + from '../helpers/sample/transferVerifier/transfer_inputs.json'; +import * as transfer_verifier_proof + from '../helpers/sample/transferVerifier/transfer_proof.json'; +import * as invalid_transfer_verifier_proof + from '../helpers/sample/zkbVerifier/transfer_proof.json'; +import { + proverSelfStake, + stakingSetup, + submitSlashResult, + submitVaultSnapshot, + TaskSlashed, + VaultSnapshot, +} from '../helpers/setup'; +import { + AttestationVerifier, + EntityKeyRegistry, + Error, + IVerifier, + IVerifier__factory, + MockToken, + NativeStaking, + POND, + PriorityLog, + ProofMarketplace, + ProverManager, + StakingManager, + SymbioticStaking, + SymbioticStakingReward, + Transfer_verifier_wrapper__factory, + TransferVerifier__factory, + WETH, +} from '../typechain-types'; + +describe("Checking Prover's multiple compute", () => { + let proofMarketplace: ProofMarketplace; + let proverManager: ProverManager; + // let usdc: MockToken; + let priorityLog: PriorityLog; + let errorLibrary: Error; + let entityKeyRegistry: EntityKeyRegistry; + let iverifier: IVerifier; + + let stakingManager: StakingManager; + let nativeStaking: NativeStaking; + let symbioticStaking: SymbioticStaking; + let symbioticStakingReward: SymbioticStakingReward; + let attestationVerifier: AttestationVerifier; + let pond: POND; + let weth: WETH; + let usdc: MockToken; + + let signers: Signer[]; + let admin: Signer; + let tokenHolder: Signer; + let treasury: Signer; + // TODO: generator -> prover, prover -> user + let prover: Signer; + let generator: Signer; + let user: Signer; + let vault1: Signer; + let vault2: Signer; + + let marketCreator: Signer; + let marketSetupData: MarketData; + let marketId: string; + + let generatorData: ProverData; + + /* Enclaves */ + const ivsEnclave = new MockEnclave(MockIVSPCRS); + const matchingEngineEnclave = new MockEnclave(MockMEPCRS); + const generatorEnclave = new MockEnclave(MockProverPCRS); + const godEnclave = new MockEnclave(GodEnclavePCRS); + const bridgeEnclave = new MockEnclave(BridgeEnclavePCRS); + + /* Config */ + const totalTokenSupply: BigNumber = new BigNumber(10).pow(24).multipliedBy(9); + const generatorStakingAmount: BigNumber = new BigNumber(10).pow(18).multipliedBy(1000).multipliedBy(2).minus(1231); // use any random number + const generatorSlashingPenalty: BigNumber = new BigNumber(10).pow(16).multipliedBy(93).minus(182723423); // use any random number + const marketCreationCost: BigNumber = new BigNumber(10).pow(18).multipliedBy(1213).minus(23746287365); // use any random number + const generatorComputeAllocation = new BigNumber(10).pow(19).minus("12782387").div(123).multipliedBy(98); + const computeGivenToNewMarket = new BigNumber(10).pow(19).minus("98897").div(9233).multipliedBy(98); + const rewardForProofGeneration = new BigNumber(10).pow(18).multipliedBy(200); + const minRewardByGenerator = new BigNumber(10).pow(18).multipliedBy(199); + + const refreshSetup = async ( + modifiedComputeGivenToNewMarket = computeGivenToNewMarket, + modifiedGeneratorStakingAmount = generatorStakingAmount, + ): Promise => { + signers = await ethers.getSigners(); + admin = signers[0]; + tokenHolder = signers[1]; + treasury = signers[2]; + marketCreator = signers[3]; + prover = signers[4]; + generator = signers[5]; + user = signers[6]; + + marketSetupData = { + zkAppName: "transfer verifier", + proverCode: "url of the prover code", + verifierCode: "url of the verifier code", + proverOysterImage: "oyster image link for the prover", + setupCeremonyData: ["first phase", "second phase", "third phase"], + inputOuputVerifierUrl: "this should be nclave url", + }; + + generatorData = { + name: "some custom name for the generator", + }; + + await admin.sendTransaction({ to: ivsEnclave.getAddress(), value: "1000000000000000000" }); + await admin.sendTransaction({ to: matchingEngineEnclave.getAddress(), value: "1000000000000000000" }); + + const transferVerifier = await new TransferVerifier__factory(admin).deploy(); + + let abiCoder = new ethers.AbiCoder(); + + let inputBytes = abiCoder.encode( + ["uint256[5]"], + [ + [ + transfer_verifier_inputs[0], + transfer_verifier_inputs[1], + transfer_verifier_inputs[2], + transfer_verifier_inputs[3], + transfer_verifier_inputs[4], + ], + ], + ); + + let proofBytes = abiCoder.encode( + ["uint256[8]"], + [ + [ + transfer_verifier_proof.a[0], + transfer_verifier_proof.a[1], + transfer_verifier_proof.b[0][0], + transfer_verifier_proof.b[0][1], + transfer_verifier_proof.b[1][0], + transfer_verifier_proof.b[1][1], + transfer_verifier_proof.c[0], + transfer_verifier_proof.c[1], + ], + ], + ); + const transferVerifierWrapper = await new Transfer_verifier_wrapper__factory(admin).deploy( + await transferVerifier.getAddress(), + inputBytes, + proofBytes, + ); + + iverifier = IVerifier__factory.connect(await transferVerifierWrapper.getAddress(), admin); + + let treasuryAddress = await treasury.getAddress(); + + let data = await setup.rawSetup( + admin, + tokenHolder, + totalTokenSupply, + modifiedGeneratorStakingAmount, + generatorSlashingPenalty, + treasuryAddress, + marketCreationCost, + marketCreator, + marketDataToBytes(marketSetupData), + marketSetupData.inputOuputVerifierUrl, + iverifier, + generator, + proverDataToBytes(generatorData), + ivsEnclave, + matchingEngineEnclave, + generatorEnclave, + minRewardByGenerator, + generatorComputeAllocation, + modifiedComputeGivenToNewMarket, + godEnclave, + bridgeEnclave, + ); + + proofMarketplace = data.proofMarketplace; + proverManager = data.proverManager; + usdc = data.mockToken; + priorityLog = data.priorityLog; + errorLibrary = data.errorLibrary; + entityKeyRegistry = data.entityKeyRegistry; + attestationVerifier = data.attestationVerifier; + + /* Staking Contracts */ + stakingManager = data.stakingManager; + nativeStaking = data.nativeStaking; + symbioticStaking = data.symbioticStaking; + symbioticStakingReward = data.symbioticStakingReward; + + marketId = new BigNumber((await proofMarketplace.marketCounter()).toString()).minus(1).toFixed(); + + // await attestationVerifier.whitelistEnclaveImage(godEnclave.pcrs[0], godEnclave.pcrs[1], godEnclave.pcrs[2]); + // await attestationVerifier.whitelistEnclaveKey(godEnclave.getUncompressedPubkey(), godEnclave.getImageId()); + + // let marketActivationDelay = await proofMarketplace.MARKET_ACTIVATION_DELAY(); + // await skipBlocks(ethers, new BigNumber(marketActivationDelay.toString()).toNumber()); + }; + + beforeEach(async () => { + await refreshSetup(); + + vault1 = signers[6]; + vault2 = signers[7]; + ({ pond, weth } = await stakingSetup(admin, stakingManager, nativeStaking, symbioticStaking, symbioticStakingReward)); + + await proverSelfStake(nativeStaking, admin, generator, pond, new BigNumber(10).pow(18).multipliedBy(10000)); + + /* Submitting Vault Snapshots */ + const snapshotData: VaultSnapshot[] = [ + // vault1 -> generator (10000 POND) + { + prover: await generator.getAddress(), + vault: await vault1.getAddress(), + stakeToken: await pond.getAddress(), + stakeAmount: new BigNumber(10).pow(18).multipliedBy(1000000).toFixed(0), + }, + // vault2 -> generator (10000 WETH) + { + prover: await generator.getAddress(), + vault: await vault2.getAddress(), + stakeToken: await weth.getAddress(), + stakeAmount: new BigNumber(10).pow(18).multipliedBy(1000000).toFixed(0), + }, + ]; + + const captureTimestamp = new BigNumber((await ethers.provider.getBlock("latest"))?.timestamp ?? 0).minus(10); + const imageId = bridgeEnclave.getImageId(); + + await symbioticStaking["addEnclaveImage(bytes,bytes,bytes)"](bridgeEnclave.pcrs[0], bridgeEnclave.pcrs[1], bridgeEnclave.pcrs[2]); + + // Submit Vault Snapshot + await submitVaultSnapshot(symbioticStaking, bridgeEnclave, user, { + index: 0, + numOfTxs: 1, + captureTimestamp: captureTimestamp.toString(), + imageId: imageId.toString(), + snapshotData, + }); + + const taskSlashed: TaskSlashed[] = []; + + const lastBlockNumber = new BigNumber((await ethers.provider.getBlock("latest"))?.number ?? 0).minus(10); + // Submit Slash Result + await submitSlashResult(symbioticStaking, bridgeEnclave, user, { + index: 0, + numOfTxs: 1, + captureTimestamp: captureTimestamp.toString(), + lastBlockNumber: lastBlockNumber.toString(), + imageId: imageId.toString(), + slashResultData: taskSlashed, + }); + }); + + describe("Using Simple Transfer Verifier", () => { + let bidId: string; + let proofBytes: string; + let proofGenerationCost: BigNumber; + let platformFee: BigNumber; + + beforeEach(async () => { + let abiCoder = new ethers.AbiCoder(); + + let inputBytes = abiCoder.encode( + ["uint256[5]"], + [ + [ + transfer_verifier_inputs[0], + transfer_verifier_inputs[1], + transfer_verifier_inputs[2], + transfer_verifier_inputs[3], + transfer_verifier_inputs[4], + ], + ], + ); + + const latestBlock = await ethers.provider.getBlock("latest"); + const blockTimestamp = latestBlock?.timestamp ?? 0; + let assignmentExpiry = 100; // in blocks + let timeForProofGeneration = 1000; // 1 day + let maxTimeForProofGeneration = 60 * 60 * 24; // 1 day + + const bid = { + marketId, + proverData: inputBytes, + reward: rewardForProofGeneration.toFixed(), + expiry: (assignmentExpiry + blockTimestamp).toString(), + timeForProofGeneration: timeForProofGeneration.toString(), + deadline: (blockTimestamp + maxTimeForProofGeneration).toString(), + refundAddress: await user.getAddress(), + } + + bidId = await setup.createBid( + user, + tokenHolder, + bid, + { + mockToken: usdc, + proofMarketplace, + attestationVerifier, + proverManager, + priorityLog, + errorLibrary, + entityKeyRegistry, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, + }, + 1, + ); + + platformFee = new BigNumber((await proofMarketplace.getPlatformFee(1, bid, "0x", "0x")).toString()); + + await setup.createTask( + matchingEngineEnclave, + admin.provider as Provider, + { + mockToken: usdc, + proofMarketplace, + proverManager, + priorityLog, + errorLibrary, + entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, + }, + bidId, + generator, + ); + + proofBytes = abiCoder.encode( + ["uint256[8]"], + [ + [ + transfer_verifier_proof.a[0], + transfer_verifier_proof.a[1], + transfer_verifier_proof.b[0][0], + transfer_verifier_proof.b[0][1], + transfer_verifier_proof.b[1][0], + transfer_verifier_proof.b[1][1], + transfer_verifier_proof.c[0], + transfer_verifier_proof.c[1], + ], + ], + ); + const [rewardAddress, _proofGenerationCost] = await proverManager.getProverRewardDetails(await generator.getAddress(), marketId); + proofGenerationCost = new BigNumber(_proofGenerationCost.toString()); + }); + + it("should submit proof", async () => { + await expect(proofMarketplace.submitProof(bidId, proofBytes)).to.emit(proofMarketplace, "ProofCreated").withArgs(bidId, proofBytes); + }); + + // Note: this will change in the future (Prover will not receive 100% reward) + it("prover should receive 100% reward", async () => { + const generatorRewardBefore = await proofMarketplace.proverClaimableFeeReward(await generator.getAddress()); + await expect(proofMarketplace.submitProof(bidId, proofBytes)).to.emit(proofMarketplace, "ProofCreated").withArgs(bidId, proofBytes); + const generatorRewardAfter = await proofMarketplace.proverClaimableFeeReward(await generator.getAddress()); + const generatorReward = new BigNumber(generatorRewardAfter.toString()).minus(new BigNumber(generatorRewardBefore.toString())); + + const expectedReward = new BigNumber(proofGenerationCost).minus(platformFee); + expect(generatorReward).to.eq(expectedReward); + }); + + it("provrRewardAddress should be able to claim reward", async () => { + const proverRewardAddress = await signers[7].getAddress(); + + await proverManager.connect(generator).updateProverRewardAddress(proverRewardAddress); + const proverRewardBefore = await proofMarketplace.proverClaimableFeeReward(proverRewardAddress); + await expect(proofMarketplace.submitProof(bidId, proofBytes)).to.emit(proofMarketplace, "ProofCreated").withArgs(bidId, proofBytes); + const proverRewardAfter = await proofMarketplace.proverClaimableFeeReward(proverRewardAddress); + const proverReward = new BigNumber(proverRewardAfter.toString()).minus(new BigNumber(proverRewardBefore.toString())); + + const expectedReward = new BigNumber(proofGenerationCost).minus(platformFee); + expect(proverReward).to.eq(expectedReward); + }); + }); + + it("Should Fail invalid Proof: Simple Transfer Verifier, but proof generated for some other request", async () => { + let abiCoder = new ethers.AbiCoder(); + + let inputBytes = abiCoder.encode( + ["uint256[5]"], + [ + [ + transfer_verifier_inputs[0], + transfer_verifier_inputs[1], + transfer_verifier_inputs[2], + transfer_verifier_inputs[3], + transfer_verifier_inputs[4], + ], + ], + ); + // console.log({ inputBytes }); + const latestBlock = await ethers.provider.getBlock("latest"); + const blockTimestamp = latestBlock?.timestamp ?? 0; + let assignmentExpiry = 100; // in seconds + let timeForProofGeneration = 10000; // keep a large number, but only for tests + let maxTimeForProofGeneration = 60 * 60 * 24; // 1 day + + const bidId = await setup.createBid( + prover, + tokenHolder, + { + marketId, + proverData: inputBytes, + reward: rewardForProofGeneration.toFixed(), + expiry: (assignmentExpiry + blockTimestamp).toString(), + timeForProofGeneration: timeForProofGeneration.toString(), + deadline: (blockTimestamp + maxTimeForProofGeneration).toString(), + refundAddress: await prover.getAddress(), + }, + { + mockToken: usdc, + proofMarketplace, + proverManager, + priorityLog, + errorLibrary, + entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, + }, + 1, + ); + + await setup.createTask( + matchingEngineEnclave, + admin.provider as Provider, + { + mockToken: usdc, + proofMarketplace, + proverManager, + priorityLog, + errorLibrary, + entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, + }, + bidId, + generator, + ); + + let proofBytes = abiCoder.encode( + ["uint256[8]"], + [ + [ + invalid_transfer_verifier_proof.a[0], + invalid_transfer_verifier_proof.a[1], + invalid_transfer_verifier_proof.b[0][0], + invalid_transfer_verifier_proof.b[0][1], + invalid_transfer_verifier_proof.b[1][0], + invalid_transfer_verifier_proof.b[1][1], + invalid_transfer_verifier_proof.c[0], + invalid_transfer_verifier_proof.c[1], + ], + ], + ); + await expect(proofMarketplace.submitProof(bidId, proofBytes)) + .to.revertedWithCustomError(proofMarketplace, "InvalidProof") + .withArgs(bidId); + }); + + it("Task Assignment fails if it exceeds compute capacity", async () => { + const max_asks = generatorComputeAllocation.div(computeGivenToNewMarket).toFixed(0); + + let abiCoder = new ethers.AbiCoder(); + + let inputBytes = abiCoder.encode( + ["uint256[5]"], + [ + [ + transfer_verifier_inputs[0], + transfer_verifier_inputs[1], + transfer_verifier_inputs[2], + transfer_verifier_inputs[3], + transfer_verifier_inputs[4], + ], + ], + ); + // console.log({ inputBytes }); + + for (let index = 0; index < parseInt(max_asks) + 2; index++) { + const latestBlock = await ethers.provider.getBlock("latest"); + const blockTimestamp = latestBlock?.timestamp ?? 0; + let assignmentExpiry = 100; // in blocks + let timeForProofGeneration = 10000; // keep a large number, but only for tests + let maxTimeForProofGeneration = 24 * 60 * 60; // 1 day + + if (index >= parseInt(max_asks)) { + const bid = { + marketId, + proverData: inputBytes, + reward: rewardForProofGeneration.toFixed(), + expiry: (assignmentExpiry + blockTimestamp).toString(), + timeForProofGeneration: timeForProofGeneration.toString(), + deadline: (blockTimestamp + maxTimeForProofGeneration).toString(), + refundAddress: await prover.getAddress(), + }; + + await usdc.connect(tokenHolder).transfer(await prover.getAddress(), bid.reward.toString()); + + await usdc.connect(prover).approve(await proofMarketplace.getAddress(), bid.reward.toString()); + + const bidId = await proofMarketplace.bidCounter(); + + await proofMarketplace.connect(prover).createBid(bid, marketId, "0x", "0x", "0x"); + + const matchingEngine: Signer = new ethers.Wallet(matchingEngineEnclave.getPrivateKey(true), admin.provider); + + await expect( + proofMarketplace.connect(matchingEngine).assignTask(bidId, await generator.getAddress(), "0x1234"), + ).to.be.revertedWithCustomError(errorLibrary, "InsufficientProverComputeAvailable"); + } else { + const bidId = await setup.createBid( + prover, + tokenHolder, + { + marketId, + proverData: inputBytes, + reward: rewardForProofGeneration.toFixed(), + expiry: (assignmentExpiry + blockTimestamp).toString(), + timeForProofGeneration: timeForProofGeneration.toString(), + deadline: (blockTimestamp + maxTimeForProofGeneration).toString(), + refundAddress: await prover.getAddress(), + }, + { + mockToken: usdc, + proofMarketplace, + proverManager, + priorityLog, + errorLibrary, + entityKeyRegistry, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, + attestationVerifier, + }, + 1, + ); + + await setup.createTask( + matchingEngineEnclave, + admin.provider as Provider, + { + mockToken: usdc, + proofMarketplace, + proverManager, + priorityLog, + errorLibrary, + entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, + }, + bidId, + generator, + ); + + // console.log({ taskId, index }); + } + } + }); + + it("Leave Market Place with active request", async () => { + const latestBlock = await ethers.provider.getBlock("latest"); + const blockTimestamp = latestBlock?.timestamp ?? 0; + + let assignmentExpiry = 100; // in seconds + let timeForProofGeneration = 10000; // keep a large number, but only for tests + let maxTimeForProofGeneration = 24 * 60 * 60; // 1 day + + let abiCoder = new ethers.AbiCoder(); + + let inputBytes = abiCoder.encode( + ["uint256[5]"], + [ + [ + transfer_verifier_inputs[0], + transfer_verifier_inputs[1], + transfer_verifier_inputs[2], + transfer_verifier_inputs[3], + transfer_verifier_inputs[4], + ], + ], + ); + + const bidId = await setup.createBid( + prover, + tokenHolder, + { + marketId, + proverData: inputBytes, + reward: rewardForProofGeneration.toFixed(), + expiry: (assignmentExpiry + blockTimestamp).toString(), + timeForProofGeneration: timeForProofGeneration.toString(), + deadline: (blockTimestamp + maxTimeForProofGeneration).toString(), + refundAddress: await prover.getAddress(), + }, + { + mockToken: usdc, + proofMarketplace, + proverManager, + priorityLog, + errorLibrary, + entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, + }, + 1, + ); + + await setup.createTask( + matchingEngineEnclave, + admin.provider as Provider, + { + mockToken: usdc, + proofMarketplace, + proverManager, + priorityLog, + errorLibrary, + entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, + }, + bidId, + generator, + ); + + await expect(proverManager.connect(generator).leaveMarketplace(marketId)).to.revertedWithCustomError( + proverManager, + "CannotLeaveMarketWithActiveRequest", + ); + }); + + it("Invalid arguments in leave market place", async () => { + await expect(proverManager.connect(admin).leaveMarketplace(marketId)).to.revertedWithCustomError( + proverManager, + "InvalidProverStatePerMarket", + ); + + // some random market id number + await expect(proverManager.connect(generator).leaveMarketplace("287")).to.revertedWithoutReason; // actual reason probably is array-out-of-bonds + }); + + it("Task Assignment fails if it exceeds maximum parallel requests per generators", async () => { + const MAX_PARALLEL_REQUESTS = new BigNumber((await proverManager.PARALLEL_REQUESTS_UPPER_LIMIT()).toString()); + + const newComputeGivenToMarket = generatorComputeAllocation.div(MAX_PARALLEL_REQUESTS).div(105).multipliedBy(100); + + await refreshSetup(newComputeGivenToMarket); + const max_asks = generatorComputeAllocation.div(newComputeGivenToMarket).toFixed(0); + + let abiCoder = new ethers.AbiCoder(); + + let inputBytes = abiCoder.encode( + ["uint256[5]"], + [ + [ + transfer_verifier_inputs[0], + transfer_verifier_inputs[1], + transfer_verifier_inputs[2], + transfer_verifier_inputs[3], + transfer_verifier_inputs[4], + ], + ], + ); + // console.log({ inputBytes }); + + for (let index = 0; index < parseInt(max_asks); index++) { + const latestBlock = await ethers.provider.getBlock("latest"); + const blockTimestamp = latestBlock?.timestamp ?? 0; + let assignmentExpiry = 100; // in seconds + let timeForProofGeneration = 10000; // keep a large number, but only for tests + let maxTimeForProofGeneration = 24 * 60 * 60; // 1 day + + if (index > MAX_PARALLEL_REQUESTS.toNumber()) { + const bid = { + marketId, + proverData: inputBytes, + reward: rewardForProofGeneration.toFixed(), + expiry: (assignmentExpiry + blockTimestamp).toString(), + timeForProofGeneration: timeForProofGeneration.toString(), + deadline: (blockTimestamp + maxTimeForProofGeneration).toString(), + refundAddress: await prover.getAddress(), + }; + + await usdc.connect(tokenHolder).transfer(await prover.getAddress(), bid.reward.toString()); + + await usdc.connect(prover).approve(await proofMarketplace.getAddress(), bid.reward.toString()); + + const bidId = await proofMarketplace.bidCounter(); + + await proofMarketplace.connect(prover).createBid(bid, marketId, "0x", "0x", "0x"); + + const matchingEngine: Signer = new ethers.Wallet(matchingEngineEnclave.getPrivateKey(true), admin.provider); + + await expect( + proofMarketplace.connect(matchingEngine).assignTask(bidId, await generator.getAddress(), "0x1234"), + ).to.be.revertedWithCustomError(proverManager, "MaxParallelRequestsPerMarketExceeded"); + } else { + const bidId = await setup.createBid( + prover, + tokenHolder, + { + marketId, + proverData: inputBytes, + reward: rewardForProofGeneration.toFixed(), + expiry: (assignmentExpiry + blockTimestamp).toString(), + timeForProofGeneration: timeForProofGeneration.toString(), + deadline: (blockTimestamp + maxTimeForProofGeneration).toString(), + refundAddress: await prover.getAddress(), + }, + { + mockToken: usdc, + proofMarketplace, + proverManager, + priorityLog, + errorLibrary, + entityKeyRegistry, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, + attestationVerifier, + }, + 1, + ); + + await setup.createTask( + matchingEngineEnclave, + admin.provider as Provider, + { + mockToken: usdc, + proofMarketplace, + proverManager, + priorityLog, + errorLibrary, + entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, + }, + bidId, + generator, + ); + } + } + }); + + it("Task Assignment fails if generator doesn't have sufficient stake", async () => { + const max_restricted_requests_by_stake = 3; + const newGeneratorStake = generatorSlashingPenalty.multipliedBy(max_restricted_requests_by_stake); + await refreshSetup(computeGivenToNewMarket, newGeneratorStake); + + let abiCoder = new ethers.AbiCoder(); + + let inputBytes = abiCoder.encode( + ["uint256[5]"], + [ + [ + transfer_verifier_inputs[0], + transfer_verifier_inputs[1], + transfer_verifier_inputs[2], + transfer_verifier_inputs[3], + transfer_verifier_inputs[4], + ], + ], + ); + + for (let index = 0; index < max_restricted_requests_by_stake + 12; index++) { + const latestBlock = await ethers.provider.getBlock("latest"); + const blockTimestamp = latestBlock?.timestamp ?? 0; + let assignmentExpiry = 100; // in seconds + let timeForProofGeneration = 10000; // keep a large number, but only for tests + let maxTimeForProofGeneration = 24 * 60 * 60; // 1 day + + if (index >= max_restricted_requests_by_stake) { + const bid = { + marketId, + proverData: inputBytes, + reward: rewardForProofGeneration.toFixed(), + expiry: (assignmentExpiry + blockTimestamp).toString(), + timeForProofGeneration: timeForProofGeneration.toString(), + deadline: (blockTimestamp + maxTimeForProofGeneration).toString(), + refundAddress: await prover.getAddress(), + }; + + await usdc.connect(tokenHolder).transfer(await prover.getAddress(), bid.reward.toString()); + + await usdc.connect(prover).approve(await proofMarketplace.getAddress(), bid.reward.toString()); + + const bidId = await proofMarketplace.bidCounter(); + + await proofMarketplace.connect(prover).createBid(bid, marketId, "0x", "0x", "0x"); + + const matchingEngine: Signer = new ethers.Wallet(matchingEngineEnclave.getPrivateKey(true), admin.provider); + + // await expect( + // proofMarketplace.connect(matchingEngine).assignTask(bidId, await generator.getAddress(), "0x1234"), + // ).to.be.revertedWithCustomError(proverManager, "InsufficientStakeToLock"); + } else { + const bidId = await setup.createBid( + prover, + tokenHolder, + { + marketId, + proverData: inputBytes, + reward: rewardForProofGeneration.toFixed(), + expiry: (assignmentExpiry + blockTimestamp).toString(), + timeForProofGeneration: timeForProofGeneration.toString(), + deadline: (blockTimestamp + maxTimeForProofGeneration).toString(), + refundAddress: await prover.getAddress(), + }, + { + mockToken: usdc, + proofMarketplace, + proverManager, + priorityLog, + errorLibrary, + entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, + }, + 1, + ); + + await setup.createTask( + matchingEngineEnclave, + admin.provider as Provider, + { + mockToken: usdc, + proofMarketplace, + proverManager, + priorityLog, + errorLibrary, + entityKeyRegistry, + attestationVerifier, + stakingManager, + nativeStaking, + symbioticStaking, + symbioticStakingReward, + }, + bidId, + generator, + ); + } + } + }); + + it("Only registered generator should be able to add/update entity keys", async () => { + let abicode = new ethers.AbiCoder(); + const generatorEnclave = new MockEnclave(MockProverPCRS); + + let generatorAttestationBytes = await generatorEnclave.getVerifiedAttestation(godEnclave); + + let types = ["bytes", "address"]; + let values = [generatorAttestationBytes, await generator.getAddress()]; + + let encoded = abicode.encode(types, values); + let digest = ethers.keccak256(encoded); + let signature = await generatorEnclave.signMessage(ethers.getBytes(digest)); + + await expect(proverManager.connect(generator).updateEncryptionKey(marketId, generatorAttestationBytes, signature)) + .to.emit(entityKeyRegistry, "UpdateKey") + .withArgs(await generator.getAddress(), marketId); + }); + + it("Only admin can set the generator registry role", async () => { + const generatorRole = await entityKeyRegistry.KEY_REGISTER_ROLE(); + await expect(entityKeyRegistry.connect(treasury).addProverManager(await proofMarketplace.getAddress())).to.be.reverted; + + await entityKeyRegistry.addProverManager(await proofMarketplace.getAddress()); + expect(await entityKeyRegistry.hasRole(generatorRole, await proofMarketplace.getAddress())).to.eq(true); + }); + + it("Updating with invalid key should revert", async () => { + const generatorEnclave = new MockEnclave(MockProverPCRS); + const invalidPubkey = "0x1234"; + + let abiCoder = new ethers.AbiCoder(); + let validAttesationWithInvalidKey = abiCoder.encode( + ["bytes", "bytes", "bytes", "bytes", "bytes", "uint256"], + ["0x00", invalidPubkey, MockProverPCRS[0], MockProverPCRS[1], MockProverPCRS[2], new Date().valueOf()], + ); + + let types = ["bytes", "address"]; + let values = [validAttesationWithInvalidKey, await generator.getAddress()]; + + let abicode = new ethers.AbiCoder(); + let encoded = abicode.encode(types, values); + let digest = ethers.keccak256(encoded); + let signature = await generatorEnclave.signMessage(ethers.getBytes(digest)); + + await expect( + proverManager.connect(generator).updateEncryptionKey(marketId, validAttesationWithInvalidKey, signature), + ).to.be.revertedWithCustomError(errorLibrary, "InvalidEnclaveKey"); + }); + + it("Remove key", async () => { + // Adding key to registry + const generatorEnclave = new MockEnclave(MockProverPCRS); + let newAttesationBytes = await generatorEnclave.getVerifiedAttestation(godEnclave); + + let types = ["bytes", "address"]; + + let values = [newAttesationBytes, await generator.getAddress()]; + + let abicode = new ethers.AbiCoder(); + let encoded = abicode.encode(types, values); + let digest = ethers.keccak256(encoded); + let signature = await generatorEnclave.signMessage(ethers.getBytes(digest)); + + await expect(proverManager.connect(generator).updateEncryptionKey(marketId, newAttesationBytes, signature)) + .to.emit(entityKeyRegistry, "UpdateKey") + .withArgs(await generator.getAddress(), marketId); + + // Checking key in registry + const pub_key = await entityKeyRegistry.pub_key(generator.getAddress(), marketId); + // console.log({ pub_key: pub_key }); + // console.log({pubBytes: pubBytes }); + expect(pub_key).to.eq(generatorEnclave.getUncompressedPubkey()); + + // Removing key from registry + await expect(proverManager.connect(generator).removeEncryptionKey(marketId)) + .to.emit(entityKeyRegistry, "RemoveKey") + .withArgs(await generator.getAddress(), marketId); + }); + + it("Generator Prechecks", async () => { + const exponent = new BigNumber(10).pow(18).toFixed(0); + + const proverData = await proverManager.proverRegistry(await generator.getAddress()); + expect(generatorComputeAllocation.toFixed(0)).to.eq(proverData.declaredCompute.toString()); + expect(proverData.computeConsumed).to.eq(0); + // expect(proverData.totalStake).to.eq(generatorStakingAmount.toFixed(0)); + // expect(proverData.stakeLocked).to.eq(0); + expect(proverData.activeMarketplaces).to.eq(1); + expect(proverData.intendedComputeUtilization).to.eq(exponent); + // expect(proverData.intendedStakeUtilization).to.eq(exponent); + + const marketId = 1; // likely to be 0, if failed change it + const proverDataPerMarket = await proverManager.proverInfoPerMarket(await generator.getAddress(), marketId); + + expect(proverDataPerMarket.state).to.not.eq(0); // 0 means no generator + expect(proverDataPerMarket.computePerRequestRequired).to.eq(computeGivenToNewMarket.toFixed(0)); + expect(proverDataPerMarket.proofGenerationCost).to.eq(minRewardByGenerator.toFixed(0)); + expect(proverDataPerMarket.activeRequests).to.eq(0); + }); +}); diff --git a/test/Staking.ts b/test/Staking.ts new file mode 100644 index 0000000..8e72b00 --- /dev/null +++ b/test/Staking.ts @@ -0,0 +1,273 @@ +import BigNumber from 'bignumber.js'; +import { + BytesLike, + Signer, +} from 'ethers'; +import { ethers } from 'hardhat'; + +import { + BridgeEnclavePCRS, + GodEnclavePCRS, + MarketData, + marketDataToBytes, + MockEnclave, + MockIVSPCRS, + MockMEPCRS, + MockProverPCRS, + ProverData, + proverDataToBytes, + setup, +} from '../helpers'; +import * as transfer_verifier_inputs + from '../helpers/sample/transferVerifier/transfer_inputs.json'; +import * as transfer_verifier_proof + from '../helpers/sample/transferVerifier/transfer_proof.json'; +import { stakingSetup, submitSlashResult, submitVaultSnapshot, TaskSlashed, VaultSnapshot, toEthSignedMessageHash } from '../helpers/setup'; +import { + AttestationVerifier, + EntityKeyRegistry, + Error, + IVerifier, + IVerifier__factory, + MockToken, + NativeStaking, + POND, + PriorityLog, + ProofMarketplace, + ProverManager, + StakingManager, + SymbioticStaking, + SymbioticStakingReward, + Transfer_verifier_wrapper__factory, + TransferVerifier__factory, + WETH, +} from '../typechain-types'; + +describe("Staking", () => { + let proofMarketplace: ProofMarketplace; + let proverManager: ProverManager; + let usdc: MockToken; + let priorityLog: PriorityLog; + let errorLibrary: Error; + let entityKeyRegistry: EntityKeyRegistry; + let iverifier: IVerifier; + let attestationVerifier: AttestationVerifier; + let stakingManager: StakingManager; + let nativeStaking: NativeStaking; + let symbioticStaking: SymbioticStaking; + let symbioticStakingReward: SymbioticStakingReward; + + let vault1Address: string; + let vault2Address: string; + + let pond: POND; + let weth: WETH; + + let signers: Signer[]; + let admin: Signer; + let tokenHolder: Signer; + let treasury: Signer; + let prover: Signer; + let refundReceiver: Signer; + + let marketCreator: Signer; + let marketSetupData: MarketData; + let marketId: string; + + let proverData: ProverData; + let imageId: BytesLike; + + /* Enclaves */ + const ivsEnclave = new MockEnclave(MockIVSPCRS); + const matchingEngineEnclave = new MockEnclave(MockMEPCRS); + const proverEnclave = new MockEnclave(MockProverPCRS); + const godEnclave = new MockEnclave(GodEnclavePCRS); + const bridgeEnclave = new MockEnclave(BridgeEnclavePCRS); + + /* Config */ + const totalTokenSupply: BigNumber = new BigNumber(10).pow(24).multipliedBy(9); + const generatorStakingAmount: BigNumber = new BigNumber(10).pow(18).multipliedBy(1000).multipliedBy(2).minus(1231); // use any random number + const generatorSlashingPenalty: BigNumber = new BigNumber(10).pow(16).multipliedBy(93).minus(182723423); // use any random number + const marketCreationCost: BigNumber = new BigNumber(10).pow(18).multipliedBy(1213).minus(23746287365); // use any random number + const generatorComputeAllocation = new BigNumber(10).pow(19).minus("12782387").div(123).multipliedBy(98); + const computeGivenToNewMarket = new BigNumber(10).pow(19).minus("98897").div(9233).multipliedBy(98); + const rewardForProofGeneration = new BigNumber(10).pow(18).multipliedBy(200); + const minRewardByGenerator = new BigNumber(10).pow(18).multipliedBy(199); + + const refreshSetup = async ( + modifiedComputeGivenToNewMarket = computeGivenToNewMarket, + modifiedGeneratorStakingAmount = generatorStakingAmount, + ): Promise => { + signers = await ethers.getSigners(); + admin = signers[0]; + tokenHolder = signers[1]; + treasury = signers[2]; + marketCreator = signers[3]; + prover = signers[4]; + refundReceiver = signers[5]; + + marketSetupData = { + zkAppName: "transfer verifier", + proverCode: "url of the prover code", + verifierCode: "url of the verifier code", + proverOysterImage: "oyster image link for the prover", + setupCeremonyData: ["first phase", "second phase", "third phase"], + inputOuputVerifierUrl: "this should be nclave url", + }; + + proverData = { + name: "some custom name for the prover", + }; + + await admin.sendTransaction({ to: ivsEnclave.getAddress(), value: "1000000000000000000" }); + await admin.sendTransaction({ to: matchingEngineEnclave.getAddress(), value: "1000000000000000000" }); + + const transferVerifier = await new TransferVerifier__factory(admin).deploy(); + + let abiCoder = new ethers.AbiCoder(); + + let inputBytes = abiCoder.encode( + ["uint256[5]"], + [ + [ + transfer_verifier_inputs[0], + transfer_verifier_inputs[1], + transfer_verifier_inputs[2], + transfer_verifier_inputs[3], + transfer_verifier_inputs[4], + ], + ], + ); + + let proofBytes = abiCoder.encode( + ["uint256[8]"], + [ + [ + transfer_verifier_proof.a[0], + transfer_verifier_proof.a[1], + transfer_verifier_proof.b[0][0], + transfer_verifier_proof.b[0][1], + transfer_verifier_proof.b[1][0], + transfer_verifier_proof.b[1][1], + transfer_verifier_proof.c[0], + transfer_verifier_proof.c[1], + ], + ], + ); + + const transferVerifierWrapper = await new Transfer_verifier_wrapper__factory(admin).deploy( + await transferVerifier.getAddress(), + inputBytes, + proofBytes, + ); + + iverifier = IVerifier__factory.connect(await transferVerifierWrapper.getAddress(), admin); + + let treasuryAddress = await treasury.getAddress(); + + let data = await setup.rawSetup( + admin, + tokenHolder, + totalTokenSupply, + modifiedGeneratorStakingAmount, + generatorSlashingPenalty, + treasuryAddress, + marketCreationCost, + marketCreator, + marketDataToBytes(marketSetupData), + marketSetupData.inputOuputVerifierUrl, + iverifier, + prover, + proverDataToBytes(proverData), + ivsEnclave, + matchingEngineEnclave, + proverEnclave, + minRewardByGenerator, + generatorComputeAllocation, + modifiedComputeGivenToNewMarket, + godEnclave, + ); + + attestationVerifier = data.attestationVerifier; + entityKeyRegistry = data.entityKeyRegistry; + proofMarketplace = data.proofMarketplace; + proverManager = data.proverManager; + usdc = data.mockToken; + priorityLog = data.priorityLog; // TODO + errorLibrary = data.errorLibrary; // TODO + + /* Staking Contracts */ + stakingManager = data.stakingManager; + nativeStaking = data.nativeStaking; + symbioticStaking = data.symbioticStaking; + symbioticStakingReward = data.symbioticStakingReward; + + imageId = await symbioticStaking.getImageId(bridgeEnclave.pcrs[0], bridgeEnclave.pcrs[1], bridgeEnclave.pcrs[2]); + vault1Address = ethers.Wallet.createRandom().address; + vault2Address = ethers.Wallet.createRandom().address; + + await attestationVerifier.whitelistEnclaveImage(bridgeEnclave.pcrs[0], bridgeEnclave.pcrs[1], bridgeEnclave.pcrs[2]); + await attestationVerifier.whitelistEnclaveKey(bridgeEnclave.getUncompressedPubkey(), imageId); + await symbioticStaking['addEnclaveImage(bytes,bytes,bytes)'](bridgeEnclave.pcrs[0], bridgeEnclave.pcrs[1], bridgeEnclave.pcrs[2]); + + marketId = new BigNumber((await proofMarketplace.marketCounter()).toString()).minus(1).toFixed(); + ({ pond, weth } = await stakingSetup(admin, stakingManager, nativeStaking, symbioticStaking, symbioticStakingReward)); + }; + + describe("Vault Snapshot Submission", () => { + let captureTimestamp: BigNumber; + let lastBlockNumber: BigNumber; + + beforeEach(async () => { + await refreshSetup(); + }); + + describe("Enclave Key Verification", () => { + it("should verify Enclave Key", async () => { + const encoded = await bridgeEnclave.getMockAttestation(); + await attestationVerifier["verify(bytes)"](encoded); + }); + + it("should submit snapshot", async () => { + captureTimestamp = new BigNumber((await ethers.provider.getBlock("latest"))?.timestamp ?? 0).minus(10); + + // 3 partial txs + const numOfTxs = 3; + + const vaultSnapshots: VaultSnapshot[] = [ + { + prover: await prover.getAddress(), + vault: vault1Address, + stakeToken: await pond.getAddress(), + stakeAmount: new BigNumber(10).pow(18).multipliedBy(1000).toFixed(), // 1000 POND + }, + ]; + + await submitVaultSnapshot(symbioticStaking, bridgeEnclave, prover, { + index: 0, + numOfTxs, + captureTimestamp: captureTimestamp.toString(), + imageId: imageId.toString(), + snapshotData: vaultSnapshots, + }); + }); + + it("should submit slash result", async () => { + lastBlockNumber = new BigNumber((await ethers.provider.getBlock("latest"))?.number ?? 0).minus(10); + captureTimestamp = new BigNumber((await ethers.provider.getBlock("latest"))?.timestamp ?? 0).minus(10); + + const taskSlashed: TaskSlashed[] = []; + + await submitSlashResult(symbioticStaking, bridgeEnclave, prover, { + index: 0, + numOfTxs: 1, + captureTimestamp: captureTimestamp.toString(), + lastBlockNumber: lastBlockNumber.toString(), + imageId: imageId.toString(), + slashResultData: taskSlashed, + }); + }); + }); + }); +}); + diff --git a/test/StakingManager.ts b/test/StakingManager.ts new file mode 100644 index 0000000..ab0cbe6 --- /dev/null +++ b/test/StakingManager.ts @@ -0,0 +1,489 @@ +import BigNumber from "bignumber.js"; +import { expect } from "chai"; +import { + BytesLike, + Signer, +} from "ethers"; +import { ethers } from "hardhat"; + +import { + BridgeEnclavePCRS, + GodEnclavePCRS, + MarketData, + marketDataToBytes, + MockEnclave, + MockIVSPCRS, + MockMEPCRS, + MockProverPCRS, + ProverData, + proverDataToBytes, + setup, +} from "../helpers"; +import * as transfer_verifier_inputs from "../helpers/sample/transferVerifier/transfer_inputs.json"; +import * as transfer_verifier_proof from "../helpers/sample/transferVerifier/transfer_proof.json"; +import { stakingSetup } from "../helpers/setup"; +import { + AttestationVerifier, + EntityKeyRegistry, + Error, + IVerifier, + IVerifier__factory, + MockToken, + NativeStaking, + POND, + PriorityLog, + ProofMarketplace, + ProverManager, + StakingManager, + SymbioticStaking, + SymbioticStakingReward, + Transfer_verifier_wrapper__factory, + TransferVerifier__factory, + WETH, +} from "../typechain-types"; + +describe("Staking", () => { + let proofMarketplace: ProofMarketplace; + let proverManager: ProverManager; + let usdc: MockToken; + let priorityLog: PriorityLog; + let errorLibrary: Error; + let entityKeyRegistry: EntityKeyRegistry; + let iverifier: IVerifier; + let attestationVerifier: AttestationVerifier; + let stakingManager: StakingManager; + let nativeStaking: NativeStaking; + let symbioticStaking: SymbioticStaking; + let symbioticStakingReward: SymbioticStakingReward; + + let pool1: string; + let pool2: string; + + let pond: POND; + let weth: WETH; + + let signers: Signer[]; + let admin: Signer; + let tokenHolder: Signer; + let treasury: Signer; + let prover: Signer; + let refundReceiver: Signer; + + let marketCreator: Signer; + let marketSetupData: MarketData; + let marketId: string; + + let proverData: ProverData; + let imageId: BytesLike; + + /* Enclaves */ + const ivsEnclave = new MockEnclave(MockIVSPCRS); + const matchingEngineEnclave = new MockEnclave(MockMEPCRS); + const proverEnclave = new MockEnclave(MockProverPCRS); + const godEnclave = new MockEnclave(GodEnclavePCRS); + const bridgeEnclave = new MockEnclave(BridgeEnclavePCRS); + + /* Config */ + const totalTokenSupply: BigNumber = new BigNumber(10).pow(24).multipliedBy(9); + const proverStakingAmount: BigNumber = new BigNumber(10).pow(18).multipliedBy(1000).multipliedBy(2).minus(1231); // use any random number + const proverSlashingPenalty: BigNumber = new BigNumber(10).pow(16).multipliedBy(93).minus(182723423); // use any random number + const marketCreationCost: BigNumber = new BigNumber(10).pow(18).multipliedBy(1213).minus(23746287365); // use any random number + const proverComputeAllocation = new BigNumber(10).pow(19).minus("12782387").div(123).multipliedBy(98); + const computeGivenToNewMarket = new BigNumber(10).pow(19).minus("98897").div(9233).multipliedBy(98); + const rewardForProofGeneration = new BigNumber(10).pow(18).multipliedBy(200); + const minRewardByProver = new BigNumber(10).pow(18).multipliedBy(199); + + const refreshSetup = async ( + modifiedComputeGivenToNewMarket = computeGivenToNewMarket, + modifiedProverStakingAmount = proverStakingAmount, + ): Promise => { + signers = await ethers.getSigners(); + admin = signers[0]; + tokenHolder = signers[1]; + treasury = signers[2]; + marketCreator = signers[3]; + prover = signers[4]; + refundReceiver = signers[5]; + + marketSetupData = { + zkAppName: "transfer verifier", + proverCode: "url of the prover code", + verifierCode: "url of the verifier code", + proverOysterImage: "oyster image link for the prover", + setupCeremonyData: ["first phase", "second phase", "third phase"], + inputOuputVerifierUrl: "this should be nclave url", + }; + + proverData = { + name: "some custom name for the prover", + }; + + await admin.sendTransaction({ to: ivsEnclave.getAddress(), value: "1000000000000000000" }); + await admin.sendTransaction({ to: matchingEngineEnclave.getAddress(), value: "1000000000000000000" }); + + const transferVerifier = await new TransferVerifier__factory(admin).deploy(); + + let abiCoder = new ethers.AbiCoder(); + + let inputBytes = abiCoder.encode( + ["uint256[5]"], + [ + [ + transfer_verifier_inputs[0], + transfer_verifier_inputs[1], + transfer_verifier_inputs[2], + transfer_verifier_inputs[3], + transfer_verifier_inputs[4], + ], + ], + ); + + let proofBytes = abiCoder.encode( + ["uint256[8]"], + [ + [ + transfer_verifier_proof.a[0], + transfer_verifier_proof.a[1], + transfer_verifier_proof.b[0][0], + transfer_verifier_proof.b[0][1], + transfer_verifier_proof.b[1][0], + transfer_verifier_proof.b[1][1], + transfer_verifier_proof.c[0], + transfer_verifier_proof.c[1], + ], + ], + ); + + const transferVerifierWrapper = await new Transfer_verifier_wrapper__factory(admin).deploy( + await transferVerifier.getAddress(), + inputBytes, + proofBytes, + ); + + iverifier = IVerifier__factory.connect(await transferVerifierWrapper.getAddress(), admin); + + let treasuryAddress = await treasury.getAddress(); + + let data = await setup.rawSetup( + admin, + tokenHolder, + totalTokenSupply, + modifiedProverStakingAmount, + proverSlashingPenalty, + treasuryAddress, + marketCreationCost, + marketCreator, + marketDataToBytes(marketSetupData), + marketSetupData.inputOuputVerifierUrl, + iverifier, + prover, + proverDataToBytes(proverData), + ivsEnclave, + matchingEngineEnclave, + proverEnclave, + minRewardByProver, + proverComputeAllocation, + modifiedComputeGivenToNewMarket, + godEnclave, + ); + + attestationVerifier = data.attestationVerifier; + entityKeyRegistry = data.entityKeyRegistry; + proofMarketplace = data.proofMarketplace; + proverManager = data.proverManager; + usdc = data.mockToken; + priorityLog = data.priorityLog; + errorLibrary = data.errorLibrary; + + /* Staking Contracts */ + stakingManager = data.stakingManager; + nativeStaking = data.nativeStaking; + symbioticStaking = data.symbioticStaking; + symbioticStakingReward = data.symbioticStakingReward; + + imageId = await symbioticStaking.getImageId(bridgeEnclave.pcrs[0], bridgeEnclave.pcrs[1], bridgeEnclave.pcrs[2]); + pool1 = ethers.Wallet.createRandom().address; + pool2 = ethers.Wallet.createRandom().address; + + await attestationVerifier.whitelistEnclaveImage(bridgeEnclave.pcrs[0], bridgeEnclave.pcrs[1], bridgeEnclave.pcrs[2]); + await attestationVerifier.whitelistEnclaveKey(bridgeEnclave.getUncompressedPubkey(), imageId); + await symbioticStaking['addEnclaveImage(bytes,bytes,bytes)'](bridgeEnclave.pcrs[0], bridgeEnclave.pcrs[1], bridgeEnclave.pcrs[2]); + + marketId = new BigNumber((await proofMarketplace.marketCounter()).toString()).minus(1).toFixed(); + ({ pond, weth } = await stakingSetup(admin, stakingManager, nativeStaking, symbioticStaking, symbioticStakingReward)); + }; + + describe("Staking Manager", () => { + beforeEach(async () => { + await refreshSetup(); + }); + + describe("Default Admin Role", () => { + + describe("Adding new Staking Pool", async () => { + const pool1_weight = 100; + const pool2_weight = 200; + let initialPoolRewardShareSum: BigNumber; + + beforeEach(async () => { + initialPoolRewardShareSum = new BigNumber((await stakingManager.poolRewardShareSum()).toString()); + }); + + it("should store new pool data", async () => { + const tx = await stakingManager.addStakingPool(pool1, pool1_weight); + + const poolConfig = await stakingManager.getPoolConfig(pool1); + expect(poolConfig.rewardShare).to.equal(pool1_weight); + expect(poolConfig.enabled).to.equal(false); + expect(tx).to.emit(stakingManager, "StakingPoolAdded").withArgs(pool1); + }); + + it("initialPoolRewardShareSum should not be changed", async () => { + await stakingManager.addStakingPool(pool1, pool1_weight); + + let currentPoolRewardShareSum = new BigNumber((await stakingManager.poolRewardShareSum()).toString()); + expect(currentPoolRewardShareSum).to.be.equal(initialPoolRewardShareSum); + + await stakingManager.addStakingPool(pool2, pool2_weight); + currentPoolRewardShareSum = new BigNumber((await stakingManager.poolRewardShareSum()).toString()); + expect(currentPoolRewardShareSum).to.be.equal(initialPoolRewardShareSum); + }); + + it("should revert if pool already exists", async () => { + await stakingManager.addStakingPool(pool1, pool1_weight); + await expect(stakingManager.addStakingPool(pool1, pool2_weight)).to.be.revertedWithCustomError(errorLibrary, "PoolAlreadyExists"); + }); + }); + + describe("Removing Staking Pool", async () => { + const pool1_weight = 100; + const pool2_weight = 200; + let initialPoolRewardShareSum: BigNumber; + + beforeEach(async () => { + await stakingManager.addStakingPool(pool1, pool1_weight); + initialPoolRewardShareSum = new BigNumber((await stakingManager.poolRewardShareSum()).toString()); + }); + + it("should decrease poolRewardShareSum", async () => { + let currentPoolRewardShareSum = new BigNumber((await stakingManager.poolRewardShareSum()).toString()); + expect(currentPoolRewardShareSum).to.be.equal(initialPoolRewardShareSum); + + await stakingManager.removeStakingPool(pool1); + currentPoolRewardShareSum = new BigNumber((await stakingManager.poolRewardShareSum()).toString()); + expect(currentPoolRewardShareSum).to.be.equal(initialPoolRewardShareSum.minus(pool1_weight)); + }); + + it("should revert if pool does not exist", async () => { + await expect(stakingManager.removeStakingPool(pool2)).to.be.revertedWithCustomError(errorLibrary, "PoolDoesNotExist"); + }); + + it("should delete pool data", async () => { + await stakingManager.removeStakingPool(pool1); + + const poolConfig = await stakingManager.getPoolConfig(pool1); + expect(poolConfig.rewardShare).to.be.equal(0); + expect(poolConfig.enabled).to.be.equal(false); + }); + + it("should emit event", async () => { + await expect(stakingManager.removeStakingPool(pool1)).to.emit(stakingManager, "StakingPoolRemoved").withArgs(pool1); + }); + }); + + describe("Setting Pool Enabled", async () => { + const pool1_weight = 100; + const pool2_weight = 200; + let initialPoolRewardShareSum: BigNumber; + + beforeEach(async () => { + await stakingManager.addStakingPool(pool1, pool1_weight); + initialPoolRewardShareSum = new BigNumber((await stakingManager.poolRewardShareSum()).toString()); + }); + + describe("Enabling Staking Pool", async () => { + + it("should enable pool", async () => { + await stakingManager.setPoolEnabled(pool1, true); + const poolConfig = await stakingManager.getPoolConfig(pool1); + expect(poolConfig.enabled).to.be.equal(true); + }); + + // TODO: fix contract to PoolDoesNotExist + it("should revert if pool does not exist", async () => { + await expect(stakingManager.setPoolEnabled(pool2, true)).to.be.revertedWithCustomError(errorLibrary, "PoolDoesNotExist"); + }); + + it("should revert if pool is already enabled", async () => { + await stakingManager.setPoolEnabled(pool1, true); + await expect(stakingManager.setPoolEnabled(pool1, true)).to.be.revertedWithCustomError(errorLibrary, "PoolAlreadyEnabled"); + }); + + it("should emit event", async () => { + await expect(stakingManager.setPoolEnabled(pool1, true)).to.emit(stakingManager, "PoolEnabledSet").withArgs(pool1, true); + }); + + it("should increase poolRewardShareSum", async () => { + await stakingManager.setPoolEnabled(pool1, true); + let currentPoolRewardShareSum = new BigNumber((await stakingManager.poolRewardShareSum()).toString()); + expect(currentPoolRewardShareSum).to.be.equal(initialPoolRewardShareSum.plus(pool1_weight)); + }); + }); + + describe("Disabling Staking Pool", async () => { + + beforeEach(async () => { + await stakingManager.setPoolEnabled(pool1, true); + }); + + it("should disable pool", async () => { + await stakingManager.setPoolEnabled(pool1, false); + const poolConfig = await stakingManager.getPoolConfig(pool1); + expect(poolConfig.enabled).to.be.equal(false); + }); + + it("should revert if pool is already disabled", async () => { + await stakingManager.setPoolEnabled(pool1, false); + await expect(stakingManager.setPoolEnabled(pool1, false)).to.be.revertedWithCustomError(errorLibrary, "PoolAlreadyDisabled"); + }); + + it("should emit event", async () => { + await expect(stakingManager.setPoolEnabled(pool1, false)).to.emit(stakingManager, "PoolEnabledSet").withArgs(pool1, false); + }); + + it("should decrease poolRewardShareSum", async () => { + let currentPoolRewardShareSum = new BigNumber((await stakingManager.poolRewardShareSum()).toString()); + await stakingManager.setPoolEnabled(pool1, false); + expect(await stakingManager.poolRewardShareSum()).to.be.equal(currentPoolRewardShareSum.minus(pool1_weight)); + }); + + it("should still store pool config", async () => { + await stakingManager.setPoolEnabled(pool1, false); + + const poolConfig = await stakingManager.getPoolConfig(pool1); + expect(poolConfig.enabled).to.be.equal(false); + expect(poolConfig.rewardShare).to.be.equal(pool1_weight); + }); + }); + }); + + describe("Setting Pool Reward Share", async () => { + const pool1_weight = 100; + const pool2_weight = 200; + const pool1_weight_after = 150; + + beforeEach(async () => { + // Add pool1 + await stakingManager.addStakingPool(pool1, pool1_weight); + }); + + describe("When Pool is already enabled", async () => { + beforeEach(async () => { + // Enable pool1 + await stakingManager.setPoolEnabled(pool1, true); + }); + + it("should set pool reward share", async () => { + await stakingManager.setPoolRewardShare(pool1, pool1_weight_after); + const poolConfig = await stakingManager.getPoolConfig(pool1); + expect(poolConfig.rewardShare).to.be.equal(pool1_weight_after); + }); + + it("should emit event", async () => { + await expect(stakingManager.setPoolRewardShare(pool1, pool1_weight_after)).to.emit(stakingManager, "PoolRewardShareSet").withArgs(pool1, pool1_weight_after); + }); + + it("should modify poolRewardShareSum", async () => { + const poolRewardShareSumBefore = new BigNumber((await stakingManager.poolRewardShareSum()).toString()); + await stakingManager.setPoolRewardShare(pool1, pool1_weight_after); + expect(await stakingManager.poolRewardShareSum()).to.be.equal(poolRewardShareSumBefore.minus(pool1_weight).plus(pool1_weight_after)); + }); + }); + + describe("When Pool is Disabled", async () => { + // Pool is disabled as it's not enabled + + it("should set pool reward share", async () => { + await stakingManager.setPoolRewardShare(pool1, pool1_weight_after); + const poolConfig = await stakingManager.getPoolConfig(pool1); + expect(poolConfig.rewardShare).to.be.equal(pool1_weight_after); + }); + + it("should emit event", async () => { + await expect(stakingManager.setPoolRewardShare(pool1, pool1_weight_after)).to.emit(stakingManager, "PoolRewardShareSet").withArgs(pool1, pool1_weight_after); + }); + + // TODO: fix contract + it("should not affect poolRewardShareSum", async () => { + const poolRewardShareSumBefore = new BigNumber((await stakingManager.poolRewardShareSum()).toString()); + await stakingManager.setPoolRewardShare(pool1, pool1_weight_after); + expect(await stakingManager.poolRewardShareSum()).to.be.equal(poolRewardShareSumBefore); + }); + + it("should revert if pool does not exist", async () => { + await expect(stakingManager.setPoolRewardShare(pool2, pool1_weight_after)).to.be.revertedWithCustomError(errorLibrary, "PoolDoesNotExist"); + }); + }); + }); + + describe("Setting Contract Addresses", async () => { + + describe("Setting Proof Marketplace", async () => { + it("should set proofMarketplace", async () => { + const tx = await stakingManager.setProofMarketplace(proofMarketplace.getAddress()); + expect(tx).to.emit(stakingManager, "ProofMarketplaceSet").withArgs(proofMarketplace.getAddress()); + }); + + it("should emit event", async () => { + await expect(stakingManager.setProofMarketplace(proofMarketplace.getAddress())).to.emit(stakingManager, "ProofMarketplaceSet").withArgs(proofMarketplace.getAddress()); + }); + }); + + describe("Setting Fee Token", async () => { + let feeToken: string; + + beforeEach(async () => { + feeToken = await ethers.Wallet.createRandom().getAddress(); + }); + + it("should set feeToken", async () => { + const tx = await stakingManager.setFeeToken(feeToken); + expect(tx).to.emit(stakingManager, "FeeTokenSet").withArgs(feeToken); + }); + + it("should emit event", async () => { + await expect(stakingManager.setFeeToken(feeToken)).to.emit(stakingManager, "FeeTokenSet").withArgs(feeToken); + }); + }); + }); + + describe("Emergency Withdraw", async () => { + it("should revert if token address is zero", async () => { + await expect(stakingManager.emergencyWithdraw(ethers.ZeroAddress, ethers.ZeroAddress)).to.be.revertedWithCustomError(errorLibrary, "ZeroTokenAddress"); + }); + + it("should revert if \'to\' address is zero", async () => { + await expect(stakingManager.emergencyWithdraw(await admin.getAddress(), ethers.ZeroAddress)).to.be.revertedWithCustomError(errorLibrary, "ZeroToAddress"); + }); + + it("should transfer all tokens to the to address", async () => { + // transfer some tokens to the staking manager + await usdc.connect(tokenHolder).transfer(stakingManager.getAddress(), new BigNumber(10).pow(18).multipliedBy(100).toString()); + + const tokenBalanceBefore = await usdc.balanceOf(await stakingManager.getAddress()); + const refundReceiverBalanceBefore = await usdc.balanceOf(refundReceiver.getAddress()); + expect(tokenBalanceBefore).to.be.equal(new BigNumber(10).pow(18).multipliedBy(100).toString()); + + await stakingManager.emergencyWithdraw(usdc.getAddress(), refundReceiver.getAddress()); + + const tokenBalanceAfter = await usdc.balanceOf(await stakingManager.getAddress()); + const refundReceiverBalanceAfter = await usdc.balanceOf(refundReceiver.getAddress()); + expect(tokenBalanceAfter).to.be.equal(0); + expect(refundReceiverBalanceAfter).to.be.equal(new BigNumber(10).pow(18).multipliedBy(100).toString()); + }); + }); + }); + + }); +}); + diff --git a/test/SymbioticMiddleware.ts b/test/SymbioticMiddleware.ts new file mode 100644 index 0000000..fe6ae82 --- /dev/null +++ b/test/SymbioticMiddleware.ts @@ -0,0 +1,514 @@ +import { expect } from "chai"; +import { ethers, upgrades } from "hardhat"; +import { + Middleware, + Middleware__factory, + VaultMock, + VaultMock__factory, + InstantSlasherMock, + InstantSlasherMock__factory, + VetoSlasherMock, + VetoSlasherMock__factory, + MockAttestationVerifier, + MockAttestationVerifier__factory, +} from "../typechain-types"; +import { HDNodeWallet, Signer, SigningKey } from "ethers"; +import { BytesLike } from "ethers"; +import exp from "constants"; + +enum SlasherType { + UNDEFINED = 0, + NO_SLASH = 1, + INSTANT_SLASH = 2, + VETO_SLASH = 3, +} + +describe("Middleware Contract Tests", function () { + let middleware: Middleware; + let middlewareFactory: Middleware__factory; + let defaultAddress: Signer; + let owner: Signer; + let admin: Signer; + let otherAccount: Signer; + let attestationVerifier: MockAttestationVerifier; + const networkId = ethers.keccak256(ethers.toUtf8Bytes("KalypsoTest")); + + beforeEach(async function () { + [defaultAddress, owner, admin, otherAccount] = await ethers.getSigners(); + + const attestationVerifierFactory = (await ethers.getContractFactory( + "MockAttestationVerifier", + owner, + )) as MockAttestationVerifier__factory; + attestationVerifier = await (await attestationVerifierFactory.deploy()).waitForDeployment(); + + // Deploy Middleware implementation contract + middlewareFactory = (await ethers.getContractFactory("Middleware", owner)) as Middleware__factory; + // Deploy proxy without type assertion + const proxy = await upgrades.deployProxy( + middlewareFactory.connect(otherAccount), + [networkId, await attestationVerifier.getAddress(), await admin.getAddress()], + { initializer: "initialize" }, + ); + await proxy.waitForDeployment(); + + // Get the typed contract instance + middleware = Middleware__factory.connect(await proxy.getAddress(), admin); + }); + + describe("Contract Deployment and Initialization", function () { + it("Should set the correct admin and network ID upon initialization", async function () { + expect(await middleware.networkId()).to.equal(networkId); + expect(await middleware.hasRole(await middleware.DEFAULT_ADMIN_ROLE(), await admin.getAddress())).to.be.true; + expect(await middleware.getRoleMemberCount(await middleware.DEFAULT_ADMIN_ROLE())).to.equal(1); + expect(await middleware.getRoleMember(await middleware.DEFAULT_ADMIN_ROLE(), 0)).to.equal(await admin.getAddress()); + expect(await middleware.getNoOfVaults()).to.equal(0); + expect(await middleware.isSlashingEnabled()).to.equal(false); + }); + + it("Should prevent re-initialization", async function () { + await expect( + middleware.initialize(networkId, await attestationVerifier.getAddress(), await admin.getAddress()), + ).to.be.revertedWithCustomError(middleware, "InvalidInitialization"); + }); + + it("Should prevent initialization with zero admin address", async function () { + const middlewareFactory = (await ethers.getContractFactory("Middleware", owner)) as Middleware__factory; + await expect( + upgrades.deployProxy(middlewareFactory, [networkId, await attestationVerifier.getAddress(), ethers.ZeroAddress], { + initializer: "initialize", + }), + ).to.be.revertedWith("M:I-At least one admin necessary"); + }); + + it("Should prevent initialization with zero attestation verifier address", async function () { + const middlewareFactory = (await ethers.getContractFactory("Middleware", owner)) as Middleware__factory; + await expect( + upgrades.deployProxy(middlewareFactory, [networkId, ethers.ZeroAddress, await admin.getAddress()], { + initializer: "initialize", + }), + ).to.be.revertedWith("M:I-Attestation verifier cannot be zero address"); + }); + + it("Should prevent initialization with zero network ID", async function () { + const middlewareFactory = (await ethers.getContractFactory("Middleware", owner)) as Middleware__factory; + await expect( + upgrades.deployProxy(middlewareFactory, [ethers.ZeroHash, await attestationVerifier.getAddress(), await admin.getAddress()], { + initializer: "initialize", + }), + ).to.be.revertedWith("M:I-Network id cannot be zero"); + }); + + it("Deployer should not have admin role", async function () { + expect(await middleware.hasRole(await middleware.DEFAULT_ADMIN_ROLE(), await defaultAddress.getAddress())).to.be.false; + }); + }); + + describe("Access Control and Role Management", function () { + it("Only admin can grant roles", async function () { + const VAULT_CONFIG_SET_ROLE = await middleware.VAULT_CONFIG_SET_ROLE(); + const DEFAULT_ADMIN_ROLE = await middleware.DEFAULT_ADMIN_ROLE(); + + await expect(middleware.connect(otherAccount).grantRole(VAULT_CONFIG_SET_ROLE, await otherAccount.getAddress())) + .to.be.revertedWithCustomError(middleware, "AccessControlUnauthorizedAccount") + .withArgs(await otherAccount.getAddress(), DEFAULT_ADMIN_ROLE); + + await middleware.connect(admin).grantRole(VAULT_CONFIG_SET_ROLE, await otherAccount.getAddress()); + expect(await middleware.hasRole(VAULT_CONFIG_SET_ROLE, await otherAccount.getAddress())).to.be.true; + }); + + it("Admin cannot be removed if it's the last one", async function () { + await expect( + middleware.connect(admin).revokeRole(await middleware.DEFAULT_ADMIN_ROLE(), await admin.getAddress()), + ).to.be.revertedWith("M:RR-All admins cant be removed"); + }); + + it("Admin can grant and revoke roles", async function () { + await middleware.connect(admin).grantRole(await middleware.DEFAULT_ADMIN_ROLE(), await otherAccount.getAddress()); + expect(await middleware.hasRole(await middleware.DEFAULT_ADMIN_ROLE(), await otherAccount.getAddress())).to.be.true; + + await middleware.connect(admin).revokeRole(await middleware.DEFAULT_ADMIN_ROLE(), await otherAccount.getAddress()); + expect(await middleware.hasRole(await middleware.DEFAULT_ADMIN_ROLE(), await otherAccount.getAddress())).to.be.false; + }); + + it("Admin can grant and revoke multiple roles", async function () { + const VAULT_CONFIG_SET_ROLE = await middleware.VAULT_CONFIG_SET_ROLE(); + const MIDDLEWARE_CONFIG_SET_ROLE = await middleware.MIDDLEWARE_CONFIG_SET_ROLE(); + + await middleware.connect(admin).grantRole(VAULT_CONFIG_SET_ROLE, await otherAccount.getAddress()); + await middleware.connect(admin).grantRole(MIDDLEWARE_CONFIG_SET_ROLE, await otherAccount.getAddress()); + + expect(await middleware.hasRole(VAULT_CONFIG_SET_ROLE, await otherAccount.getAddress())).to.be.true; + expect(await middleware.hasRole(MIDDLEWARE_CONFIG_SET_ROLE, await otherAccount.getAddress())).to.be.true; + + await middleware.connect(admin).revokeRole(VAULT_CONFIG_SET_ROLE, await otherAccount.getAddress()); + await middleware.connect(admin).revokeRole(MIDDLEWARE_CONFIG_SET_ROLE, await otherAccount.getAddress()); + + expect(await middleware.hasRole(VAULT_CONFIG_SET_ROLE, await otherAccount.getAddress())).to.be.false; + expect(await middleware.hasRole(MIDDLEWARE_CONFIG_SET_ROLE, await otherAccount.getAddress())).to.be.false; + }); + }); + + describe("Vault Configuration", function () { + let vaultAddress: string; + let slasherAddress: string; + let collateralAddress: string; + + beforeEach(async function () { + // Mock Vault + const VaultMockFactory = (await ethers.getContractFactory("VaultMock", owner)) as VaultMock__factory; + slasherAddress = ethers.Wallet.createRandom().address; + collateralAddress = ethers.Wallet.createRandom().address; + + const vault = await VaultMockFactory.deploy(collateralAddress); + await vault.waitForDeployment(); + await vault.setSlasher(slasherAddress); + vaultAddress = await vault.getAddress(); + + // Grant VAULT_CONFIG_SET_ROLE to admin + const VAULT_CONFIG_SET_ROLE = await middleware.VAULT_CONFIG_SET_ROLE(); + await middleware.connect(admin).grantRole(VAULT_CONFIG_SET_ROLE, await admin.getAddress()); + }); + + it("Should allow admin to enable slashing", async function () { + expect(await middleware.isSlashingEnabled()).to.equal(false); + await middleware.connect(admin).setSlashingEnabled(true); + expect(await middleware.isSlashingEnabled()).to.equal(true); + }); + + it("Should prevent non-admin from enabling slashing", async function () { + await expect(middleware.connect(otherAccount).setSlashingEnabled(true)).to.be.revertedWith("only admin"); + }); + + it("Should allow admin to configure a vault", async function () { + await middleware.connect(admin).configureVault(vaultAddress, SlasherType.INSTANT_SLASH); // SlasherType.INSTANT_SLASH + + const vaultInfo = await middleware.vaultInfo(vaultAddress); + expect(vaultInfo.slasherType).to.equal(SlasherType.INSTANT_SLASH); + expect(vaultInfo.collateral).to.equal(collateralAddress); + expect(vaultInfo.slasher).to.equal(slasherAddress); + expect(await middleware.vaults(0)).to.equal(vaultAddress); + expect(await middleware.getNoOfVaults()).to.equal(1); + }); + + it("Should prevent configuring a vault with zero address", async function () { + await expect(middleware.connect(admin).configureVault(ethers.ZeroAddress, 1)).to.be.revertedWith("M:CV-Vault cannot be zero address"); + }); + + it("Should prevent configuring a vault with undefined slasher type", async function () { + await expect(middleware.connect(admin).configureVault(vaultAddress, 0)).to.be.revertedWith("M:CV-Invalid slasher type"); + + await expect(middleware.connect(admin).configureVault(vaultAddress, 4)).to.be.reverted; + }); + + it("Should prevent non-admin from configuring a vault", async function () { + const VAULT_CONFIG_SET_ROLE = await middleware.VAULT_CONFIG_SET_ROLE(); + await expect(middleware.connect(otherAccount).configureVault(vaultAddress, 1)) + .to.be.revertedWithCustomError(middleware, "AccessControlUnauthorizedAccount") + .withArgs(await otherAccount.getAddress(), VAULT_CONFIG_SET_ROLE); + }); + + it("Should configure a vault with no slasher", async function () { + const vault = VaultMock__factory.connect(vaultAddress, owner); + await vault.setSlasher(ethers.ZeroAddress); + await middleware.connect(admin).configureVault(vaultAddress, SlasherType.NO_SLASH); + const vaultInfo = await middleware.vaultInfo(vaultAddress); + expect(vaultInfo.slasherType).to.equal(SlasherType.NO_SLASH); + }); + + it("Should be possible to reconfigure a vault", async function () { + await middleware.connect(admin).configureVault(vaultAddress, SlasherType.INSTANT_SLASH); // SlasherType.INSTANT_SLASH + let vaultInfo = await middleware.vaultInfo(vaultAddress); + expect(vaultInfo.slasherType).to.equal(SlasherType.INSTANT_SLASH); + + await middleware.connect(admin).configureVault(vaultAddress, SlasherType.VETO_SLASH); // SlasherType.VETO_SLASH + + vaultInfo = await middleware.vaultInfo(vaultAddress); + expect(vaultInfo.slasherType).to.equal(SlasherType.VETO_SLASH); + }); + }); + + describe("Network Configuration", function () { + beforeEach(async function () { + // Grant MIDDLEWARE_CONFIG_SET_ROLE to admin + const MIDDLEWARE_CONFIG_SET_ROLE = await middleware.MIDDLEWARE_CONFIG_SET_ROLE(); + await middleware.connect(admin).grantRole(MIDDLEWARE_CONFIG_SET_ROLE, await admin.getAddress()); + }); + + it("Should allow admin to update network ID", async function () { + const newNetworkId = ethers.keccak256(ethers.toUtf8Bytes("KalypsoTest2")); + await middleware.connect(admin).updateNetworkId(newNetworkId); + + expect(await middleware.networkId()).to.equal(newNetworkId); + }); + + it("Should prevent non-admin from updating network ID", async function () { + const MIDDLEWARE_CONFIG_SET_ROLE = await middleware.MIDDLEWARE_CONFIG_SET_ROLE(); + await expect(middleware.connect(otherAccount).updateNetworkId(ethers.keccak256(ethers.toUtf8Bytes("KalypsoTest2")))) + .to.be.revertedWithCustomError(middleware, "AccessControlUnauthorizedAccount") + .withArgs(await otherAccount.getAddress(), MIDDLEWARE_CONFIG_SET_ROLE); + }); + + it("Should prevent updating network ID with zero value", async function () { + await expect(middleware.connect(admin).updateNetworkId(ethers.ZeroHash)).to.be.revertedWith("M:UN-Network id cannot be zero"); + }); + }); + + describe("Instant Slashing Functions", function () { + let vaultAddress: string; + let slasherAddress: string; + let collateralAddress: string; + let operatorAddress: string; + let jobId = 1; + let amount = ethers.parseEther("100"); + let captureTimestamp = Math.floor(Date.now() / 1000); + let hints: BytesLike = ethers.keccak256(ethers.toUtf8Bytes("Hints")); + let enclaveKey: HDNodeWallet = ethers.Wallet.createRandom(); + let proof: BytesLike; + + beforeEach(async function () { + // Mock Vault + const VaultMockFactory = (await ethers.getContractFactory("VaultMock", owner)) as VaultMock__factory; + collateralAddress = ethers.Wallet.createRandom().address; + + const vault = await VaultMockFactory.deploy(collateralAddress); + await vault.waitForDeployment(); + vaultAddress = await vault.getAddress(); + + // Mock Instant Slasher + const InstantSlasherMockFactory = (await ethers.getContractFactory("InstantSlasherMock", owner)) as InstantSlasherMock__factory; + const instantSlasher: InstantSlasherMock = await InstantSlasherMockFactory.deploy(vaultAddress); + await instantSlasher.waitForDeployment(); + slasherAddress = await instantSlasher.getAddress(); + + // Link the Vault and Slasher + await vault.setSlasher(slasherAddress); + + // Operator address + operatorAddress = ethers.Wallet.createRandom().address; + + // Grant VAULT_CONFIG_SET_ROLE to admin + const VAULT_CONFIG_SET_ROLE = await middleware.VAULT_CONFIG_SET_ROLE(); + await middleware.connect(admin).grantRole(VAULT_CONFIG_SET_ROLE, await admin.getAddress()); + + // Configure Vault in Middleware + await middleware.connect(admin).configureVault(vaultAddress, SlasherType.INSTANT_SLASH); // SlasherType.INSTANT_SLASH + + await middleware.connect(admin).setSlashingEnabled(true); + + // generate proof + const abiEncoder = new ethers.AbiCoder(); + const slashData = abiEncoder.encode( + ["uint256", "address", "address", "address", "uint256", "uint256"], + [jobId, await otherAccount.getAddress(), vaultAddress, operatorAddress, amount, captureTimestamp], + ); + const enclaveKeySig = await enclaveKey.signMessage(ethers.getBytes(ethers.keccak256(slashData))); + const attestationData = abiEncoder.encode( + ["bytes", "(bytes,bytes,bytes,bytes,uint256)"], + [ + enclaveKeySig, + [ + SigningKey.computePublicKey(enclaveKey.publicKey, false).replace("0x04", "0x"), + "0x12312313", + "0x12312312312342", + "0x32145213", + Date.now(), + ], + ], + ); + proof = abiEncoder.encode(["bytes", "bytes"], [enclaveKeySig, attestationData]); + }); + + it("Should perform instant slash successfully", async function () { + const instantSlasher = InstantSlasherMock__factory.connect(slasherAddress, owner); + + await expect( + middleware + .connect(otherAccount) + .slash(jobId, await otherAccount.getAddress(), vaultAddress, operatorAddress, amount, captureTimestamp, hints, proof), + ) + .to.emit(instantSlasher, "InstantSlashExecuted") + .withArgs(networkId, operatorAddress, amount, captureTimestamp, hints); + + const slashInfo = await middleware.slashInfo(vaultAddress, jobId); + expect(slashInfo.operator).to.equal(operatorAddress); + expect(slashInfo.amount).to.equal(amount); + }); + + it("Should prevent slashing with invalid slasher type", async function () { + // Re-configure vault with VETO_SLASH + await middleware.connect(admin).configureVault(vaultAddress, SlasherType.VETO_SLASH); // SlasherType.VETO_SLASH + + await expect( + middleware + .connect(otherAccount) + .slash(jobId, await otherAccount.getAddress(), vaultAddress, operatorAddress, amount, captureTimestamp, hints, proof), + ).to.be.revertedWith("M:S-Invalid slasher type"); + }); + + it("Should prevent slashing with zero amount", async function () { + await expect( + middleware + .connect(otherAccount) + .slash(jobId, await otherAccount.getAddress(), vaultAddress, operatorAddress, 0, captureTimestamp, hints, proof), + ).to.be.revertedWith("M:S-Invalid amount"); + }); + + it("Should prevent double slashing of the same job ID", async function () { + // Assuming proof verification passes + + await middleware + .connect(otherAccount) + .slash(jobId, await otherAccount.getAddress(), vaultAddress, operatorAddress, amount, captureTimestamp, hints, proof); + + await expect( + middleware + .connect(otherAccount) + .slash(jobId, await otherAccount.getAddress(), vaultAddress, operatorAddress, amount, captureTimestamp, hints, proof), + ).to.be.revertedWith("M:S-Already slashed"); + }); + }); + + describe("Veto Slashing Functions", function () { + let vaultAddress: string; + let slasherAddress: string; + let collateralAddress: string; + let operatorAddress: string; + let jobId = 1; + let amount = ethers.parseEther("100"); + let captureTimestamp = Math.floor(Date.now() / 1000); + let hints: BytesLike = ethers.keccak256(ethers.toUtf8Bytes("Hints")); + let enclaveKey: HDNodeWallet = ethers.Wallet.createRandom(); + let proof: BytesLike; + + beforeEach(async function () { + // Mock Vault + const VaultMockFactory = (await ethers.getContractFactory("VaultMock", owner)) as VaultMock__factory; + collateralAddress = ethers.Wallet.createRandom().address; + + const vault = await VaultMockFactory.deploy(collateralAddress); + await vault.waitForDeployment(); + vaultAddress = await vault.getAddress(); + + // Mock Veto Slasher + const VetoSlasherMockFactory = (await ethers.getContractFactory("VetoSlasherMock", owner)) as VetoSlasherMock__factory; + const vetoSlasher: VetoSlasherMock = await VetoSlasherMockFactory.deploy(); + await vetoSlasher.waitForDeployment(); + slasherAddress = await vetoSlasher.getAddress(); + + // Link the Vault and Slasher + await vault.setSlasher(slasherAddress); + + // Operator address + operatorAddress = ethers.Wallet.createRandom().address; + + // Grant VAULT_CONFIG_SET_ROLE to admin + const VAULT_CONFIG_SET_ROLE = await middleware.VAULT_CONFIG_SET_ROLE(); + await middleware.connect(admin).grantRole(VAULT_CONFIG_SET_ROLE, await admin.getAddress()); + + // Configure Vault in Middleware + await middleware.connect(admin).configureVault(vaultAddress, SlasherType.VETO_SLASH); // SlasherType.VETO_SLASH + await middleware.connect(admin).setSlashingEnabled(true); + + // generate proof + const abiEncoder = new ethers.AbiCoder(); + const slashData = abiEncoder.encode( + ["uint256", "address", "address", "address", "uint256", "uint256"], + [jobId, await otherAccount.getAddress(), vaultAddress, operatorAddress, amount, captureTimestamp], + ); + const enclaveKeySig = await enclaveKey.signMessage(ethers.getBytes(ethers.keccak256(slashData))); + const attestationData = abiEncoder.encode( + ["bytes", "(bytes,bytes,bytes,bytes,uint256)"], + [ + enclaveKeySig, + [ + SigningKey.computePublicKey(enclaveKey.publicKey, false).replace("0x04", "0x"), + "0x12312313", + "0x12312312312342", + "0x32145213", + Date.now(), + ], + ], + ); + proof = abiEncoder.encode(["bytes", "bytes"], [enclaveKeySig, attestationData]); + }); + + it("Should perform veto slash successfully", async function () { + const vetoSlasher = VetoSlasherMock__factory.connect(slasherAddress, owner); + + await expect( + middleware + .connect(otherAccount) + .requestSlash(jobId, await otherAccount.getAddress(), vaultAddress, operatorAddress, amount, captureTimestamp, hints, proof), + ) + .to.emit(vetoSlasher, "VetoSlashRequestPlaced") + .withArgs(networkId, operatorAddress, amount, captureTimestamp, hints); + + const slashInfo = await middleware.slashInfo(vaultAddress, jobId); + expect(slashInfo.operator).to.equal(operatorAddress); + expect(slashInfo.amount).to.equal(amount); + }); + + it("Should prevent slashing with invalid slasher type", async function () { + // Re-configure vault with INSTANT_SLASH + await middleware.connect(admin).configureVault(vaultAddress, SlasherType.INSTANT_SLASH); // SlasherType.INSTANT_SLASH + + await expect( + middleware + .connect(otherAccount) + .requestSlash(jobId, await otherAccount.getAddress(), vaultAddress, operatorAddress, amount, captureTimestamp, hints, proof), + ).to.be.revertedWith("M:RS-Invalid slasher type"); + }); + + it("Should prevent slashing with zero amount", async function () { + await expect( + middleware + .connect(otherAccount) + .requestSlash(jobId, await otherAccount.getAddress(), vaultAddress, operatorAddress, 0, captureTimestamp, hints, proof), + ).to.be.revertedWith("M:RS-Invalid amount"); + }); + }); + + describe("Delegates", function () { + let delegateAddress: string; + let operator: Signer; + + beforeEach(async function () { + let delegate: Signer; + [, , , , , , delegate, operator] = await ethers.getSigners(); + delegateAddress = await delegate.getAddress(); + }); + + it("If no delegate is set, operator is the delegate", async function () { + const operatorAddress = await operator.getAddress(); + expect(await middleware.getDelegate(operatorAddress)).to.equal(operatorAddress); + }); + + it("Anyone can add a delegate", async function () { + await middleware.connect(operator).setDelegate(delegateAddress); + const operatorAddress = await operator.getAddress(); + + expect(await middleware.getDelegate(operatorAddress)).to.equal(delegateAddress); + }); + + it("Should be possible to update delegate", async function () { + await middleware.connect(operator).setDelegate(delegateAddress); + const operatorAddress = await operator.getAddress(); + + await middleware.connect(operator).setDelegate(ethers.Wallet.createRandom().address); + expect(await middleware.getDelegate(operatorAddress)).to.not.equal(delegateAddress); + }); + + it("Should be possible to set delegate to operator address", async function () { + await middleware.connect(operator).setDelegate(delegateAddress); + const operatorAddress = await operator.getAddress(); + + await middleware.connect(operator).setDelegate(operatorAddress); + expect(await middleware.getDelegate(operatorAddress)).to.equal(operatorAddress); + }); + + it("Should prevent adding zero address as delegate", async function () { + await expect(middleware.connect(admin).setDelegate(ethers.ZeroAddress)).to.be.revertedWith("M:SD-Delegate cannot be zero address"); + }); + }); +}); diff --git a/test/foundry/TestSetup.t.sol b/test/foundry/TestSetup.t.sol new file mode 100644 index 0000000..2620771 --- /dev/null +++ b/test/foundry/TestSetup.t.sol @@ -0,0 +1,377 @@ +// // SPDX-License-Identifier: MIT + +// pragma solidity ^0.8.26; + +// import {Test, console} from "forge-std/Test.sol"; + +// /* mocks */ +// import {USDC} from "./mocks/USDC.sol"; +// import {POND} from "./mocks/POND.sol"; +// import {WETH} from "./mocks/WETH.sol"; + +// /* contracts */ +// import {JobManager} from "../../contracts/staking/l2_contracts/JobManager.sol"; +// import {StakingManager} from "../../contracts/staking/l2_contracts/StakingManager.sol"; +// import {NativeStaking} from "../../contracts/staking/l2_contracts/NativeStaking.sol"; +// import {SymbioticStaking} from "../../contracts/staking/l2_contracts/SymbioticStaking.sol"; +// import {SymbioticStakingReward} from "../../contracts/staking/l2_contracts/SymbioticStakingReward.sol"; + +// import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; + +// /* interfaces */ +// import {IJobManager} from "../../contracts/interfaces/staking/IJobManager.sol"; +// import {IStakingManager} from "../../contracts/interfaces/staking/IStakingManager.sol"; +// import {INativeStaking} from "../../contracts/interfaces/staking/INativeStaking.sol"; +// import {ISymbioticStaking} from "../../contracts/interfaces/staking/ISymbioticStaking.sol"; +// import {ISymbioticStakingReward} from "../../contracts/interfaces/staking/ISymbioticStakingReward.sol"; +// import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +// /* libraries */ +// import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; + +// contract TestSetup is Test { +// uint256 constant public FIFTEEN_PERCENT = 15; +// uint256 constant public TWENTY_PERCENT = 20; +// uint256 constant public THIRTY_PERCENT = 30; +// uint256 constant public FORTY_PERCENT = 40; +// uint256 constant public FIFTY_PERCENT = 50; +// uint256 constant public SIXTY_PERCENT = 60; +// uint256 constant public HUNDRED_PERCENT = 100; + +// uint256 constant public FUND_FOR_GAS = 10 ether; // 10 ether +// uint256 constant public FUND_FOR_FEE = 10_000 ether; // 10,000 USDC +// uint256 constant public FUND_FOR_SELF_STAKE = 1000_000 ether; // 10,000 POND +// uint256 constant public FUND_FOR_INFLATION_REWARD = 100_000 ether; // 100,000 POND + +// // uint256 constant public INFLATION_REWARD_EPOCH_SIZE = 30 minutes; // 30 minutes +// // uint256 constant public INFLATION_REWARD_PER_EPOCH = 100 ether; // 1,000 POND + +// uint256 constant public SUBMISSION_COOLDOWN = 12 hours; + +// uint256 constant public USDC_DECIMALS = 1e6; + + +// /* contracts */ +// address public jobManager; +// address public inflationRewardManager; + +// address public stakingManager; +// address public nativeStaking; +// address public symbioticStaking; +// address public symbioticStakingReward; + +// /* reward tokens */ +// address public feeToken; +// address public inflationRewardToken; + +// /* stake tokens */ +// address public usdc; +// address public pond; +// address public weth; + +// /* admin */ +// address public deployer; +// address public admin; +// address public inflationRewardVault; // holds inflation reward tokens + +// /* operators */ +// address public operatorA; +// address public operatorB; +// address public operatorC; + +// /* symbiotic vaults */ +// address public symbioticVaultA; +// address public symbioticVaultB; +// address public symbioticVaultC; +// address public symbioticVaultD; +// address public symbioticVaultE; + +// /* transmitters */ +// address public transmitterA; +// address public transmitterB; +// address public transmitterC; + +// /* stakers */ +// address public stakerA; +// address public stakerB; +// address public stakerC; + +// /* slasher */ +// address public slasher; + +// /* job requesters */ +// address public jobRequesterA; +// address public jobRequesterB; +// address public jobRequesterC; + + +// function _setupAddr() internal { +// /* set address */ +// deployer = makeAddr("deployer"); +// admin = makeAddr("admin"); +// inflationRewardVault = makeAddr("inflationRewardVault"); + +// slasher = makeAddr("slasher"); + +// stakerA = makeAddr("stakerA"); +// stakerB = makeAddr("stakerB"); +// stakerC = makeAddr("stakerC"); + +// operatorA = makeAddr("operatorA"); +// operatorB = makeAddr("operatorB"); +// operatorC = makeAddr("operatorC"); + +// symbioticVaultA = makeAddr("symbioticVaultA"); +// symbioticVaultB = makeAddr("symbioticVaultB"); +// symbioticVaultC = makeAddr("symbioticVaultC"); +// symbioticVaultD = makeAddr("symbioticVaultD"); +// symbioticVaultE = makeAddr("symbioticVaultE"); + +// transmitterA = makeAddr("transmitterA"); +// transmitterB = makeAddr("transmitterB"); +// transmitterC = makeAddr("transmitterC"); + +// jobRequesterA = makeAddr("jobRequesterA"); +// jobRequesterB = makeAddr("jobRequesterB"); +// jobRequesterC = makeAddr("jobRequesterC"); + +// /* fund gas */ +// vm.deal(deployer, FUND_FOR_GAS); +// vm.deal(admin, FUND_FOR_GAS); +// vm.deal(inflationRewardVault, FUND_FOR_GAS); + +// vm.deal(operatorA, FUND_FOR_GAS); +// vm.deal(operatorB, FUND_FOR_GAS); +// vm.deal(operatorC, FUND_FOR_GAS); +// vm.deal(slasher, FUND_FOR_GAS); + +// vm.deal(stakerA, FUND_FOR_GAS); +// vm.deal(stakerB, FUND_FOR_GAS); +// vm.deal(stakerC, FUND_FOR_GAS); + +// vm.deal(transmitterA, FUND_FOR_GAS); +// vm.deal(transmitterB, FUND_FOR_GAS); +// vm.deal(transmitterC, FUND_FOR_GAS); + +// vm.deal(jobRequesterA, FUND_FOR_GAS); +// vm.deal(jobRequesterB, FUND_FOR_GAS); +// vm.deal(jobRequesterC, FUND_FOR_GAS); + +// /* label */ +// vm.label(deployer, "deployer"); +// vm.label(admin, "admin"); +// vm.label(slasher, "slasher"); + +// vm.label(operatorA, "operatorA"); +// vm.label(operatorB, "operatorB"); +// vm.label(operatorC, "operatorC"); + +// vm.label(stakerA, "stakerA"); +// vm.label(stakerB, "stakerB"); +// vm.label(stakerC, "stakerC"); + +// vm.label(symbioticVaultA, "symbioticVaultA"); +// vm.label(symbioticVaultB, "symbioticVaultB"); +// vm.label(symbioticVaultC, "symbioticVaultC"); +// vm.label(symbioticVaultD, "symbioticVaultD"); +// vm.label(symbioticVaultE, "symbioticVaultE"); + +// vm.label(jobRequesterA, "jobRequesterA"); +// vm.label(jobRequesterB, "jobRequesterB"); +// vm.label(jobRequesterC, "jobRequesterC"); + +// vm.label(transmitterA, "transmitterA"); +// vm.label(transmitterB, "transmitterB"); +// vm.label(transmitterC, "transmitterC"); +// } + +// /*======================================== internal ========================================*/ + +// function _setupContracts() internal { +// _deployContracts(); +// _initializeContracts(); +// } + +// function _deployContracts() internal { +// vm.startPrank(deployer); + +// // FeeToken +// usdc = address(new USDC(admin)); +// feeToken = usdc; + +// // InflationRewardToken +// pond = address(new POND(admin)); +// inflationRewardToken = pond; + +// // stakeToken +// weth = address(new WETH(admin)); +// pond = inflationRewardToken; + +// // contract implementations +// address jobManagerImpl = address(new JobManager()); +// address stakingManagerImpl = address(new StakingManager()); +// address nativeStakingImpl = address(new NativeStaking()); +// address symbioticStakingImpl = address(new SymbioticStaking()); +// address symbioticStakingRewardImpl = address(new SymbioticStakingReward()); + +// // deploy proxies +// jobManager = address(new ERC1967Proxy(jobManagerImpl, "")); +// stakingManager = address(new ERC1967Proxy(stakingManagerImpl, "")); +// nativeStaking = address(new ERC1967Proxy(nativeStakingImpl, "")); +// symbioticStaking = address(new ERC1967Proxy(symbioticStakingImpl, "")); +// symbioticStakingReward = address(new ERC1967Proxy(symbioticStakingRewardImpl, "")); +// // inflationRewardManager = address(new ERC1967Proxy(inflationRewardManagerImpl, "")); +// vm.stopPrank(); + +// /* label */ +// vm.label(address(jobManager), "JobManager"); +// vm.label(address(stakingManager), "StakingManager"); +// vm.label(address(nativeStaking), "NativeStaking"); +// vm.label(address(symbioticStaking), "SymbioticStaking"); +// vm.label(address(symbioticStakingReward), "SymbioticStakingReward"); +// // vm.label(address(inflationRewardManager), "InflationRewardManager"); +// } + +// function _initializeContracts() internal { +// vm.startPrank(admin); + +// // JobManager +// JobManager(address(jobManager)).initialize( +// admin, address(stakingManager), address(symbioticStaking), address(symbioticStakingReward), address(feeToken), 1 hours +// ); +// assertEq(JobManager(jobManager).hasRole(JobManager(jobManager).DEFAULT_ADMIN_ROLE(), admin), true); + +// // StakingManager +// StakingManager(address(stakingManager)).initialize( +// admin, +// address(jobManager), +// address(symbioticStaking), +// address(feeToken) +// ); +// assertEq(StakingManager(stakingManager).hasRole(StakingManager(stakingManager).DEFAULT_ADMIN_ROLE(), admin), true); + +// // NativeStaking +// NativeStaking(address(nativeStaking)).initialize( +// admin, +// address(stakingManager), +// 2 days, // withdrawalDuration +// address(feeToken) +// ); +// assertEq(NativeStaking(nativeStaking).hasRole(NativeStaking(nativeStaking).DEFAULT_ADMIN_ROLE(), admin), true); + +// // SymbioticStaking +// SymbioticStaking(address(symbioticStaking)).initialize( +// admin, +// jobManager, +// stakingManager, +// symbioticStakingReward, +// feeToken +// ); +// assertEq(SymbioticStaking(symbioticStaking).hasRole(SymbioticStaking(symbioticStaking).DEFAULT_ADMIN_ROLE(), admin), true); +// // SymbioticStakingReward +// SymbioticStakingReward(address(symbioticStakingReward)).initialize( +// admin, +// jobManager, +// symbioticStaking, +// feeToken +// ); +// assertEq(SymbioticStakingReward(symbioticStakingReward).hasRole(SymbioticStakingReward(symbioticStakingReward).DEFAULT_ADMIN_ROLE(), admin), true); + +// // InflationRewardManager +// // InflationRewardManager(address(inflationRewardManager)).initialize( +// // admin, +// // block.timestamp, +// // jobManager, +// // stakingManager, +// // symbioticStaking, +// // symbioticStakingReward, +// // inflationRewardToken, +// // INFLATION_REWARD_EPOCH_SIZE, // inflationRewardEpochSize +// // INFLATION_REWARD_PER_EPOCH // inflationRewardPerEpoch +// // ); +// // assertEq(InflationRewardManager(inflationRewardManager).hasRole(InflationRewardManager(inflationRewardManager).DEFAULT_ADMIN_ROLE(), admin), true); +// vm.stopPrank(); +// } + +// function _setJobManagerConfig() internal { +// vm.startPrank(admin); +// // operatorA: 30% of the reward as comission +// JobManager(jobManager).setOperatorRewardShare(operatorA, _calcShareAmount(THIRTY_PERCENT)); +// // operatorB: 50% of the reward as comission +// JobManager(jobManager).setOperatorRewardShare(operatorB, _calcShareAmount(FIFTY_PERCENT)); +// // operatorB: 15% of the reward as comission +// JobManager(jobManager).setOperatorRewardShare(operatorC, _calcShareAmount(FIFTEEN_PERCENT)); +// vm.stopPrank(); +// } + +// function _setStakingManagerConfig() internal { +// address[] memory pools = new address[](2); +// pools[0] = nativeStaking; +// pools[1] = symbioticStaking; + +// uint256[] memory shares = new uint256[](2); +// shares[0] = 0; +// shares[1] = _calcShareAmount(HUNDRED_PERCENT); + +// vm.startPrank(admin); +// StakingManager(stakingManager).addStakingPool(nativeStaking); +// StakingManager(stakingManager).addStakingPool(symbioticStaking); + +// StakingManager(stakingManager).setPoolRewardShare(pools, shares); + +// StakingManager(stakingManager).setEnabledPool(nativeStaking, true); +// StakingManager(stakingManager).setEnabledPool(symbioticStaking, true); +// vm.stopPrank(); + +// assertEq(IStakingManager(stakingManager).getPoolConfig(nativeStaking).share, 0); +// assertEq(IStakingManager(stakingManager).getPoolConfig(symbioticStaking).share, _calcShareAmount(HUNDRED_PERCENT)); +// } + +// function _setNativeStakingConfig() internal { +// vm.startPrank(admin); +// NativeStaking(nativeStaking).addStakeToken(pond, _calcShareAmount(HUNDRED_PERCENT)); +// NativeStaking(nativeStaking).setAmountToLock(pond, 1 ether); +// vm.stopPrank(); +// } + +// function _setSymbioticStakingConfig() internal { +// vm.startPrank(admin); + +// /* stake tokens and weights */ +// SymbioticStaking(symbioticStaking).addStakeToken(pond, _calcShareAmount(SIXTY_PERCENT)); +// SymbioticStaking(symbioticStaking).addStakeToken(weth, _calcShareAmount(FORTY_PERCENT)); + +// /* base transmitter comission rate and submission cooldown */ +// SymbioticStaking(symbioticStaking).setBaseTransmitterComissionRate(_calcShareAmount(TWENTY_PERCENT)); +// SymbioticStaking(symbioticStaking).setSubmissionCooldown(12 hours); + +// /* amount to lock */ +// SymbioticStaking(symbioticStaking).setAmountToLock(pond, 0.2 ether); +// SymbioticStaking(symbioticStaking).setAmountToLock(weth, 0.2 ether); + +// vm.stopPrank(); + +// assertEq(SymbioticStaking(symbioticStaking).baseTransmitterComissionRate(), _calcShareAmount(TWENTY_PERCENT)); +// assertEq(SymbioticStaking(symbioticStaking).submissionCooldown(), SUBMISSION_COOLDOWN); +// } + +// function _fund_tokens() internal { +// deal(pond, operatorA, FUND_FOR_SELF_STAKE); +// deal(pond, operatorB, FUND_FOR_SELF_STAKE); +// deal(pond, operatorC, FUND_FOR_SELF_STAKE); + +// deal(usdc, jobRequesterA, FUND_FOR_FEE); +// deal(usdc, jobRequesterB, FUND_FOR_FEE); +// deal(usdc, jobRequesterC, FUND_FOR_FEE); + +// deal(inflationRewardToken, inflationRewardManager, FUND_FOR_INFLATION_REWARD); +// } + + +// /*===================================== internal pure ======================================*/ + +// /// @notice convert 100% -> 1e18 (i.e. 50 -> 50e17) +// function _calcShareAmount(uint256 _shareIntPercentage) internal pure returns (uint256) { +// return Math.mulDiv(_shareIntPercentage, 1e18, 100); +// } +// } diff --git a/test/foundry/e2e/KalypsoStaking.t.sol b/test/foundry/e2e/KalypsoStaking.t.sol new file mode 100644 index 0000000..63a25f1 --- /dev/null +++ b/test/foundry/e2e/KalypsoStaking.t.sol @@ -0,0 +1,904 @@ +// // SPDX-License-Identifier: UNLICENSED +// pragma solidity ^0.8.20; + +// import "forge-std/Test.sol"; +// import "forge-std/console.sol"; +// import {TestSetup} from "../TestSetup.t.sol"; + +// /* contracts */ +// import {JobManager} from "../../../contracts/staking/l2_contracts/JobManager.sol"; +// import {StakingManager} from "../../../contracts/staking/l2_contracts/StakingManager.sol"; +// import {SymbioticStaking} from "../../../contracts/staking/l2_contracts/SymbioticStaking.sol"; +// import {SymbioticStakingReward} from "../../../contracts/staking/l2_contracts/SymbioticStakingReward.sol"; + +// /* interfaces */ +// import {IJobManager} from "../../../contracts/interfaces/staking/IJobManager.sol"; +// import {IStakingManager} from "../../../contracts/interfaces/staking/IStakingManager.sol"; +// import {INativeStaking} from "../../../contracts/interfaces/staking/INativeStaking.sol"; +// import {ISymbioticStaking} from "../../../contracts/interfaces/staking/ISymbioticStaking.sol"; +// import {ISymbioticStakingReward} from "../../../contracts/interfaces/staking/ISymbioticStakingReward.sol"; +// import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +// /* libraries */ +// import {Struct} from "../../../contracts/lib/Struct.sol"; +// import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; + +// contract KalypsoStakingTest is Test, TestSetup { +// uint256 constant OPERATORA_SELF_STAKE_AMOUNT = 1000 ether; +// uint256 constant OPERATORB_SELF_STAKE_AMOUNT = 2000 ether; +// uint256 constant OPERATORC_SELF_STAKE_AMOUNT = 1500 ether; + +// uint256 operatorAFeeReward; +// uint256 operatorBFeeReward; +// uint256 operatorCFeeReward; + +// uint256 transmitterAFeeReward; +// uint256 transmitterBFeeReward; +// uint256 transmitterCFeeReward; + +// function setUp() public { +// _setupAddr(); +// _setupContracts(); +// _fund_tokens(); + +// /*-------------------- Config --------------------*/ +// /* JobManager */ +// _setJobManagerConfig(); + +// /* StakingManager */ +// _setStakingManagerConfig(); + +// /* NativeStaking */ +// _setNativeStakingConfig(); + +// /* SymbioticStaking */ +// _setSymbioticStakingConfig(); +// } + +// /// @notice test full lifecycle of kalypso staking +// function test_kalypso_staking() public { +// /* current timestamp: 50_001 */ +// vm.warp(block.timestamp + 50_000); +// assertEq(block.timestamp, 50_001); + +// // operators self stake +// _operator_self_stake(); + +// /*============================== Snapshot 1 ==============================*/ +// // Snapshot 1 submitted +// _symbiotic_staking_snapshot_submission_1(); + +// /* jobId1 created (jobRequesterA -> OperatorA, 1 USDC) */ +// _create_job_1(); + +// // proof submitted +// vm.warp(block.timestamp + 10 minutes); +// _submit_proof_job_1(); + +// // symbioticVaultA claims fee reward +// _vault_claims_reward_from_job_1(); + +// /* jobId2 created (jobRequesterB -> OperatorB, 0.5 USDC) */ +// vm.warp(block.timestamp + SUBMISSION_COOLDOWN); // POND locked +// _create_job_2(); + +// // jobId2 completed +// _submit_proof_job_2(); + +// /*============================== Snapshot 2 ==============================*/ +// // Snapshot 2 submitted +// // here, the reward for jobId2 should be accrued for the symbioticVaultB (for staking 3000 POND to OperatorB) +// vm.warp(block.timestamp + SUBMISSION_COOLDOWN); +// _symbiotic_staking_snapshot_submission_2(); + +// _create_job_3(); + +// _submit_proof_job_3(); + +// _vaultA_claims_reward_from_job_3(); + +// /*============================== Snapshot 3 ==============================*/ +// // Snapshot 3 submitted +// vm.warp(block.timestamp + SUBMISSION_COOLDOWN); +// _symbiotic_staking_snapshot_submission_3(); + +// _create_job_4(); + +// _submit_proof_job_4(); + +// _vaultA_claims_reward_from_job_4(); + +// _vaultC_claims_reward_from_job_4(); + +// _vaultD_claims_reward_from_job_4(); + +// _operators_and_transmitters_claim_fee_reward(); +// } + +// /*===================================================== internal ====================================================*/ + +// function _operator_self_stake() internal { +// // Operator A self stakes 1000 WETH and 1000 POND +// vm.startPrank(operatorA); +// { +// IERC20(weth).approve(nativeStaking, type(uint256).max); +// IERC20(pond).approve(nativeStaking, type(uint256).max); + +// // weth is not supported in NativeStaking +// vm.expectRevert("Token not supported"); +// INativeStaking(nativeStaking).stake(weth, operatorA, OPERATORA_SELF_STAKE_AMOUNT); + +// // only operator can stake +// vm.expectRevert("Only operator can stake"); +// INativeStaking(nativeStaking).stake(pond, operatorB, OPERATORA_SELF_STAKE_AMOUNT); + +// // stake 1000 POND +// INativeStaking(nativeStaking).stake(pond, operatorA, OPERATORA_SELF_STAKE_AMOUNT); +// } +// vm.stopPrank(); +// assertEq( +// INativeStaking(nativeStaking).getOperatorStakeAmount(pond, operatorA), +// OPERATORA_SELF_STAKE_AMOUNT, +// "_operator_self_stake: OperatorA stake amount mismatch" +// ); +// assertEq( +// INativeStaking(nativeStaking).getOperatorActiveStakeAmount(pond, operatorA), +// OPERATORA_SELF_STAKE_AMOUNT, +// "_operator_self_stake: OperatorA active stake amount mismatch" +// ); + +// // OperatorB self stakes 2000 POND +// vm.startPrank(operatorB); +// { +// IERC20(pond).approve(nativeStaking, type(uint256).max); + +// INativeStaking(nativeStaking).stake(pond, operatorB, OPERATORB_SELF_STAKE_AMOUNT); +// } +// vm.stopPrank(); +// assertEq( +// INativeStaking(nativeStaking).getOperatorStakeAmount(pond, operatorB), +// OPERATORB_SELF_STAKE_AMOUNT, +// "_operator_self_stake: OperatorB stake amount mismatch" +// ); +// assertEq( +// INativeStaking(nativeStaking).getOperatorActiveStakeAmount(pond, operatorB), +// OPERATORB_SELF_STAKE_AMOUNT, +// "_operator_self_stake: OperatorB active stake amount mismatch" +// ); + +// vm.startPrank(operatorC); +// { +// IERC20(pond).approve(nativeStaking, type(uint256).max); +// INativeStaking(nativeStaking).stake(pond, operatorC, OPERATORC_SELF_STAKE_AMOUNT); +// } +// vm.stopPrank(); +// } + +// function _symbiotic_staking_snapshot_submission_1() internal { +// /* +// < TransmitterA Transmits > +// OperatorA: opted-into symbioticVaultA (weth) - 1000 weth, +// OperatorB: opted-into symbioticVaultA (weth) - 2000 weth, symbioticVaultB (pond) - 3000 pond +// */ + +// // Partial Tx 1 +// Struct.VaultSnapshot[] memory _vaultSnapshots1 = new Struct.VaultSnapshot[](1); +// /* Vault A */ +// // VaultA(1000 WETH) -> OperatorA +// _vaultSnapshots1[0].operator = operatorA; +// _vaultSnapshots1[0].vault = symbioticVaultA; +// _vaultSnapshots1[0].stakeToken = weth; +// _vaultSnapshots1[0].stakeAmount = 1000 ether; + +// // Partial Tx 2 +// Struct.VaultSnapshot[] memory _vaultSnapshots2 = new Struct.VaultSnapshot[](2); + +// /* Vault B */ + +// // VaultA(2000 weth) -> OperatorB +// _vaultSnapshots2[0].operator = operatorB; +// _vaultSnapshots2[0].vault = symbioticVaultA; +// _vaultSnapshots2[0].stakeToken = weth; +// _vaultSnapshots2[0].stakeAmount = 2000 ether; + +// // VaultB(3000 POND) -> OperatorB +// _vaultSnapshots2[1].operator = operatorB; +// _vaultSnapshots2[1].vault = symbioticVaultB; +// _vaultSnapshots2[1].stakeToken = pond; +// _vaultSnapshots2[1].stakeAmount = 3000 ether; + +// /* Snapshot Submission */ +// vm.startPrank(transmitterA); +// { +// vm.expectRevert("Invalid index"); +// ISymbioticStaking(symbioticStaking).submitVaultSnapshot( +// 3, 2, block.timestamp - 5, abi.encode(_vaultSnapshots1), "" +// ); + +// vm.expectRevert("Invalid index"); +// ISymbioticStaking(symbioticStaking).submitVaultSnapshot( +// 2, 2, block.timestamp - 5, abi.encode(_vaultSnapshots1), "" +// ); + +// vm.expectRevert("Invalid timestamp"); +// ISymbioticStaking(symbioticStaking).submitVaultSnapshot( +// 1, 2, block.timestamp + 1, abi.encode(_vaultSnapshots1), "" +// ); + +// ISymbioticStaking(symbioticStaking).submitVaultSnapshot( +// 0, 2, block.timestamp - 5, abi.encode(_vaultSnapshots1), "" +// ); +// } +// vm.stopPrank(); +// (uint256 _idxToSubmit, uint256 _numOfTxs) = +// ISymbioticStaking(symbioticStaking).txCountInfo(block.timestamp - 5, keccak256("STAKE_SNAPSHOT_TYPE")); + +// assertEq(_idxToSubmit, 1, "_symbiotic_staking_snapshot_submission_1: Tx count info mismatch"); +// assertEq(_numOfTxs, 2, "_symbiotic_staking_snapshot_submission_1: Tx count info mismatch"); +// assertEq( +// ISymbioticStaking(symbioticStaking).getSubmissionStatus(block.timestamp - 5, transmitterA), +// 0x0, +// "_symbiotic_staking_snapshot_submission_1: Submission status mismatch" +// ); + +// vm.startPrank(transmitterA); +// { +// ISymbioticStaking(symbioticStaking).submitVaultSnapshot( +// 1, 2, block.timestamp - 5, abi.encode(_vaultSnapshots2), "" +// ); +// } +// vm.stopPrank(); + +// assertEq( +// ISymbioticStaking(symbioticStaking).registeredTransmitters(block.timestamp - 5), +// transmitterA, +// "_symbiotic_staking_snapshot_submission_1: Registered transmitter mismatch" +// ); + +// (_idxToSubmit, _numOfTxs) = +// ISymbioticStaking(symbioticStaking).txCountInfo(block.timestamp - 5, keccak256("STAKE_SNAPSHOT_TYPE")); +// assertEq(_idxToSubmit, 2); +// assertEq(_numOfTxs, 2); +// assertEq( +// ISymbioticStaking(symbioticStaking).getSubmissionStatus(block.timestamp - 5, transmitterA), +// 0x0000000000000000000000000000000000000000000000000000000000000001, +// "Submission status mismatch" +// ); + +// /* Slash Result Submission */ +// vm.prank(transmitterA); +// ISymbioticStaking(symbioticStaking).submitSlashResult(0, 1, block.timestamp - 5, abi.encode(""), ""); +// } + +// function _create_job_1() internal { +// // requesterA creates a job +// vm.startPrank(jobRequesterA); +// { +// IERC20(feeToken).approve(jobManager, type(uint256).max); +// uint256 jobmanagerBalanceBefore = IERC20(feeToken).balanceOf(jobManager); + +// vm.expectRevert("No stakeToken available to lock"); +// IJobManager(jobManager).createJob(1, jobRequesterA, operatorC, 1 * USDC_DECIMALS); // should revert as operatorC didn't stake any token to NativeStaking + +// // pay 1 usdc as fee +// IJobManager(jobManager).createJob(1, jobRequesterA, operatorA, 1 * USDC_DECIMALS); +// assertEq(IERC20(feeToken).balanceOf(jobManager) - jobmanagerBalanceBefore, 1 * USDC_DECIMALS); +// } +// vm.stopPrank(); +// } + +// function _submit_proof_job_1() internal { +// // locked stake token for jobId 1 +// uint256 jobId = 1; +// (address lockedStakeToken,) = ISymbioticStaking(symbioticStaking).lockInfo(jobId); +// assertEq(lockedStakeToken, weth, "_submit_proof_job_1: Locked stake token mismatch"); + +// // OperatorA and TransmitterA fee reward before +// uint256 operatorAFeeRewardBefore = IJobManager(jobManager).operatorFeeRewards(operatorA); +// uint256 transmitterAFeeRewardBefore = IJobManager(jobManager).transmitterFeeRewards(transmitterA); + +// // rewardPerTokenStored before for operatorA +// uint256 rewardPerTokenStoredBefore = +// ISymbioticStakingReward(symbioticStakingReward).rewardPerTokenStored(lockedStakeToken, feeToken, operatorA); +// assertEq(rewardPerTokenStoredBefore, 0, "_submit_proof_job_1: RewardPerTokenStored mismatch"); + +// // staked weth amount for operatorA +// uint256 stakedWethAmount = ISymbioticStaking(symbioticStaking).getOperatorStakeAmount(weth, operatorA); +// assertEq(stakedWethAmount, 1000 ether, "_submit_proof_job_1: Staked weth amount mismatch"); + +// // expected rewardPerTokenStored after job completion +// uint256 rewardPerTokenIncreased = Math.mulDiv(1 * USDC_DECIMALS * 70 / 100 * 80 / 100, 1e18, stakedWethAmount); + +// vm.startPrank(operatorA); +// { +// // reverts if submitted after deadline +// vm.warp(block.timestamp + 12 hours); +// vm.expectRevert("Job Expired"); +// IJobManager(jobManager).submitProof(1, ""); + +// vm.warp(block.timestamp - 12 hours); +// IJobManager(jobManager).submitProof(1, ""); +// } +// vm.stopPrank(); + +// /* +// +// fee paid: 1 usdc + +// operator reward share: 30% +// => 1 * 0.3 = 0.3 usdc + +// transmitter comission rate: 20% +// => 1 * 0.7 * 0.2 = 0.14 usdc +// */ + +// // OperatorA and TransmitterA fee reward after +// uint256 operatorAFeeRewardAfter = IJobManager(jobManager).operatorFeeRewards(operatorA); +// uint256 transmitterAFeeRewardAfter = IJobManager(jobManager).transmitterFeeRewards(transmitterA); + +// assertEq(operatorAFeeRewardAfter - operatorAFeeRewardBefore, 3 * USDC_DECIMALS / 10, "OperatorA fee reward mismatch"); +// operatorAFeeReward += operatorAFeeRewardAfter - operatorAFeeRewardBefore; + +// assertEq(transmitterAFeeRewardAfter - transmitterAFeeRewardBefore, 14 * USDC_DECIMALS / 100, "TransmitterA fee reward mismatch"); +// transmitterAFeeReward += transmitterAFeeRewardAfter - transmitterAFeeRewardBefore; + +// // rewardPerTokenStored after for operatorA +// uint256 rewardPerTokenStoredAfter = +// ISymbioticStakingReward(symbioticStakingReward).rewardPerTokenStored(lockedStakeToken, feeToken, operatorA); +// assertEq( +// rewardPerTokenStoredAfter, +// rewardPerTokenStoredBefore + rewardPerTokenIncreased, +// "_submit_proof_job_1: RewardPerTokenStored mismatch" +// ); +// } + +// function _vault_claims_reward_from_job_1() internal { +// /* +// Vault A claim fee reward +// */ +// vm.startPrank(symbioticVaultA); +// ISymbioticStakingReward(symbioticStakingReward).claimReward(operatorA); +// vm.stopPrank(); + +// /* +// current status of staking: +// operatorA: opted-into symbioticVaultA (weth) - 1000 weth, +// operatorB: opted-into symbioticVaultA (weth) - 2000 weth, symbioticVaultB (pond) - 3000 pond + +// operatorA has 100% reward share + +// 1 USDC * 0.7(after operatorA commision 30%) * 0.8(after transmitter commision 20%) = 0.56 USDC +// */ + +// assertEq( +// IERC20(feeToken).balanceOf(symbioticVaultA), 56 * USDC_DECIMALS / 100, "SymbioticVaultA fee reward mismatch" +// ); +// } + +// // when multiple stakeTokens are staked to OperatorB +// function _create_job_2() internal { +// // requesterB creates a job +// vm.startPrank(jobRequesterB); +// { +// // approve feeToken for jobManager +// IERC20(feeToken).approve(jobManager, type(uint256).max); +// uint256 jobmanagerBalanceBefore = IERC20(feeToken).balanceOf(jobManager); + +// // requesterB pays 0.5 usdc as fee +// IJobManager(jobManager).createJob(2, jobRequesterA, operatorB, 5 * USDC_DECIMALS / 10); +// assertEq(IERC20(feeToken).balanceOf(jobManager) - jobmanagerBalanceBefore, 5 * USDC_DECIMALS / 10); +// } +// vm.stopPrank(); +// } + +// function _submit_proof_job_2() internal { +// uint256 jobId = 2; +// (address lockedStakeToken,) = ISymbioticStaking(symbioticStaking).lockInfo(jobId); + +// // OperatorB and TransmitterA fee reward before +// uint256 operatorBFeeRewardBefore = IJobManager(jobManager).operatorFeeRewards(operatorB); +// uint256 transmitterAFeeRewardBefore = IJobManager(jobManager).transmitterFeeRewards(transmitterA); + +// // rewardPerTokenStored before for operatorA +// uint256 rewardPerTokenStoredBefore = +// ISymbioticStakingReward(symbioticStakingReward).rewardPerTokenStored(lockedStakeToken, feeToken, operatorB); +// assertEq(rewardPerTokenStoredBefore, 0, "_submit_proof_job_2: RewardPerTokenStored mismatch"); + +// // staked weth amount for operatorA +// uint256 stakeTokenAmount = +// ISymbioticStaking(symbioticStaking).getOperatorStakeAmount(lockedStakeToken, operatorB); + +// // expected rewardPerTokenStored after job completion +// uint256 rewardPerTokenToIncrease = +// Math.mulDiv(1 * USDC_DECIMALS * (50 * 50 * 80) / (100 * 100 * 100), 1e18, stakeTokenAmount); + +// vm.startPrank(operatorB); +// { +// IJobManager(jobManager).submitProof(2, ""); +// } +// vm.stopPrank(); + +// // OperatorB and TransmitterA fee reward after +// uint256 operatorBFeeRewardAfter = IJobManager(jobManager).operatorFeeRewards(operatorB); +// uint256 transmitterAFeeRewardAfter = IJobManager(jobManager).transmitterFeeRewards(transmitterA); + +// /* +// +// fee paid: 0.5 usdc + +// operator reward share: 50% +// => 0.5 * 0.5 = 0.25 usdc + +// transmitter comission rate: 20% +// => 0.5 * 0.5 * 0.2 = 0.05 usdc + +// reward distributed +// => 0.5 * 0.5 * 0.8 = 0.2 usdc +// */ + +// assertEq(operatorBFeeRewardAfter - operatorBFeeRewardBefore, 25 * USDC_DECIMALS / 100, "_submit_proof_job_2: OperatorB fee reward mismatch"); +// operatorBFeeReward += operatorBFeeRewardAfter - operatorBFeeRewardBefore; + +// assertEq(transmitterAFeeRewardAfter - transmitterAFeeRewardBefore, 5 * USDC_DECIMALS / 100, "_submit_proof_job_2: TransmitterA fee reward mismatch"); +// transmitterAFeeReward += transmitterAFeeRewardAfter - transmitterAFeeRewardBefore; + +// // rewardPerTokenStored after for operatorB +// uint256 rewardPerTokenStoredAfter = +// ISymbioticStakingReward(symbioticStakingReward).rewardPerTokenStored(lockedStakeToken, feeToken, operatorB); + +// assertEq( +// rewardPerTokenStoredAfter, +// rewardPerTokenStoredBefore + rewardPerTokenToIncrease, +// "_submit_proof_job_2: RewardPerTokenStored mismatch" +// ); +// } + +// // Reward from Job2 not claimed by vaultB +// function _symbiotic_staking_snapshot_submission_2() internal { +// uint256 vaultBRewardPerTokenPaidBefore = ISymbioticStakingReward(symbioticStakingReward).rewardPerTokenPaid( +// pond, feeToken, symbioticVaultB, operatorB +// ); + +// // same snapshot as in _symbiotic_staking_snapshot_submission_1 +// Struct.VaultSnapshot[] memory originalSnapshotData = new Struct.VaultSnapshot[](3); +// // VaultA -> OperatorA (1000 weth) +// originalSnapshotData[0].operator = operatorA; +// originalSnapshotData[0].vault = symbioticVaultA; +// originalSnapshotData[0].stakeToken = weth; +// originalSnapshotData[0].stakeAmount = 1000 ether; + +// // VaultA -> OperatorB (2000 weth) +// originalSnapshotData[1].operator = operatorB; +// originalSnapshotData[1].vault = symbioticVaultA; +// originalSnapshotData[1].stakeToken = weth; +// originalSnapshotData[1].stakeAmount = 2000 ether; + +// // VaultB -> OperatorB (3000 pond) +// originalSnapshotData[2].operator = operatorB; +// originalSnapshotData[2].vault = symbioticVaultB; +// originalSnapshotData[2].stakeToken = pond; +// originalSnapshotData[2].stakeAmount = 3000 ether; + +// Struct.VaultSnapshot[] memory newSnapshotData = new Struct.VaultSnapshot[](5); + +// // VaultE -> OperatorB (1500 POND) +// newSnapshotData[0].operator = operatorB; +// newSnapshotData[0].vault = symbioticVaultE; +// newSnapshotData[0].stakeToken = pond; +// newSnapshotData[0].stakeAmount = 1500 ether; + +// // VaultA -> OperatorC (1500 WETH) +// newSnapshotData[1].operator = operatorC; +// newSnapshotData[1].vault = symbioticVaultA; +// newSnapshotData[1].stakeToken = weth; +// newSnapshotData[1].stakeAmount = 1500 ether; + +// // VaultC -> OperatorC (2300 WETH) +// newSnapshotData[2].operator = operatorC; +// newSnapshotData[2].vault = symbioticVaultC; +// newSnapshotData[2].stakeToken = weth; +// newSnapshotData[2].stakeAmount = 2300 ether; + +// // VaultD -> OperatorC (3000 WETH) +// newSnapshotData[3].operator = operatorC; +// newSnapshotData[3].vault = symbioticVaultD; +// newSnapshotData[3].stakeToken = weth; +// newSnapshotData[3].stakeAmount = 3000 ether; + +// // VaultE -> OperatorC (4000 POND) +// newSnapshotData[4].operator = operatorC; +// newSnapshotData[4].vault = symbioticVaultE; +// newSnapshotData[4].stakeToken = pond; +// newSnapshotData[4].stakeAmount = 4000 ether; + +// vm.startPrank(transmitterB); +// { +// ISymbioticStaking(symbioticStaking).submitVaultSnapshot( +// 0, 2, block.timestamp - 5, abi.encode(originalSnapshotData), "" +// ); +// ISymbioticStaking(symbioticStaking).submitVaultSnapshot( +// 1, 2, block.timestamp - 5, abi.encode(newSnapshotData), "" +// ); +// ISymbioticStaking(symbioticStaking).submitSlashResult(0, 1, block.timestamp - 5, abi.encode(""), ""); +// } +// vm.stopPrank(); + +// assertEq(ISymbioticStaking(symbioticStaking).confirmedTimestampInfo(1).transmitter, transmitterB, "_symbiotic_staking_snapshot_submission_2: transmitter mismatch"); + +// // check if reward distributed for JobId2 is reflected to symbioticVaultB during snapshot submission +// { +// // rewardPerTokenPaid for symbioticVaultB should be updated +// // VaultB staked 3000 POND to OperatorB, and 0.2 USDC was distributed to OperatorB +// uint256 vaultBStake = 3000 ether; +// uint256 rewardPerTokenIncreased = Math.mulDiv(1 * USDC_DECIMALS * 20 / 100, 1e18, vaultBStake); +// uint256 rewardPerTokenPaidAfter = ISymbioticStakingReward(symbioticStakingReward).rewardPerTokenPaid( +// pond, feeToken, symbioticVaultB, operatorB +// ); + +// assertEq( +// rewardPerTokenPaidAfter - vaultBRewardPerTokenPaidBefore, +// rewardPerTokenIncreased, +// "_symbiotic_staking_snapshot_submission_2: RewardPerTokenPaid mismatch" +// ); +// uint256 rewardAccruedForVaultB = +// ISymbioticStakingReward(symbioticStakingReward).rewardAccrued(feeToken, symbioticVaultB); +// assertEq( +// rewardAccruedForVaultB, +// Math.mulDiv(rewardPerTokenIncreased, vaultBStake, 1e18), +// "_symbiotic_staking_snapshot_submission_2: RewardAccrued mismatch" +// ); +// } +// } + + +// // when multiple stakeTokens are staked to OperatorB +// function _create_job_3() internal { +// // requesterB creates a job +// vm.startPrank(jobRequesterB); +// { +// // approve feeToken for jobManager +// IERC20(feeToken).approve(jobManager, type(uint256).max); +// uint256 jobmanagerBalanceBefore = IERC20(feeToken).balanceOf(jobManager); + +// // requesterB pays 0.7 usdc as fee +// IJobManager(jobManager).createJob(3, jobRequesterA, operatorC, 7 * USDC_DECIMALS / 10); +// assertEq(IERC20(feeToken).balanceOf(jobManager) - jobmanagerBalanceBefore, 7 * USDC_DECIMALS / 10); +// } +// vm.stopPrank(); +// } + +// function _submit_proof_job_3() internal { +// (address lockedStakeToken,) = ISymbioticStaking(symbioticStaking).lockInfo(3); + +// // OperatorC and TransmitterB fee reward before +// uint256 operatorCFeeRewardBefore = IJobManager(jobManager).operatorFeeRewards(operatorC); +// uint256 transmitterBFeeRewardBefore = IJobManager(jobManager).transmitterFeeRewards(transmitterB); + +// uint256 rewardPerTokenStoredBefore = ISymbioticStakingReward(symbioticStakingReward).rewardPerTokenStored( +// lockedStakeToken, feeToken, operatorC +// ); + +// /* +// < expected fee reward > +// fee paid: 0.7 usdc + +// OperatorC has 15% reward share +// => 0.7 * 0.15 = 0.105 usdc + +// Transmitter comission rate: 20% +// => 0.7 * 0.85 * 0.2 = 0.119 usdc + +// reward distributed +// => 0.7 * 0.85 * 0.8 = 0.476 usdc +// */ + +// // TransmitterA submits proof for JobId3 +// vm.startPrank(transmitterA); +// { +// IJobManager(jobManager).submitProof(3, ""); +// } +// vm.stopPrank(); + +// // OperatorC and TransmitterB fee reward after +// uint256 operatorCFeeRewardAfter = IJobManager(jobManager).operatorFeeRewards(operatorC); +// uint256 transmitterBFeeRewardAfter = IJobManager(jobManager).transmitterFeeRewards(transmitterB); + +// assertEq(operatorCFeeRewardAfter - operatorCFeeRewardBefore, 105 * USDC_DECIMALS / 1000, "_submit_proof_job_3: OperatorC fee reward mismatch"); +// operatorCFeeReward += operatorCFeeRewardAfter - operatorCFeeRewardBefore; + +// assertEq(transmitterBFeeRewardAfter - transmitterBFeeRewardBefore, 119 * USDC_DECIMALS / 1000, "_submit_proof_job_3: TransmitterB fee reward mismatch"); +// transmitterBFeeReward += transmitterBFeeRewardAfter - transmitterBFeeRewardBefore; + +// // rewardPerTokenStored for operatorC after +// uint256 rewardPerTokenStoredAfter = ISymbioticStakingReward(symbioticStakingReward).rewardPerTokenStored( +// lockedStakeToken, feeToken, operatorC +// ); +// // WETH locked, 0.476 usdc distributed, 6800 WETH staked to OperatorC +// assertEq(rewardPerTokenStoredAfter - rewardPerTokenStoredBefore, Math.mulDiv(476 * USDC_DECIMALS / 1000, 1e18, 6800e18), "_submit_proof_job_3: RewardPerTokenStored mismatch"); +// } + +// function _vaultA_claims_reward_from_job_3() internal { +// // 0.476 usdc distributed to OperatorC +// uint256 rewardDistributed = 476 * USDC_DECIMALS / 1000; +// // out of 6800 WETH staked to OperatorC, 1500 WETH is staked by SymbioticVaultA +// uint256 rewardForVaultAExpected = Math.mulDiv(rewardDistributed, 1500e18, 6800e18); + +// uint256 vaultAUSDCBalanceBefore = IERC20(feeToken).balanceOf(symbioticVaultA); + +// vm.startPrank(symbioticVaultA); +// { +// ISymbioticStakingReward(symbioticStakingReward).claimReward(operatorC); +// } +// vm.stopPrank(); + +// uint256 vaultAUSDCBalanceAfter = IERC20(feeToken).balanceOf(symbioticVaultA); +// assertEq(vaultAUSDCBalanceAfter - vaultAUSDCBalanceBefore, rewardForVaultAExpected, "_vaultA_claims_reward_from_job_3: VaultA fee reward mismatch"); +// } + +// function _symbiotic_staking_snapshot_submission_3() internal { +// // Vaults that staked to OperatorC during JobId3 +// uint256 job3RewardDistributed = 476 * USDC_DECIMALS / 1000; + +// uint256 vaultARewardAccruedBefore = ISymbioticStakingReward(symbioticStakingReward).rewardAccrued(feeToken, symbioticVaultA); +// uint256 vaultARewardExpected = 0; + +// // VaultC staked 2300 WETH to OperatorC +// uint256 vaultCRewardAccruedBefore = ISymbioticStakingReward(symbioticStakingReward).rewardAccrued(feeToken, symbioticVaultC); +// uint256 vaultCRewardExpected = Math.mulDiv(job3RewardDistributed, 2300e18, 6800e18); + +// // VaultD staked 3000 WETH to OperatorC +// uint256 vaultDRewardAccruedBefore = ISymbioticStakingReward(symbioticStakingReward).rewardAccrued(feeToken, symbioticVaultD); +// uint256 vaultDRewardExpected = Math.mulDiv(job3RewardDistributed, 3000e18, 6800e18); + +// // VaultE staked 1500 POND to OperatorC, WETH was selected so no reward accrued +// uint256 vaultERewardAccruedBefore = ISymbioticStakingReward(symbioticStakingReward).rewardAccrued(feeToken, symbioticVaultE); +// uint256 vaultERewardExpected = 0; + +// // everything else is same as Snapshot2, except that VaultC and VaultE unstaked from OperatorC + +// // same snapshot as in _symbiotic_staking_snapshot_submission_1 +// Struct.VaultSnapshot[] memory snapshotData = new Struct.VaultSnapshot[](6); +// // VaultA -> OperatorA (1000 weth) +// snapshotData[0].operator = operatorA; +// snapshotData[0].vault = symbioticVaultA; +// snapshotData[0].stakeToken = weth; +// snapshotData[0].stakeAmount = 1000 ether; + +// // VaultA -> OperatorB (2000 weth) +// snapshotData[1].operator = operatorB; +// snapshotData[1].vault = symbioticVaultA; +// snapshotData[1].stakeToken = weth; +// snapshotData[1].stakeAmount = 2000 ether; + +// // VaultB -> OperatorB (3000 pond) +// snapshotData[2].operator = operatorB; +// snapshotData[2].vault = symbioticVaultB; +// snapshotData[2].stakeToken = pond; +// snapshotData[2].stakeAmount = 3000 ether; + +// // VaultE -> OperatorB (1500 POND) +// snapshotData[3].operator = operatorB; +// snapshotData[3].vault = symbioticVaultE; +// snapshotData[3].stakeToken = pond; +// snapshotData[3].stakeAmount = 1500 ether; + +// // VaultA -> OperatorC (1500 WETH) +// snapshotData[4].operator = operatorC; +// snapshotData[4].vault = symbioticVaultA; +// snapshotData[4].stakeToken = weth; +// snapshotData[4].stakeAmount = 1500 ether; + +// // VaultD -> OperatorC (3000 WETH) +// snapshotData[5].operator = operatorC; +// snapshotData[5].vault = symbioticVaultD; +// snapshotData[5].stakeToken = weth; +// snapshotData[5].stakeAmount = 3000 ether; + +// Struct.VaultSnapshot[] memory unstakedSnapshotData = new Struct.VaultSnapshot[](5); + +// // VaultC -> OperatorC (0 WETH) [Unstaked] +// unstakedSnapshotData[0].operator = operatorC; +// unstakedSnapshotData[0].vault = symbioticVaultC; +// unstakedSnapshotData[0].stakeToken = weth; +// unstakedSnapshotData[0].stakeAmount = 0 ether; + +// // VaultE -> OperatorC (0 POND) [Unstaked] +// unstakedSnapshotData[1].operator = operatorC; +// unstakedSnapshotData[1].vault = symbioticVaultE; +// unstakedSnapshotData[1].stakeToken = pond; +// unstakedSnapshotData[1].stakeAmount = 0 ether; + +// vm.startPrank(transmitterC); +// { +// ISymbioticStaking(symbioticStaking).submitVaultSnapshot(0, 2, block.timestamp - 5, abi.encode(snapshotData), ""); +// ISymbioticStaking(symbioticStaking).submitVaultSnapshot(1, 2, block.timestamp - 5, abi.encode(unstakedSnapshotData), ""); +// ISymbioticStaking(symbioticStaking).submitSlashResult(0, 1, block.timestamp - 5, abi.encode(""), ""); +// } +// vm.stopPrank(); +// assertEq(ISymbioticStaking(symbioticStaking).latestConfirmedTimestampInfo().transmitter, transmitterC, "_symbiotic_staking_snapshot_submission_3: transmitter mismatch"); + +// // check if reward accrued for Vaults are updated +// uint256 vaultARewardAccruedAfter = ISymbioticStakingReward(symbioticStakingReward).rewardAccrued(feeToken, symbioticVaultA); +// uint256 vaultCRewardAccruedAfter = ISymbioticStakingReward(symbioticStakingReward).rewardAccrued(feeToken, symbioticVaultC); +// uint256 vaultDRewardAccruedAfter = ISymbioticStakingReward(symbioticStakingReward).rewardAccrued(feeToken, symbioticVaultD); +// uint256 vaultERewardAccruedAfter = ISymbioticStakingReward(symbioticStakingReward).rewardAccrued(feeToken, symbioticVaultE); + +// assertEq(vaultARewardAccruedAfter - vaultARewardAccruedBefore, vaultARewardExpected, "_symbiotic_staking_snapshot_submission_3: VaultA reward accrued mismatch"); +// assertEq(vaultCRewardAccruedAfter - vaultCRewardAccruedBefore, vaultCRewardExpected, "_symbiotic_staking_snapshot_submission_3: VaultC reward accrued mismatch"); +// assertEq(vaultDRewardAccruedAfter - vaultDRewardAccruedBefore, vaultDRewardExpected, "_symbiotic_staking_snapshot_submission_3: VaultD reward accrued mismatch"); +// assertEq(vaultERewardAccruedAfter - vaultERewardAccruedBefore, vaultERewardExpected, "_symbiotic_staking_snapshot_submission_3: VaultE reward accrued mismatch"); +// } + +// function _create_job_4() internal { +// // requesterB creates a job +// vm.startPrank(jobRequesterB); +// { +// IERC20(feeToken).approve(jobManager, type(uint256).max); +// IJobManager(jobManager).createJob(4, jobRequesterA, operatorC, 97 * USDC_DECIMALS / 100); +// } +// vm.stopPrank(); +// } + +// /* +// < expected fee reward > + +// OperatorC has 15% reward share +// => 0.97 * 0.15 = 0.1455 usdc + +// Transmitter comission rate: 20% +// => 0.97 * 0.85 * 0.2 = 0.1649 usdc + +// reward distributed +// => 0.97 * 0.85 * 0.8 = 0.6596 usdc + +// */ +// function _submit_proof_job_4() internal { +// (address lockedStakeToken,) = ISymbioticStaking(symbioticStaking).lockInfo(4); + +// // OperatorC and TransmitterB fee reward before +// uint256 operatorCFeeRewardBefore = IJobManager(jobManager).operatorFeeRewards(operatorC); +// uint256 transmitterCFeeRewardBefore = IJobManager(jobManager).transmitterFeeRewards(transmitterC); + +// // RewardDistrobutor +// uint256 rewardPerTokenStoredBefore = ISymbioticStakingReward(symbioticStakingReward).rewardPerTokenStored( +// lockedStakeToken, feeToken, operatorC +// ); +// uint256 rewardPertokenToIncrease = Math.mulDiv(6596 * USDC_DECIMALS / 10000, 1e18, 4500e18); // 4500 WETH staked to OperatorC + +// // TransmitterC submits proof for JobId4 +// vm.startPrank(transmitterC); +// { +// IJobManager(jobManager).submitProof(4, ""); +// } +// vm.stopPrank(); + +// // OperatorC and TransmitterB fee reward after +// uint256 operatorCFeeRewardAfter = IJobManager(jobManager).operatorFeeRewards(operatorC); +// uint256 transmitterCFeeRewardAfter = IJobManager(jobManager).transmitterFeeRewards(transmitterC); + +// assertEq(operatorCFeeRewardAfter - operatorCFeeRewardBefore, 1455 * USDC_DECIMALS / 10000, "_submit_proof_job_4: OperatorC fee reward mismatch"); +// operatorCFeeReward += operatorCFeeRewardAfter - operatorCFeeRewardBefore; + +// assertEq(transmitterCFeeRewardAfter - transmitterCFeeRewardBefore, 1649 * USDC_DECIMALS / 10000, "_submit_proof_job_4: TransmitterC fee reward mismatch"); +// transmitterCFeeReward += transmitterCFeeRewardAfter - transmitterCFeeRewardBefore; + +// // check if reward distributed for JobId4 is reflected to symbioticVaultA during snapshot submission +// uint256 rewardPerTokenStoredAfter = ISymbioticStakingReward(symbioticStakingReward).rewardPerTokenStored( +// lockedStakeToken, feeToken, operatorC +// ); +// assertEq(rewardPerTokenStoredAfter - rewardPerTokenStoredBefore, rewardPertokenToIncrease, "_submit_proof_job_4: RewardPerTokenStored mismatch"); +// } + +// function _vaultA_claims_reward_from_job_4() internal { +// // 0.6596 usdc distributed to OperatorC for JobId4 +// uint256 rewardDistributed = 6596 * USDC_DECIMALS / 10000; +// uint256 operatorCStake = 4500e18; +// uint256 rewardPerTokenAdded = Math.mulDiv(rewardDistributed, 1e18, operatorCStake); + +// // out of 4500 WETH staked to OperatorC, 1500 WETH is staked by SymbioticVaultA +// uint256 vaultARewardExpected = Math.mulDiv(rewardPerTokenAdded, 1500e18, 1e18); + +// uint256 vaultAUSDCBalanceBefore = IERC20(feeToken).balanceOf(symbioticVaultA); + +// vm.startPrank(symbioticVaultA); +// { +// ISymbioticStakingReward(symbioticStakingReward).claimReward(operatorC); +// } +// vm.stopPrank(); + +// uint256 vaultAUSDCBalanceAfter = IERC20(feeToken).balanceOf(symbioticVaultA); +// assertEq(vaultAUSDCBalanceAfter - vaultAUSDCBalanceBefore, vaultARewardExpected, "_vaultA_claims_reward_from_job_4: VaultA fee reward mismatch"); +// } + +// // VaultC unstaked after Job3, and hasn't claimed the reward accrued +// function _vaultC_claims_reward_from_job_4() internal { +// // 0.476 usdc distributed to OperatorC for JobId3 +// uint256 job3RewardDistributed = 476 * USDC_DECIMALS / 1000; +// uint256 job3OperatorCStake = 6800e18; +// uint256 job3RewardPerTokenAdded = Math.mulDiv(job3RewardDistributed, 1e18, job3OperatorCStake); +// uint256 vaultCRewardExpected = Math.mulDiv(job3RewardPerTokenAdded, 2300e18, 1e18); + +// uint256 vaultCUSDCBalanceBefore = IERC20(feeToken).balanceOf(symbioticVaultC); + +// vm.startPrank(symbioticVaultC); +// { +// ISymbioticStakingReward(symbioticStakingReward).claimReward(operatorC); +// } +// vm.stopPrank(); + +// uint256 vaultCUSDCBalanceAfter = IERC20(feeToken).balanceOf(symbioticVaultC); +// assertEq(vaultCUSDCBalanceAfter - vaultCUSDCBalanceBefore, vaultCRewardExpected, "_vaultC_claims_reward_from_job_4: VaultC fee reward mismatch"); +// } + +// function _vaultD_claims_reward_from_job_4() internal { +// uint256 vaultDRewardExpected; + +// // 0.476 usdc distributed to OperatorC for JobId3 +// uint256 job3RewardDistributed = 476 * USDC_DECIMALS / 1000; +// uint256 job3OperatorCStake = 6800e18; +// uint256 job3RewardPerTokenAdded = Math.mulDiv(job3RewardDistributed, 1e18, job3OperatorCStake); +// vaultDRewardExpected += Math.mulDiv(job3RewardPerTokenAdded, 3000e18, 1e18); + +// // 0.6596 usdc distributed to OperatorC for JobId4 +// uint256 job4RewardDistributed = 6596 * USDC_DECIMALS / 10000; +// uint256 job4OperatorCStake = 4500e18; +// uint256 job4RewardPerTokenAdded = Math.mulDiv(job4RewardDistributed, 1e18, job4OperatorCStake); +// vaultDRewardExpected += Math.mulDiv(job4RewardPerTokenAdded, 3000e18, 1e18); + +// uint256 vaultDUSDCBalanceBefore = IERC20(feeToken).balanceOf(symbioticVaultD); + +// vm.startPrank(symbioticVaultD); +// { +// ISymbioticStakingReward(symbioticStakingReward).claimReward(operatorC); +// } +// vm.stopPrank(); + +// uint256 vaultDUSDCBalanceAfter = IERC20(feeToken).balanceOf(symbioticVaultD); +// assertEq(vaultDUSDCBalanceAfter - vaultDUSDCBalanceBefore, vaultDRewardExpected, "_vaultD_claims_reward_from_job_4: VaultD fee reward mismatch"); +// } + +// function _operators_and_transmitters_claim_fee_reward() internal { +// uint256 operatorAFeeTokenBalanceBefore = IERC20(feeToken).balanceOf(operatorA); +// uint256 operatorBFeeTokenBalanceBefore = IERC20(feeToken).balanceOf(operatorB); +// uint256 operatorCFeeTokenBalanceBefore = IERC20(feeToken).balanceOf(operatorC); + +// uint256 transmitterAFeeTokenBalanceBefore = IERC20(feeToken).balanceOf(transmitterA); +// uint256 transmitterBFeeTokenBalanceBefore = IERC20(feeToken).balanceOf(transmitterB); +// uint256 transmitterCFeeTokenBalanceBefore = IERC20(feeToken).balanceOf(transmitterC); + +// vm.prank(operatorA); + +// IJobManager(jobManager).claimOperatorFeeReward(); + +// vm.prank(operatorB); +// IJobManager(jobManager).claimOperatorFeeReward(); + +// vm.prank(operatorC); +// IJobManager(jobManager).claimOperatorFeeReward(); + +// vm.prank(transmitterA); +// IJobManager(jobManager).claimTransmitterFeeReward(); + +// vm.prank(transmitterB); +// IJobManager(jobManager).claimTransmitterFeeReward(); + +// vm.prank(transmitterC); +// IJobManager(jobManager).claimTransmitterFeeReward(); + +// uint256 operatorAFeeTokenBalanceAfter = IERC20(feeToken).balanceOf(operatorA); +// uint256 operatorBFeeTokenBalanceAfter = IERC20(feeToken).balanceOf(operatorB); +// uint256 operatorCFeeTokenBalanceAfter = IERC20(feeToken).balanceOf(operatorC); + +// uint256 transmitterAFeeTokenBalanceAfter = IERC20(feeToken).balanceOf(transmitterA); +// uint256 transmitterBFeeTokenBalanceAfter = IERC20(feeToken).balanceOf(transmitterB); +// uint256 transmitterCFeeTokenBalanceAfter = IERC20(feeToken).balanceOf(transmitterC); + +// assertEq(operatorAFeeTokenBalanceAfter - operatorAFeeTokenBalanceBefore, operatorAFeeReward, "_operators_and_transmitters_claim_fee_reward: OperatorA fee token balance mismatch"); +// assertEq(operatorBFeeTokenBalanceAfter - operatorBFeeTokenBalanceBefore, operatorBFeeReward, "_operators_and_transmitters_claim_fee_reward: OperatorB fee token balance mismatch"); +// assertEq(operatorCFeeTokenBalanceAfter - operatorCFeeTokenBalanceBefore, operatorCFeeReward, "_operators_and_transmitters_claim_fee_reward: OperatorC fee token balance mismatch"); + +// assertEq(transmitterAFeeTokenBalanceAfter - transmitterAFeeTokenBalanceBefore, transmitterAFeeReward, "_operators_and_transmitters_claim_fee_reward: TransmitterA fee token balance mismatch"); +// assertEq(transmitterBFeeTokenBalanceAfter - transmitterBFeeTokenBalanceBefore, transmitterBFeeReward, "_operators_and_transmitters_claim_fee_reward: TransmitterB fee token balance mismatch"); +// assertEq(transmitterCFeeTokenBalanceAfter - transmitterCFeeTokenBalanceBefore, transmitterCFeeReward, "_operators_and_transmitters_claim_fee_reward: TransmitterC fee token balance mismatch"); +// } +// } diff --git a/test/foundry/mocks/POND.sol b/test/foundry/mocks/POND.sol new file mode 100644 index 0000000..5b48bf1 --- /dev/null +++ b/test/foundry/mocks/POND.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.26; + +import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +contract POND is ERC20 { + + uint256 constant INITIAL_SUPPLY = 100_000_000 ether; + + constructor(address admin) ERC20("POND", "POND") { + _mint(admin, INITIAL_SUPPLY); + } + + function mint(address to, uint256 amount) external { + _mint(to, amount); + } +} diff --git a/test/foundry/mocks/USDC.sol b/test/foundry/mocks/USDC.sol new file mode 100644 index 0000000..fd32ee1 --- /dev/null +++ b/test/foundry/mocks/USDC.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.26; + +import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +contract USDC is ERC20 { + + uint256 constant INITIAL_SUPPLY = 100_000_000 ether; + + constructor(address admin) ERC20("USDC", "USDC") { + _mint(admin, INITIAL_SUPPLY); + } +} diff --git a/test/foundry/mocks/WETH.sol b/test/foundry/mocks/WETH.sol new file mode 100644 index 0000000..c3d70c5 --- /dev/null +++ b/test/foundry/mocks/WETH.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.26; + +import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +contract WETH is ERC20 { + + uint256 constant INITIAL_SUPPLY = 100_000_000 ether; + + constructor(address admin) ERC20("WETH", "WETH") { + _mint(admin, INITIAL_SUPPLY); + } +}