diff --git a/.env.example b/.env.example index 5e5522e..f875a99 100644 --- a/.env.example +++ b/.env.example @@ -7,3 +7,8 @@ CUDATEST_PRIVATE_KEY= CUDATEST_TREASURY_ADDRESS= CUDATEST_COLLECTION_ADDRESS= CUDATEST_WORKER_HUB_ADDRESS= + +MAINNET_PRIVATE_KEY= +MAINNET_TREASURY_ADDRESS= +MAINNET_COLLECTION_ADDRESS= +MAINNET_WORKER_HUB_ADDRESS= diff --git a/.gitignore b/.gitignore index fee1324..3383f75 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,5 @@ artifacts _data _models _outputs +cache_forge +out \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..888d42d --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "lib/forge-std"] + path = lib/forge-std + url = https://github.com/foundry-rs/forge-std diff --git a/.openzeppelin/unknown-20156.json b/.openzeppelin/unknown-20156.json index b1ca00c..266fe0a 100644 --- a/.openzeppelin/unknown-20156.json +++ b/.openzeppelin/unknown-20156.json @@ -64,6 +64,60 @@ "address": "0xD65Bcd702A1260ec165bE6175Bd91cAfD99112F5", "txHash": "0xf8d1c6579d1e0919b954563436c917eb5ce92da94c48130bd2c6d391a7b37969", "kind": "transparent" + }, + { + "address": "0xfC662501feDBe154Dc72004f26033895501d7764", + "txHash": "0xecbf475a40c9c67daa4726dd65fbb8a6446ac3a7f4b1bebb953fa00814d0d353", + "kind": "transparent" + }, + { + "address": "0x5AE8B725d99b60b87B22651e5Da24629D58135B7", + "txHash": "0x8678cb7f7dd0c99a4e4466c077c4156ef30af856c49e98556b7b5a20b3d8b9ca", + "kind": "transparent" + }, + { + "address": "0xb4B5a53c379417002fF74d6E63a72d6c52573561", + "txHash": "0xca7d14f05c7920fe180f763cf18e434681f489f7a6e6db2a37fc4e74e930633d", + "kind": "transparent" + }, + { + "address": "0x787ab5d29D7596AcAeE838e0e0aBaC9c8C2288aF", + "txHash": "0x58adb18eefad1d11ada6bcc296c6a26d3e18aacd9bf1a49e000189060961a56a", + "kind": "transparent" + }, + { + "address": "0x23185552A359147680837cb0e3CDf8A380836C05", + "txHash": "0x3ff63a926744edaaf4ad7a141890b9ea8bb83dc7fcaa8b20aa7d3ab72239dcc2", + "kind": "transparent" + }, + { + "address": "0xEBD42A8E63ee327c3Eb30d2089E3E858aE74FCE1", + "txHash": "0x942f39caf0edfbe6ae0ccfb489eff50d0439d03b98db0c262dd2033d8e8f4b1e", + "kind": "transparent" + }, + { + "address": "0x8bC20218C88A65340F32178fE90FC804992C9E90", + "txHash": "0xd8b5332866b0b9dd4202f9c7580dd498ad434568725f7ef489d0b5b040055da3", + "kind": "transparent" + }, + { + "address": "0x0D8eEd4f3E1D19bCd0CC13BD093C01048c88ee13", + "txHash": "0xf3f3b83b6801cd8b618b26342c093de54660d4721285f68e9ed27df726bbc9a2", + "kind": "transparent" + }, + { + "address": "0xC26cB208D0A08c13832C2963A65C54593dcBb4De", + "txHash": "0x4fe1ec2afae9579e41b02a44d8b8760cf38e6b10d3ec95e21aae954bd26ee95a", + "kind": "transparent" + }, + { + "address": "0xd6441ac1F986BFe46B402FD1e0A72e210F55E2E8", + "txHash": "0xfda781e2817f75b9695216df7d2adae1275358930ae1f932728e93963e9d7aeb", + "kind": "transparent" + }, + { + "address": "0xb0F6c20163170958f9935121378a3ed3E8d6263d", + "kind": "transparent" } ], "impls": { @@ -1756,6 +1810,19123 @@ }, "namespaces": {} } + }, + "80923fdf3f842e80817cfb85ff464fd23fd30925ea48e6f74abb4cc7d6429b20": { + "address": "0x359e4D7Ec37D36c7cDF483406227Dd8f33037397", + "txHash": "0x548ba4392cab8a6230c87fc4ce884743eedcf67d2b4149e30e7c2c4dd4f6b73a", + "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:40" + }, + { + "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": "_name", + "offset": 0, + "slot": "101", + "type": "t_string_storage", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:25" + }, + { + "label": "_symbol", + "offset": 0, + "slot": "102", + "type": "t_string_storage", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:28" + }, + { + "label": "_owners", + "offset": 0, + "slot": "103", + "type": "t_mapping(t_uint256,t_address)", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:31" + }, + { + "label": "_balances", + "offset": 0, + "slot": "104", + "type": "t_mapping(t_address,t_uint256)", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:34" + }, + { + "label": "_tokenApprovals", + "offset": 0, + "slot": "105", + "type": "t_mapping(t_uint256,t_address)", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:37" + }, + { + "label": "_operatorApprovals", + "offset": 0, + "slot": "106", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "107", + "type": "t_array(t_uint256)44_storage", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:477" + }, + { + "label": "models", + "offset": 0, + "slot": "151", + "type": "t_mapping(t_uint256,t_address)", + "contract": "ModelCollectionStorage", + "src": "contracts/storages/ModelCollectionStorage.sol:7" + }, + { + "label": "nextModelId", + "offset": 0, + "slot": "152", + "type": "t_uint256", + "contract": "ModelCollectionStorage", + "src": "contracts/storages/ModelCollectionStorage.sol:8" + }, + { + "label": "mintPrice", + "offset": 0, + "slot": "153", + "type": "t_uint256", + "contract": "ModelCollectionStorage", + "src": "contracts/storages/ModelCollectionStorage.sol:9" + }, + { + "label": "royaltyReceiver", + "offset": 0, + "slot": "154", + "type": "t_address", + "contract": "ModelCollectionStorage", + "src": "contracts/storages/ModelCollectionStorage.sol:10" + }, + { + "label": "royaltyPortion", + "offset": 20, + "slot": "154", + "type": "t_uint16", + "contract": "ModelCollectionStorage", + "src": "contracts/storages/ModelCollectionStorage.sol:11" + }, + { + "label": "__gap", + "offset": 0, + "slot": "155", + "type": "t_array(t_uint256)50_storage", + "contract": "ModelCollectionStorage", + "src": "contracts/storages/ModelCollectionStorage.sol:13" + }, + { + "label": "_hashedName", + "offset": 0, + "slot": "205", + "type": "t_bytes32", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:40", + "renamedFrom": "_HASHED_NAME" + }, + { + "label": "_hashedVersion", + "offset": 0, + "slot": "206", + "type": "t_bytes32", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:42", + "renamedFrom": "_HASHED_VERSION" + }, + { + "label": "_name", + "offset": 0, + "slot": "207", + "type": "t_string_storage", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:44" + }, + { + "label": "_version", + "offset": 0, + "slot": "208", + "type": "t_string_storage", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:45" + }, + { + "label": "__gap", + "offset": 0, + "slot": "209", + "type": "t_array(t_uint256)48_storage", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:204" + }, + { + "label": "_ownedTokens", + "offset": 0, + "slot": "257", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "ERC721EnumerableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol:17" + }, + { + "label": "_ownedTokensIndex", + "offset": 0, + "slot": "258", + "type": "t_mapping(t_uint256,t_uint256)", + "contract": "ERC721EnumerableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol:20" + }, + { + "label": "_allTokens", + "offset": 0, + "slot": "259", + "type": "t_array(t_uint256)dyn_storage", + "contract": "ERC721EnumerableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol:23" + }, + { + "label": "_allTokensIndex", + "offset": 0, + "slot": "260", + "type": "t_mapping(t_uint256,t_uint256)", + "contract": "ERC721EnumerableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol:26" + }, + { + "label": "__gap", + "offset": 0, + "slot": "261", + "type": "t_array(t_uint256)46_storage", + "contract": "ERC721EnumerableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol:171" + }, + { + "label": "_paused", + "offset": 0, + "slot": "307", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "308", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "__gap", + "offset": 0, + "slot": "357", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC721PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721PausableUpgradeable.sol:53" + }, + { + "label": "_tokenURIs", + "offset": 0, + "slot": "407", + "type": "t_mapping(t_uint256,t_string_storage)", + "contract": "ERC721URIStorageUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721URIStorageUpgradeable.sol:17" + }, + { + "label": "__gap", + "offset": 0, + "slot": "408", + "type": "t_array(t_uint256)49_storage", + "contract": "ERC721URIStorageUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721URIStorageUpgradeable.sol:86" + }, + { + "label": "_owner", + "offset": 0, + "slot": "457", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "458", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)44_storage": { + "label": "uint256[44]", + "numberOfBytes": "1408" + }, + "t_array(t_uint256)46_storage": { + "label": "uint256[46]", + "numberOfBytes": "1472" + }, + "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)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "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_address,t_mapping(t_address,t_bool))": { + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_address)": { + "label": "mapping(uint256 => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_string_storage)": { + "label": "mapping(uint256 => string)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "1cc68a4b936075964a6e1e210ff8e3416c25bda0344074d86f45fb18126a65b8": { + "address": "0x1802761a5B21332b02e5312b92b0c55401DE14Da", + "txHash": "0x7e48fcec054bc4f3c43519d2b94d873e2ec342994f04bce77323ac4714677681", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "identifier", + "offset": 0, + "slot": "0", + "type": "t_uint256", + "contract": "HybridModelStorage", + "src": "contracts/storages/HybridModelStorage.sol:7" + }, + { + "label": "name", + "offset": 0, + "slot": "1", + "type": "t_string_storage", + "contract": "HybridModelStorage", + "src": "contracts/storages/HybridModelStorage.sol:9" + }, + { + "label": "metadata", + "offset": 0, + "slot": "2", + "type": "t_string_storage", + "contract": "HybridModelStorage", + "src": "contracts/storages/HybridModelStorage.sol:10" + }, + { + "label": "workerHub", + "offset": 0, + "slot": "3", + "type": "t_address", + "contract": "HybridModelStorage", + "src": "contracts/storages/HybridModelStorage.sol:12" + }, + { + "label": "__gap", + "offset": 0, + "slot": "4", + "type": "t_array(t_uint256)50_storage", + "contract": "HybridModelStorage", + "src": "contracts/storages/HybridModelStorage.sol:14" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "54", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "54", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "55", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "105", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "106", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "155", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "156", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "205", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "206", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "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_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "0762af573778b62bc5791f9255dacf47b09112a89454a99e8ad0bd8616db835c": { + "address": "0x7625793508eC03ADE3d3f173C6D8381B9411C63a", + "txHash": "0xb3b122921de81505ef5d6a0b1b2af45f72bc7551344277ba74be0ebd3d0b6268", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3266_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3021_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "minters", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3034_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3034_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minterAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3310_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3310_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3310_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minterAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3310_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3310_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minterUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3115_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3115_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3090_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3058_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMinter", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)3480_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)3480_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinterEpochState)3016_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minterTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minterMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "mintingTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minterRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3007": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3310_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3021_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)3480_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3115_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3034_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3058_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3090_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinterEpochState)3016_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinterEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)3480_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3310_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3058_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3090_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3007", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinterEpochState)3016_storage": { + "label": "struct IWorkerHub.MinterEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMinter", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3021_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3266_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)3480_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3115_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3034_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "49309266d7cc8cae52c0f6ea055a18ab180b183976b410083dd254e0686d55e7": { + "address": "0x45eB4B2CE7324c836260A042093CD4A88249c32e", + "txHash": "0x8ebb6912cb86cd35ce97d1fb3a57aa6545f4094c8ba4ac69ad5f5d62eeb3201b", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3284_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3035_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "minters", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3048_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3048_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minterAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3328_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3328_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3328_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minterAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3328_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3328_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minterUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3133_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3133_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3108_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3072_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMinter", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)3498_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)3498_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinterEpochState)3030_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minterTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minterMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "mintingTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minterRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3021": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3328_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3035_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)3498_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3133_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3048_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3072_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3108_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinterEpochState)3030_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinterEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)3498_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3328_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3072_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3108_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3021", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinterEpochState)3030_storage": { + "label": "struct IWorkerHub.MinterEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMinter", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3035_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3284_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)3498_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3133_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3048_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "f2d51efd7368cc8425ff712b8568fbd5b4776bd664d9d9c596f46b95f8dae859": { + "address": "0xF951891fF5F8DeC5398453D18B022e839F56d881", + "txHash": "0xdc875ec01948fda018272a0f2a2a4c5c45e04bae89e051d3945337c1404b0695", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3263_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3014_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "minters", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3027_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3027_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minterAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3307_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3307_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3307_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minterAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3307_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3307_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minterUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3112_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3112_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3087_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3051_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMinter", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)3477_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)3477_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinterEpochState)3009_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minterTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minterMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "mintingTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minterRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3000": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3307_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3014_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)3477_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3112_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3027_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3051_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3087_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinterEpochState)3009_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinterEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)3477_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3307_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3051_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3087_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3000", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinterEpochState)3009_storage": { + "label": "struct IWorkerHub.MinterEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMinter", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3014_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3263_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)3477_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3112_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3027_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "d26b765071ecc975c2331a608327b23e8c7633e8ead1e079225a5f115f94c5db": { + "address": "0x920b9d1E9fB3fd5aCd07d64bEAb2A8869CFaAa40", + "txHash": "0x102a0f25558271444ec2ebc62a115e7ab9727bfbe9b40198b771c5aab94aaf9c", + "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:40" + }, + { + "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": "_name", + "offset": 0, + "slot": "101", + "type": "t_string_storage", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:25" + }, + { + "label": "_symbol", + "offset": 0, + "slot": "102", + "type": "t_string_storage", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:28" + }, + { + "label": "_owners", + "offset": 0, + "slot": "103", + "type": "t_mapping(t_uint256,t_address)", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:31" + }, + { + "label": "_balances", + "offset": 0, + "slot": "104", + "type": "t_mapping(t_address,t_uint256)", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:34" + }, + { + "label": "_tokenApprovals", + "offset": 0, + "slot": "105", + "type": "t_mapping(t_uint256,t_address)", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:37" + }, + { + "label": "_operatorApprovals", + "offset": 0, + "slot": "106", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "107", + "type": "t_array(t_uint256)44_storage", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:477" + }, + { + "label": "models", + "offset": 0, + "slot": "151", + "type": "t_mapping(t_uint256,t_address)", + "contract": "ModelCollectionStorage", + "src": "contracts/storages/ModelCollectionStorage.sol:7" + }, + { + "label": "nextModelId", + "offset": 0, + "slot": "152", + "type": "t_uint256", + "contract": "ModelCollectionStorage", + "src": "contracts/storages/ModelCollectionStorage.sol:8" + }, + { + "label": "mintPrice", + "offset": 0, + "slot": "153", + "type": "t_uint256", + "contract": "ModelCollectionStorage", + "src": "contracts/storages/ModelCollectionStorage.sol:9" + }, + { + "label": "royaltyReceiver", + "offset": 0, + "slot": "154", + "type": "t_address", + "contract": "ModelCollectionStorage", + "src": "contracts/storages/ModelCollectionStorage.sol:10" + }, + { + "label": "royaltyPortion", + "offset": 20, + "slot": "154", + "type": "t_uint16", + "contract": "ModelCollectionStorage", + "src": "contracts/storages/ModelCollectionStorage.sol:11" + }, + { + "label": "__gap", + "offset": 0, + "slot": "155", + "type": "t_array(t_uint256)50_storage", + "contract": "ModelCollectionStorage", + "src": "contracts/storages/ModelCollectionStorage.sol:13" + }, + { + "label": "_hashedName", + "offset": 0, + "slot": "205", + "type": "t_bytes32", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:40", + "renamedFrom": "_HASHED_NAME" + }, + { + "label": "_hashedVersion", + "offset": 0, + "slot": "206", + "type": "t_bytes32", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:42", + "renamedFrom": "_HASHED_VERSION" + }, + { + "label": "_name", + "offset": 0, + "slot": "207", + "type": "t_string_storage", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:44" + }, + { + "label": "_version", + "offset": 0, + "slot": "208", + "type": "t_string_storage", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:45" + }, + { + "label": "__gap", + "offset": 0, + "slot": "209", + "type": "t_array(t_uint256)48_storage", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:204" + }, + { + "label": "_ownedTokens", + "offset": 0, + "slot": "257", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "ERC721EnumerableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol:17" + }, + { + "label": "_ownedTokensIndex", + "offset": 0, + "slot": "258", + "type": "t_mapping(t_uint256,t_uint256)", + "contract": "ERC721EnumerableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol:20" + }, + { + "label": "_allTokens", + "offset": 0, + "slot": "259", + "type": "t_array(t_uint256)dyn_storage", + "contract": "ERC721EnumerableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol:23" + }, + { + "label": "_allTokensIndex", + "offset": 0, + "slot": "260", + "type": "t_mapping(t_uint256,t_uint256)", + "contract": "ERC721EnumerableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol:26" + }, + { + "label": "__gap", + "offset": 0, + "slot": "261", + "type": "t_array(t_uint256)46_storage", + "contract": "ERC721EnumerableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol:171" + }, + { + "label": "_paused", + "offset": 0, + "slot": "307", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "308", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "__gap", + "offset": 0, + "slot": "357", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC721PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721PausableUpgradeable.sol:53" + }, + { + "label": "_tokenURIs", + "offset": 0, + "slot": "407", + "type": "t_mapping(t_uint256,t_string_storage)", + "contract": "ERC721URIStorageUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721URIStorageUpgradeable.sol:17" + }, + { + "label": "__gap", + "offset": 0, + "slot": "408", + "type": "t_array(t_uint256)49_storage", + "contract": "ERC721URIStorageUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721URIStorageUpgradeable.sol:86" + }, + { + "label": "_owner", + "offset": 0, + "slot": "457", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "458", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)44_storage": { + "label": "uint256[44]", + "numberOfBytes": "1408" + }, + "t_array(t_uint256)46_storage": { + "label": "uint256[46]", + "numberOfBytes": "1472" + }, + "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)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "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_address,t_mapping(t_address,t_bool))": { + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_address)": { + "label": "mapping(uint256 => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_string_storage)": { + "label": "mapping(uint256 => string)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "c596251116a4dbf42afa038e02c4323455b97b7a45bae160c1f497affdb11266": { + "address": "0x6bb53182851cF72Fb34A5305c18534eFf4A43D80", + "txHash": "0xb744a82df99b7fe464fae8afe8ea6e36771f71d286c0a6110d21a80ea7b5b010", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)7683_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)7434_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "minners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)7447_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)7447_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minnerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)7727_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)7727_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)7727_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minnerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)7727_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)7727_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minnerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)7532_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)7532_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)7507_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)7471_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMinner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)7897_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)7897_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinnerEpochState)7429_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minnerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minnerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minnerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)7420": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)7727_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)7434_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)7897_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)7532_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)7447_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)7471_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)7507_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinnerEpochState)7429_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinnerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)7897_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)7727_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)7471_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)7507_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)7420", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinnerEpochState)7429_storage": { + "label": "struct IWorkerHub.MinnerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMinner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)7434_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)7683_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)7897_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)7532_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)7447_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "414e315d53d6e00d66fa8c55b4e7faef7043f7318c979f54962006dbb277b504": { + "address": "0x430c1Aa440d635Eb5a13156181bCCD97B39AD4C1", + "txHash": "0x94c78b3f2f38c4b344a18938a91540b8fdb887b0e6860c352d6b6f55c5b29e63", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3373_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3116_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3129_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3129_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3417_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3417_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3417_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3417_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3417_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3214_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3214_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3189_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3153_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)3587_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)3587_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3111_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3102": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3417_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3116_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)3587_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3214_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3129_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3153_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3189_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3111_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)3587_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3417_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3153_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3189_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3102", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3111_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3116_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3373_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)3587_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3214_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3129_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "a1188c22853a3e7a80a0dbd28f1d5d63d8078f2881e1ccebe26d0667774f212d": { + "address": "0xf51C529F3b16bE14aEF05ef83BCB0431bE4b6997", + "txHash": "0x8e21c4d2aac75ca756eb7ff1128932cddbd508c16f45fe8ea159558365229a52", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3343_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3086_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3099_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3099_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3387_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3387_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3387_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3387_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3387_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3184_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3184_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3159_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3123_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)3557_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)3557_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3081_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3072": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3387_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3086_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)3557_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3184_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3099_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3123_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3159_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3081_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)3557_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3387_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3123_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3159_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3072", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3081_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3086_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3343_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)3557_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3184_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3099_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "9a17e681f5617ef10bef521e9bc1df2db2f2254478aca50b8c1772c89e47a271": { + "address": "0x457850fc8d5503d60EBbE0d44D7c1615e1847e3b", + "txHash": "0xe79ae152ec7469f57c0bf49fe93d758f21a409c461a93fdb9887917e33942f23", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3343_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3086_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3099_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3099_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3387_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3387_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3387_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3387_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3387_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3184_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3184_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3159_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3123_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)3557_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)3557_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3081_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3072": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3387_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3086_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)3557_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3184_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3099_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3123_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3159_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3081_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)3557_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3387_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3123_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3159_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3072", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3081_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3086_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3343_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)3557_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3184_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3099_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "759e2f2a6344788e43b106f467c9cff562bf617a44df6687ca828d2f05559838": { + "address": "0x62890C1f9Ea7929Ac3C0939bDbE6b0ba7dFe9F38", + "txHash": "0x6b394a2572e4b7ab0695fefe9c8b69cdb0df3c9e08a39722d670bf7c5029b1e6", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3342_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3085_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3098_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3098_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3386_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3386_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3386_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3386_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3386_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3183_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3183_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3158_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3122_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)3556_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)3556_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3080_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3071": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3386_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3085_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)3556_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3183_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3098_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3122_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3158_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3080_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)3556_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3386_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3122_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3158_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3071", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3080_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3085_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3342_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)3556_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3183_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3098_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "d03077031c7504eca3f4e12556d430043a5dacfc5cb7126256c0d09cebbabc1a": { + "address": "0xFA8d2aaA90E3ae33Bf26669619f33cc58325bda4", + "txHash": "0x411ebf567ff631d916cbf85a6d8bb9da9dcbdfe2ebc152b9b7c3ba5d75521f31", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3342_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3085_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3098_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3098_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3386_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3386_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3386_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3386_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3386_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3183_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3183_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3158_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3122_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)3556_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)3556_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3080_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3071": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3386_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3085_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)3556_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3183_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3098_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3122_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3158_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3080_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)3556_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3386_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3122_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3158_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3071", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3080_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3085_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3342_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)3556_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3183_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3098_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "989219c80312036518f573dd92297e0e7772b5aeff097477bcf30d4d07c02c73": { + "address": "0x2730657096A735AE208171e6546931905f480352", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3414_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3141_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3154_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3154_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3458_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3458_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3458_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3458_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3458_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3239_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3239_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3214_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3178_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)3628_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)3628_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3136_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3127": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3458_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3141_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)3628_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3239_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3154_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3178_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3214_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3136_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)3628_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3458_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3178_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3214_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3127", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3136_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3141_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3414_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)3628_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3239_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3154_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + }, + "allAddresses": [ + "0x2730657096A735AE208171e6546931905f480352" + ] + }, + "8700117142687a914d9541804998cb8f9242137d9f88cd2fa07764868ed05c43": { + "address": "0x129F27497f026866954434A86ac48fc17E404E33", + "txHash": "0x61c55c04c73bbb247277aa5b01213b51a61de4681cbcca0c29cc3415981e7b48", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3510_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3237_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3250_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3250_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3554_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3554_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3554_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3554_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3554_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3335_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3335_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3310_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3274_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)3724_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)3724_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3232_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3223": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3554_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3237_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)3724_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3335_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3250_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3274_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3310_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3232_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)3724_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3554_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3274_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3310_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3223", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3232_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3237_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3510_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)3724_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3335_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3250_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "3b49755068f99cc5e0448a6fad6eb7bfc6c2751c3b677d114d41be2e5d36014e": { + "address": "0x959457f6DA7aBb473aE63542C94B91c3F364e131", + "txHash": "0xfff732a947a86e4ebe90fe3c5f17c1380abe4a5b0d1f6263ac0509b461871c47", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3510_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3237_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3250_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3250_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3554_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3554_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3554_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3554_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3554_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3335_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3335_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3310_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3274_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)3724_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)3724_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3232_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3223": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3554_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3237_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)3724_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3335_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3250_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3274_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3310_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3232_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)3724_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3554_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3274_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3310_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3223", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3232_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3237_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3510_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)3724_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3335_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3250_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "5400b5b98d675ae79c3c6401e683d3f01d32c4483e3bdafbba54f198969610c5": { + "address": "0x4fCa55668127A4883C020303440a46C47CbCf4FC", + "txHash": "0x8de7a3efb7932d8e817fe0fd6a581ace0eb09f2cc435e47bb0aa84b111f0e8d6", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3530_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3255_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3268_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3268_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3574_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3574_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3574_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3574_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3574_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3353_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3353_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3328_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3292_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)3744_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)3744_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3250_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3241": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3574_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3255_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)3744_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3353_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3268_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3292_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3328_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3250_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)3744_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3574_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3292_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3328_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3241", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3250_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3255_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3530_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)3744_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3353_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3268_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "36869748d1d21dc9197b37d9c188a20e5b02e407dfe8c41399b416baa8c85399": { + "address": "0x70B03bB821A970d62744a5f52f826A5409539A54", + "txHash": "0xd6b9d0e5825fda50f7897c65d66f5885aee823c7f353ab78391a54221426a7ca", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3636_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3347_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3360_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3360_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3680_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3680_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3680_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3680_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3680_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3445_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3445_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3420_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3384_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)3850_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)3850_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3342_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3333": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3680_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3347_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)3850_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3445_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3360_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3384_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3420_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3342_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)3850_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3680_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3384_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3420_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3333", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3342_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3347_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3636_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)3850_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3445_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3360_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "72b97a0ac8c71f7298ca6ab108270481b8a0c664cec231f56922b65688f7fe9d": { + "address": "0x49F48Bbd7FF59f6fBE8dfd980C0c681b2673520d", + "txHash": "0xb1bd4358139f027d0a2fc2cae5c96fcd595c172e4634cd827ae6e2eb0ebe66f5", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3655_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3364_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3377_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3377_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3699_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3699_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3699_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3699_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3699_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3462_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3462_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3437_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3401_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)3869_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)3869_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3359_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3350": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3699_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3364_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)3869_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3462_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3377_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3401_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3437_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3359_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)3869_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3699_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3401_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3437_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3350", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3359_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3364_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3655_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)3869_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3462_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3377_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "efd4f0ab02251c5c2442625fae0e25c333e1f68e2cc666a56f0d347762be461e": { + "address": "0xb04F3E8Db914C876952FF6c31511fe6728d9Bd39", + "txHash": "0x1bcb7f8ed4dd5b15860a348d9600b5575ae68302e55b0e7eef1e5f55821cb443", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3668_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3375_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3388_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3388_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3712_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3712_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3712_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3712_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3712_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3473_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3473_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3448_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3412_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)3882_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)3882_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3370_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3361": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3712_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3375_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)3882_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3473_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3388_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3412_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3448_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3370_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)3882_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3712_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3412_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3448_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3361", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3370_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3375_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3668_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)3882_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3473_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3388_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "2b4d606112b3fbc104ca2a4b5cd83262def7c318980e610be44f9c03059be608": { + "address": "0x1B3b467e15A66C8744c392e57b341e6f8f4Bf0cc", + "txHash": "0x2c246ee644c66cb5995403e04b5c4a79bcc42e5010f534f7d730b43772ff1b61", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3631_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3338_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3351_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3351_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3675_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3675_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3675_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3675_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3675_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3436_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3436_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3411_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3375_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)3845_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)3845_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3333_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3324": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3675_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3338_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)3845_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3436_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3351_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3375_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3411_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3333_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)3845_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3675_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3375_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3411_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3324", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3333_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3338_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3631_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)3845_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3436_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3351_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "63f73f9ed6a03d93fef1e29dc4f74be2ab5599dbae613a485c3d87a5ded87611": { + "address": "0x6977064cBe32Ec80414160aB3fD8eab362011d38", + "txHash": "0x9c6a903882d7cc61ea2cdd3a8a1773bb5bb2729de0f75a683807efa157355776", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3674_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3377_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3390_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3390_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3718_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3718_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3718_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3718_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3718_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3475_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3475_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3450_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3414_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)3888_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)3888_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3372_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3363": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3718_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3377_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)3888_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3475_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3390_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3414_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3450_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3372_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)3888_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3718_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3414_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3450_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3363", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3372_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3377_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3674_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)3888_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3475_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3390_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "5fe2be26dfceb53b6ff062e8928254c53cd5538daa6ea40353c32ef4bd041388": { + "address": "0xaba0A512dE61b43bd3B87711183BcEc2fA9F2637", + "txHash": "0xf02e1c368d1508c489a9f6f23af73b108df987d5eddb3930b1db2093ad57052a", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3696_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3403_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3416_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3416_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3740_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3740_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3740_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3740_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3740_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3501_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3501_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3476_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3440_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)3910_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)3910_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3398_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3389": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3740_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3403_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)3910_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3501_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3416_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3440_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3476_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3398_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)3910_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3740_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3440_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3476_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3389", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3398_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3403_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3696_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)3910_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3501_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3416_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "21fda098b396956bf528175f91d0d75663441f74bf358d1ed59e766c6b50bc2f": { + "address": "0x059A5a40F8B9D126370B3145cBC6574f093826C5", + "txHash": "0x1c8efcfd53ac2db396f0b0bb24535438d9e8c9f1aab45041f95f925ca9c5acab", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3920_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3601_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3614_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3614_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3964_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3964_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3964_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3964_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3964_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3699_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3699_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3674_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3638_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)4134_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)4134_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3596_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3587": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3964_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3601_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)4134_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3699_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3614_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3638_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3674_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3596_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)4134_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3964_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3638_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3674_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3587", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3596_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3601_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3920_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)4134_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3699_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3614_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "4276c9135e4bac8599d720824032a256f5412cc731e446fee410bbb02bee88db": { + "address": "0x868C1A4fb713A5e681df54c99B8CCA77D3BEf08E", + "txHash": "0x7cb7e714dbe8ef05c546a79729fac47ac5d7eb6337c79dd233c2ae15bf65b3c7", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3921_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3602_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3615_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3615_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3965_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3965_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3965_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3965_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3965_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3700_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3700_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3675_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3639_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)4135_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)4135_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3597_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3588": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3965_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3602_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)4135_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3700_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3615_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3639_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3675_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3597_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)4135_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3965_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3639_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3675_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3588", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3597_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3602_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3921_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)4135_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3700_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3615_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "ecaf24cfbbd79f3ed56820ca3d5b133690abea7c288dc58c43e7fdfe976e7723": { + "address": "0x732D393285fa372B975a6370B6Ca43B503635AC6", + "txHash": "0x7c96a10013670d819841c88c9a3296de59686968dd664091ab86af692f75b944", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3915_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3596_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3609_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3609_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3959_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3959_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3959_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3959_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3959_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3694_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3694_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3669_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3633_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)4129_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)4129_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3591_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3582": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3959_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3596_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)4129_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3694_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3609_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3633_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3669_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3591_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)4129_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3959_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3633_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3669_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3582", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3591_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3596_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3915_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)4129_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3694_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3609_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "1621970fe69f5106989211676239da04dee2d6d2be4342e8139d6fead72bd0d4": { + "address": "0x7C872792629927d25FBfbE7F8e0587D598e98Bb2", + "txHash": "0xdb029c69f316e281187331954733b985a9ccc5abfa6d41b1dcbe0175124c5031", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)4214_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3854_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3867_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3867_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)4258_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)4258_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)4258_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)4258_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)4258_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3952_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3952_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3927_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3891_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)4428_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)4428_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3849_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "finePercentage", + "offset": 0, + "slot": "31", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:67" + }, + { + "label": "minerRewards", + "offset": 0, + "slot": "32", + "type": "t_mapping(t_address,t_uint256)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:70" + }, + { + "label": "boost", + "offset": 0, + "slot": "33", + "type": "t_mapping(t_address,t_struct(Boost)3961_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:73" + }, + { + "label": "__gap", + "offset": 0, + "slot": "34", + "type": "t_array(t_uint256)97_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:75" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "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_array(t_uint256)97_storage": { + "label": "uint256[97]", + "numberOfBytes": "3104" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3840": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)4258_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Boost)3961_storage)": { + "label": "mapping(address => struct IWorkerHub.Boost)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3854_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)4428_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3952_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3867_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3891_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3927_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3849_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)4428_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)4258_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3891_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Boost)3961_storage": { + "label": "struct IWorkerHub.Boost", + "members": [ + { + "label": "minerTimestamp", + "type": "t_uint40", + "offset": 0, + "slot": "0" + }, + { + "label": "validatorTimestamp", + "type": "t_uint40", + "offset": 5, + "slot": "0" + }, + { + "label": "reserved1", + "type": "t_uint48", + "offset": 10, + "slot": "0" + }, + { + "label": "reserved2", + "type": "t_uint128", + "offset": 16, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Inference)3927_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3840", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3849_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3854_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)4214_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)4428_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3952_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3867_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint128": { + "label": "uint128", + "numberOfBytes": "16" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint48": { + "label": "uint48", + "numberOfBytes": "6" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "ca51d2c375fd54e47ed76b2b6e118e4dce495a1f042ddd821467d72ea63db2e0": { + "address": "0x96E62CA9B7Aa12D436797890C544aaEbE64fa2DE", + "txHash": "0xe7e040f05b0f51f7e9506022a351ec8dedbe60dc46c6932f09d4af4ca0fa31cb", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)4271_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3911_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3924_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3924_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)4315_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)4315_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)4315_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)4315_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)4315_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)4009_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)4009_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3984_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3948_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)4485_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)4485_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3906_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "finePercentage", + "offset": 0, + "slot": "31", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:67" + }, + { + "label": "minerRewards", + "offset": 0, + "slot": "32", + "type": "t_mapping(t_address,t_uint256)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:70" + }, + { + "label": "boost", + "offset": 0, + "slot": "33", + "type": "t_mapping(t_address,t_struct(Boost)4018_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:73" + }, + { + "label": "__gap", + "offset": 0, + "slot": "34", + "type": "t_array(t_uint256)97_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:75" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "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_array(t_uint256)97_storage": { + "label": "uint256[97]", + "numberOfBytes": "3104" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3897": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)4315_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Boost)4018_storage)": { + "label": "mapping(address => struct IWorkerHub.Boost)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3911_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)4485_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)4009_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3924_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3948_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3984_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3906_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)4485_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)4315_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3948_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Boost)4018_storage": { + "label": "struct IWorkerHub.Boost", + "members": [ + { + "label": "minerTimestamp", + "type": "t_uint40", + "offset": 0, + "slot": "0" + }, + { + "label": "validatorTimestamp", + "type": "t_uint40", + "offset": 5, + "slot": "0" + }, + { + "label": "reserved1", + "type": "t_uint48", + "offset": 10, + "slot": "0" + }, + { + "label": "reserved2", + "type": "t_uint128", + "offset": 16, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Inference)3984_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3897", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3906_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3911_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)4271_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)4485_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)4009_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3924_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint128": { + "label": "uint128", + "numberOfBytes": "16" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint48": { + "label": "uint48", + "numberOfBytes": "6" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } } } } diff --git a/.openzeppelin/unknown-43338.json b/.openzeppelin/unknown-43338.json new file mode 100644 index 0000000..2eb643d --- /dev/null +++ b/.openzeppelin/unknown-43338.json @@ -0,0 +1,8897 @@ +{ + "manifestVersion": "3.2", + "admin": { + "address": "0xD261fb5D8fA1a96d3B1f2bC2C79580BC363E9059", + "txHash": "0xcc118e38ca17636a387927af961cf0442b8ce40eff3d66d482d9b74e4475db8e" + }, + "proxies": [ + { + "address": "0x05726BF187938c06d6C832dc493E3Df70fe735c8", + "txHash": "0x0e2a37959f11ef671cbf17c103d47da29d86a0df78be42c8069c1a4ef6b6305d", + "kind": "transparent" + }, + { + "address": "0xB0e91e2Aa27330434Bfc33fF5314C796eD3Ad3c6", + "txHash": "0x9ba204c9d0ce1c4005839950b5a6722ee3d1174c8684ae4eedad45d83ba9f792", + "kind": "transparent" + }, + { + "address": "0xb641b7b99b1d03B629b65D0059E3cEE391B6D352", + "txHash": "0x00a2da96987006f6a30de0874ec21014fbc1f6306985fc0767c644deb4aa78fb", + "kind": "transparent" + }, + { + "address": "0x3a269D64057314E7D0E9F4164077FF57fBDb93f9", + "txHash": "0x0bc79a2406868146e9db662459fb90a80ddc2e51d0a8a2cb0ad5132e6796be60", + "kind": "transparent" + }, + { + "address": "0x91DbBA6bE2aF20d1052C13Cdf9ffCaF92615ceD7", + "txHash": "0xcaa41c7538737b94622ee97d11e1f37e13e2721b264488f5fee000f3a9d58f03", + "kind": "transparent" + } + ], + "impls": { + "cc39c392217c1bb24c515b641c4c643f71fe0fcec761330c7f56de14dc02ed48": { + "address": "0x4310D19bAFb2EB9C04204E1193253262fBC67dC2", + "txHash": "0xb68964561e6b4a3a113592640a5a473eb80898b87dc32e69b6f1876c88f73e6c", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3681_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3388_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3401_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3401_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3725_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3725_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3725_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3725_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3725_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3486_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3486_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3461_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3425_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)3895_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)3895_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3383_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3374": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3725_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3388_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)3895_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3486_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3401_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3425_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3461_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3383_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)3895_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3725_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3425_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3461_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3374", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3383_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3388_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3681_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)3895_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3486_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3401_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "d26b765071ecc975c2331a608327b23e8c7633e8ead1e079225a5f115f94c5db": { + "address": "0xc1eF380E348F5AE8fC1523F67Ba1A1d4fDfDea42", + "txHash": "0x129c431540a63d1c26dcac491e5f93b45fd9eaea878fa6f933146ec888bbef7d", + "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:40" + }, + { + "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": "_name", + "offset": 0, + "slot": "101", + "type": "t_string_storage", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:25" + }, + { + "label": "_symbol", + "offset": 0, + "slot": "102", + "type": "t_string_storage", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:28" + }, + { + "label": "_owners", + "offset": 0, + "slot": "103", + "type": "t_mapping(t_uint256,t_address)", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:31" + }, + { + "label": "_balances", + "offset": 0, + "slot": "104", + "type": "t_mapping(t_address,t_uint256)", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:34" + }, + { + "label": "_tokenApprovals", + "offset": 0, + "slot": "105", + "type": "t_mapping(t_uint256,t_address)", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:37" + }, + { + "label": "_operatorApprovals", + "offset": 0, + "slot": "106", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "107", + "type": "t_array(t_uint256)44_storage", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:477" + }, + { + "label": "models", + "offset": 0, + "slot": "151", + "type": "t_mapping(t_uint256,t_address)", + "contract": "ModelCollectionStorage", + "src": "contracts/storages/ModelCollectionStorage.sol:7" + }, + { + "label": "nextModelId", + "offset": 0, + "slot": "152", + "type": "t_uint256", + "contract": "ModelCollectionStorage", + "src": "contracts/storages/ModelCollectionStorage.sol:8" + }, + { + "label": "mintPrice", + "offset": 0, + "slot": "153", + "type": "t_uint256", + "contract": "ModelCollectionStorage", + "src": "contracts/storages/ModelCollectionStorage.sol:9" + }, + { + "label": "royaltyReceiver", + "offset": 0, + "slot": "154", + "type": "t_address", + "contract": "ModelCollectionStorage", + "src": "contracts/storages/ModelCollectionStorage.sol:10" + }, + { + "label": "royaltyPortion", + "offset": 20, + "slot": "154", + "type": "t_uint16", + "contract": "ModelCollectionStorage", + "src": "contracts/storages/ModelCollectionStorage.sol:11" + }, + { + "label": "__gap", + "offset": 0, + "slot": "155", + "type": "t_array(t_uint256)50_storage", + "contract": "ModelCollectionStorage", + "src": "contracts/storages/ModelCollectionStorage.sol:13" + }, + { + "label": "_hashedName", + "offset": 0, + "slot": "205", + "type": "t_bytes32", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:40", + "renamedFrom": "_HASHED_NAME" + }, + { + "label": "_hashedVersion", + "offset": 0, + "slot": "206", + "type": "t_bytes32", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:42", + "renamedFrom": "_HASHED_VERSION" + }, + { + "label": "_name", + "offset": 0, + "slot": "207", + "type": "t_string_storage", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:44" + }, + { + "label": "_version", + "offset": 0, + "slot": "208", + "type": "t_string_storage", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:45" + }, + { + "label": "__gap", + "offset": 0, + "slot": "209", + "type": "t_array(t_uint256)48_storage", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:204" + }, + { + "label": "_ownedTokens", + "offset": 0, + "slot": "257", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "ERC721EnumerableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol:17" + }, + { + "label": "_ownedTokensIndex", + "offset": 0, + "slot": "258", + "type": "t_mapping(t_uint256,t_uint256)", + "contract": "ERC721EnumerableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol:20" + }, + { + "label": "_allTokens", + "offset": 0, + "slot": "259", + "type": "t_array(t_uint256)dyn_storage", + "contract": "ERC721EnumerableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol:23" + }, + { + "label": "_allTokensIndex", + "offset": 0, + "slot": "260", + "type": "t_mapping(t_uint256,t_uint256)", + "contract": "ERC721EnumerableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol:26" + }, + { + "label": "__gap", + "offset": 0, + "slot": "261", + "type": "t_array(t_uint256)46_storage", + "contract": "ERC721EnumerableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol:171" + }, + { + "label": "_paused", + "offset": 0, + "slot": "307", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "308", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "__gap", + "offset": 0, + "slot": "357", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC721PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721PausableUpgradeable.sol:53" + }, + { + "label": "_tokenURIs", + "offset": 0, + "slot": "407", + "type": "t_mapping(t_uint256,t_string_storage)", + "contract": "ERC721URIStorageUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721URIStorageUpgradeable.sol:17" + }, + { + "label": "__gap", + "offset": 0, + "slot": "408", + "type": "t_array(t_uint256)49_storage", + "contract": "ERC721URIStorageUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721URIStorageUpgradeable.sol:86" + }, + { + "label": "_owner", + "offset": 0, + "slot": "457", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "458", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)44_storage": { + "label": "uint256[44]", + "numberOfBytes": "1408" + }, + "t_array(t_uint256)46_storage": { + "label": "uint256[46]", + "numberOfBytes": "1472" + }, + "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)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "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_address,t_mapping(t_address,t_bool))": { + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_address)": { + "label": "mapping(uint256 => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_string_storage)": { + "label": "mapping(uint256 => string)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "4d697a02bf64cd7d91de33c2b9aeaeeaf81999c770974b24d232b8e8eb754178": { + "address": "0x5C24921d52632F80c4B269b236F75C7388CD3a26", + "txHash": "0x8d85f56296c0e5a2623c5c457596a11b0961120a438d2c67bec51b1e2e66ad96", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3712_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3419_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3432_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3432_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3756_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3756_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3756_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3756_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3756_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3517_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3517_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3492_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3456_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)3926_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)3926_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3414_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3405": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3756_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3419_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)3926_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3517_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3432_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3456_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3492_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3414_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)3926_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3756_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3456_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3492_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3405", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3414_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3419_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3712_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)3926_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3517_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3432_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "f10ca3d3139c18ba9beb4e2ce264d1d1f404fa1bb707289cfcb83b267b1a1ecf": { + "address": "0xCC6C5e04340F799047B15d6c63b7936F0010AB27", + "txHash": "0xf30d32de3062bf64556d446f790dc84b584e08925f04c3031f47d2dd299fcc5d", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3712_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3419_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3432_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3432_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3756_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3756_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3756_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3756_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3756_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3517_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3517_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3492_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3456_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)3926_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)3926_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3414_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3405": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3756_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3419_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)3926_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3517_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3432_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3456_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3492_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3414_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)3926_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3756_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3456_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3492_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3405", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3414_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3419_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3712_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)3926_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3517_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3432_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "66d8effdce7c7bfd7ef2894c5b5d2ae4001d70b682e47ab05710df6e35833e45": { + "address": "0xDCd0622D0d2C3fB5645D005f2829529eeccAe730", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3771_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3466_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3479_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3479_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3815_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3815_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3815_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3815_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3815_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3564_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3564_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3539_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3503_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)3985_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)3985_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3461_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3452": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3815_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3466_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)3985_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3564_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3479_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3503_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3539_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3461_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)3985_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3815_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3503_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3539_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3452", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3461_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3466_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3771_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)3985_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3564_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3479_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + }, + "allAddresses": [ + "0xDCd0622D0d2C3fB5645D005f2829529eeccAe730" + ] + }, + "ab2ce02221b12c99077e2f45f8d3badbd641b8a2f4007920599f757106fec228": { + "address": "0x92eE37e1718613f5A9E6AA27879Fa2626568bf73", + "txHash": "0x4a38ce0d1162082d9e8d22ff3e97773c3378fff3e7a2748f066e835a31607467", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3914_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3599_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3612_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3612_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3958_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3958_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3958_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3958_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3958_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3697_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3697_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3672_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3636_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)4128_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)4128_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3594_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3585": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3958_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3599_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)4128_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3697_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3612_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3636_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3672_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3594_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)4128_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3958_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3636_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3672_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3585", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3594_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3599_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3914_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)4128_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3697_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3612_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "d011b18cc132a83de1fd50498e076dd0fd7fffc2eee2b912ce9e7d16cea01449": { + "address": "0x271fD1B22171Eb935F03D7f0Ece310Cc9C7CDDcD", + "txHash": "0x6603035b0de64a43aefad2e8021ff0949ea3302e48addfa16f94b3964fd08a01", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3934_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3615_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3628_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3628_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3978_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3978_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3978_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3978_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3978_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3713_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3713_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3688_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3652_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)4148_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)4148_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3610_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3601": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3978_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3615_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)4148_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3713_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3628_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3652_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3688_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3610_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)4148_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3978_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3652_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3688_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3601", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3610_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3615_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3934_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)4148_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3713_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3628_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "21fda098b396956bf528175f91d0d75663441f74bf358d1ed59e766c6b50bc2f": { + "address": "0x6dd29e64a144cd41705661F42B7F1aa3abCCD552", + "txHash": "0xa26d8b62fe833fcd888108e50506a17ba1e42106c0b130aa3cce198bc98d5507", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3920_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3601_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3614_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3614_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3964_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3964_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3964_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3964_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3964_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3699_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3699_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3674_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3638_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)4134_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)4134_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3596_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3587": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3964_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3601_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)4134_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3699_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3614_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3638_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3674_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3596_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)4134_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3964_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3638_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3674_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3587", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3596_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3601_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3920_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)4134_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3699_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3614_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "4276c9135e4bac8599d720824032a256f5412cc731e446fee410bbb02bee88db": { + "address": "0x4d9b308AB88B0ADB410849977db062A4404AC6f5", + "txHash": "0xbd560c694dd42f74f5652248cfcbdc14a81c595dea9fe4c0d2b50f524b6152e1", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)3921_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3602_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3615_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3615_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)3965_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)3965_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)3965_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)3965_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)3965_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3700_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3700_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3675_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3639_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)4135_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)4135_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3597_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "__gap", + "offset": 0, + "slot": "31", + "type": "t_array(t_uint256)100_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:66" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)100_storage": { + "label": "uint256[100]", + "numberOfBytes": "3200" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3588": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)3965_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3602_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)4135_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3700_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3615_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3639_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3675_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3597_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)4135_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)3965_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3639_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Inference)3675_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3588", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3597_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3602_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)3921_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)4135_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3700_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3615_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "595301b19db4fc96cebf15646c8723e2757eafede1f678862c46c01bd45d25d6": { + "address": "0x88e78f97494FAe0e70fF11DE1cdEAB1993c83E09", + "txHash": "0x589b83a222f4a7e988f74d139cc1e31e4260211a48a3ec5a8b55253df6320e4e", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)4204_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3844_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3857_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3857_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)4248_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)4248_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)4248_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)4248_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)4248_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3942_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3942_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3917_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3881_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)4418_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)4418_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3839_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "finePercentage", + "offset": 0, + "slot": "31", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:67" + }, + { + "label": "minerRewards", + "offset": 0, + "slot": "32", + "type": "t_mapping(t_address,t_uint256)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:70" + }, + { + "label": "boost", + "offset": 0, + "slot": "33", + "type": "t_mapping(t_address,t_struct(Boost)3951_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:73" + }, + { + "label": "__gap", + "offset": 0, + "slot": "34", + "type": "t_array(t_uint256)97_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:75" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "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_array(t_uint256)97_storage": { + "label": "uint256[97]", + "numberOfBytes": "3104" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3830": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)4248_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Boost)3951_storage)": { + "label": "mapping(address => struct IWorkerHub.Boost)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3844_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)4418_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3942_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3857_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3881_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3917_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3839_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)4418_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)4248_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3881_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Boost)3951_storage": { + "label": "struct IWorkerHub.Boost", + "members": [ + { + "label": "minerTimestamp", + "type": "t_uint40", + "offset": 0, + "slot": "0" + }, + { + "label": "validatorTimestamp", + "type": "t_uint40", + "offset": 5, + "slot": "0" + }, + { + "label": "reserved1", + "type": "t_uint48", + "offset": 10, + "slot": "0" + }, + { + "label": "reserved2", + "type": "t_uint128", + "offset": 16, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Inference)3917_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3830", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3839_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3844_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)4204_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)4418_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3942_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3857_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint128": { + "label": "uint128", + "numberOfBytes": "16" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint48": { + "label": "uint48", + "numberOfBytes": "6" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "1621970fe69f5106989211676239da04dee2d6d2be4342e8139d6fead72bd0d4": { + "address": "0x6d2a105aEc1c02a40F4C7fAF8f038Eb6eA16Bf98", + "txHash": "0xbdd37a8fad5e3c6761428073036cb8585c647d96d0d91739c16c62e30dade318", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)4214_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3854_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3867_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3867_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)4258_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)4258_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)4258_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)4258_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)4258_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3952_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)3952_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3927_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3891_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)4428_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)4428_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3849_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "finePercentage", + "offset": 0, + "slot": "31", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:67" + }, + { + "label": "minerRewards", + "offset": 0, + "slot": "32", + "type": "t_mapping(t_address,t_uint256)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:70" + }, + { + "label": "boost", + "offset": 0, + "slot": "33", + "type": "t_mapping(t_address,t_struct(Boost)3961_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:73" + }, + { + "label": "__gap", + "offset": 0, + "slot": "34", + "type": "t_array(t_uint256)97_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:75" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "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_array(t_uint256)97_storage": { + "label": "uint256[97]", + "numberOfBytes": "3104" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3840": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)4258_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Boost)3961_storage)": { + "label": "mapping(address => struct IWorkerHub.Boost)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3854_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)4428_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)3952_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3867_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3891_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3927_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3849_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)4428_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)4258_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3891_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Boost)3961_storage": { + "label": "struct IWorkerHub.Boost", + "members": [ + { + "label": "minerTimestamp", + "type": "t_uint40", + "offset": 0, + "slot": "0" + }, + { + "label": "validatorTimestamp", + "type": "t_uint40", + "offset": 5, + "slot": "0" + }, + { + "label": "reserved1", + "type": "t_uint48", + "offset": 10, + "slot": "0" + }, + { + "label": "reserved2", + "type": "t_uint128", + "offset": 16, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Inference)3927_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3840", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3849_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3854_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)4214_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)4428_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)3952_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3867_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint128": { + "label": "uint128", + "numberOfBytes": "16" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint48": { + "label": "uint48", + "numberOfBytes": "6" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "ca51d2c375fd54e47ed76b2b6e118e4dce495a1f042ddd821467d72ea63db2e0": { + "address": "0x96E62CA9B7Aa12D436797890C544aaEbE64fa2DE", + "txHash": "0xadd356e7a94b55b60dea41c5922ddb4c63709a620913a829928ed427bc615433", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "randomizer", + "offset": 0, + "slot": "0", + "type": "t_struct(Randomizer)4271_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:10" + }, + { + "label": "models", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(Model)3911_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:12" + }, + { + "label": "miners", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(Worker)3924_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:13" + }, + { + "label": "validators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Worker)3924_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:14" + }, + { + "label": "minerAddressesByModel", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(AddressSet)4315_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:16" + }, + { + "label": "validatorAddressesByModel", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(AddressSet)4315_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:17" + }, + { + "label": "modelAddresses", + "offset": 0, + "slot": "6", + "type": "t_struct(AddressSet)4315_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:19" + }, + { + "label": "minerAddresses", + "offset": 0, + "slot": "8", + "type": "t_struct(AddressSet)4315_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:20" + }, + { + "label": "validatorAddresses", + "offset": 0, + "slot": "10", + "type": "t_struct(AddressSet)4315_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:21" + }, + { + "label": "minerUnstakeRequests", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)4009_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:23" + }, + { + "label": "validatorUnstakeRequests", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_struct(UnstakeRequest)4009_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:24" + }, + { + "label": "inferenceNumber", + "offset": 0, + "slot": "14", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:26" + }, + { + "label": "inferences", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint256,t_struct(Inference)3984_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:27" + }, + { + "label": "assignmentNumber", + "offset": 0, + "slot": "16", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:29" + }, + { + "label": "assignments", + "offset": 0, + "slot": "17", + "type": "t_mapping(t_uint256,t_struct(Assignment)3948_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:30" + }, + { + "label": "assignmentsByMiner", + "offset": 0, + "slot": "18", + "type": "t_mapping(t_address,t_struct(Uint256Set)4485_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:31" + }, + { + "label": "assignmentsByInference", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_uint256,t_struct(Uint256Set)4485_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:32" + }, + { + "label": "validatorDisputed", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_bool))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:34" + }, + { + "label": "rewardInEpoch", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_uint256,t_struct(MinerEpochState)3906_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:38" + }, + { + "label": "minerTaskCompleted", + "offset": 0, + "slot": "22", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:43" + }, + { + "label": "minerMinimumStake", + "offset": 0, + "slot": "23", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:45" + }, + { + "label": "validatorMinimumStake", + "offset": 0, + "slot": "24", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:46" + }, + { + "label": "treasury", + "offset": 0, + "slot": "25", + "type": "t_address", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:47" + }, + { + "label": "feePercentage", + "offset": 20, + "slot": "25", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:48" + }, + { + "label": "miningTimeLimit", + "offset": 22, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:49" + }, + { + "label": "validatingTimeLimit", + "offset": 27, + "slot": "25", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:50" + }, + { + "label": "disputingTimeLimit", + "offset": 0, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:51" + }, + { + "label": "penaltyDuration", + "offset": 5, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:52" + }, + { + "label": "unstakeDelayTime", + "offset": 10, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:53" + }, + { + "label": "minerRequirement", + "offset": 15, + "slot": "26", + "type": "t_uint8", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:54" + }, + { + "label": "maximumTier", + "offset": 16, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:56" + }, + { + "label": "disqualificationPercentage", + "offset": 18, + "slot": "26", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:57" + }, + { + "label": "currentEpoch", + "offset": 20, + "slot": "26", + "type": "t_uint40", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:60" + }, + { + "label": "blocksPerEpoch", + "offset": 0, + "slot": "27", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:61" + }, + { + "label": "lastBlock", + "offset": 0, + "slot": "28", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:62" + }, + { + "label": "rewardPerEpochBasedOnPerf", + "offset": 0, + "slot": "29", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:63" + }, + { + "label": "rewardPerEpoch", + "offset": 0, + "slot": "30", + "type": "t_uint256", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:64" + }, + { + "label": "finePercentage", + "offset": 0, + "slot": "31", + "type": "t_uint16", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:67" + }, + { + "label": "minerRewards", + "offset": 0, + "slot": "32", + "type": "t_mapping(t_address,t_uint256)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:70" + }, + { + "label": "boost", + "offset": 0, + "slot": "33", + "type": "t_mapping(t_address,t_struct(Boost)4018_storage)", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:73" + }, + { + "label": "__gap", + "offset": 0, + "slot": "34", + "type": "t_array(t_uint256)97_storage", + "contract": "WorkerHubStorage", + "src": "contracts/storages/WorkerHubStorage.sol:75" + }, + { + "label": "_initialized", + "offset": 0, + "slot": "131", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "131", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "132", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_owner", + "offset": 0, + "slot": "182", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "183", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "232", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "233", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "282", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "283", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "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_array(t_uint256)97_storage": { + "label": "uint256[97]", + "numberOfBytes": "3104" + }, + "t_array(t_uint256)dyn_storage": { + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_enum(InferenceStatus)3897": { + "label": "enum IWorkerHub.InferenceStatus", + "members": [ + "Nil", + "Solving", + "Disputing", + "Solved", + "Killed" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_bool))": { + "label": "mapping(address => mapping(uint256 => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AddressSet)4315_storage)": { + "label": "mapping(address => struct Set.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Boost)4018_storage)": { + "label": "mapping(address => struct IWorkerHub.Boost)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Model)3911_storage)": { + "label": "mapping(address => struct IWorkerHub.Model)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Uint256Set)4485_storage)": { + "label": "mapping(address => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UnstakeRequest)4009_storage)": { + "label": "mapping(address => struct IWorkerHub.UnstakeRequest)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Worker)3924_storage)": { + "label": "mapping(address => struct IWorkerHub.Worker)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bool)": { + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Assignment)3948_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Assignment)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Inference)3984_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.Inference)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(MinerEpochState)3906_storage)": { + "label": "mapping(uint256 => struct IWorkerHub.MinerEpochState)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Uint256Set)4485_storage)": { + "label": "mapping(uint256 => struct Set.Uint256Set)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)4315_storage": { + "label": "struct Set.AddressSet", + "members": [ + { + "label": "values", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Assignment)3948_storage": { + "label": "struct IWorkerHub.Assignment", + "members": [ + { + "label": "inferenceId", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "output", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "worker", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "disapprovalCount", + "type": "t_uint8", + "offset": 20, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Boost)4018_storage": { + "label": "struct IWorkerHub.Boost", + "members": [ + { + "label": "minerTimestamp", + "type": "t_uint40", + "offset": 0, + "slot": "0" + }, + { + "label": "validatorTimestamp", + "type": "t_uint40", + "offset": 5, + "slot": "0" + }, + { + "label": "reserved1", + "type": "t_uint48", + "offset": 10, + "slot": "0" + }, + { + "label": "reserved2", + "type": "t_uint128", + "offset": 16, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Inference)3984_storage": { + "label": "struct IWorkerHub.Inference", + "members": [ + { + "label": "assignments", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "input", + "type": "t_bytes_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "value", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "disputingAddress", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "expiredAt", + "type": "t_uint40", + "offset": 20, + "slot": "4" + }, + { + "label": "firstSubmissionId", + "type": "t_uint8", + "offset": 25, + "slot": "4" + }, + { + "label": "status", + "type": "t_enum(InferenceStatus)3897", + "offset": 26, + "slot": "4" + }, + { + "label": "creator", + "type": "t_address", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_struct(MinerEpochState)3906_storage": { + "label": "struct IWorkerHub.MinerEpochState", + "members": [ + { + "label": "perfReward", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "epochReward", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "totalTaskCompleted", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "totalMiner", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Model)3911_storage": { + "label": "struct IWorkerHub.Model", + "members": [ + { + "label": "minimumFee", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tier", + "type": "t_uint32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Randomizer)4271_storage": { + "label": "struct Random.Randomizer", + "members": [ + { + "label": "nonce", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Uint256Set)4485_storage": { + "label": "struct Set.Uint256Set", + "members": [ + { + "label": "values", + "type": "t_array(t_uint256)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "positions", + "type": "t_mapping(t_uint256,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UnstakeRequest)4009_storage": { + "label": "struct IWorkerHub.UnstakeRequest", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "unlockAt", + "type": "t_uint40", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Worker)3924_storage": { + "label": "struct IWorkerHub.Worker", + "members": [ + { + "label": "stake", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "commitment", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "modelAddress", + "type": "t_address", + "offset": 0, + "slot": "2" + }, + { + "label": "lastClaimedEpoch", + "type": "t_uint40", + "offset": 20, + "slot": "2" + }, + { + "label": "activeTime", + "type": "t_uint40", + "offset": 25, + "slot": "2" + }, + { + "label": "tier", + "type": "t_uint16", + "offset": 30, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint128": { + "label": "uint128", + "numberOfBytes": "16" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint40": { + "label": "uint40", + "numberOfBytes": "5" + }, + "t_uint48": { + "label": "uint48", + "numberOfBytes": "6" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + } + } +} diff --git a/contracts/HybridModel.sol b/contracts/HybridModel.sol index 98b0d05..2fa380a 100644 --- a/contracts/HybridModel.sol +++ b/contracts/HybridModel.sol @@ -6,31 +6,24 @@ import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/Own import {PausableUpgradeable} from "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; import {ReentrancyGuardUpgradeable} from "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol"; -import {IWorkerHub} from "./interfaces/IWorkerHub.sol"; +import {IInferable} from "./interfaces/IInferable.sol"; -abstract contract HybridModelStorage is IHybridModel { - uint256 public identifier; - uint256 public inferenceCost; - - string public name; - string public url; - - address public workerHub; - - uint256[50] private __gap; -} +import {HybridModelStorage} from "./storages/HybridModelStorage.sol"; contract HybridModel is HybridModelStorage, OwnableUpgradeable, PausableUpgradeable, ReentrancyGuardUpgradeable { + string constant private VERSION = "v0.0.1"; + + receive() external payable {} + function initialize( address _workerHub, uint256 _identifier, string calldata _name, - string calldata _url, - uint256 _inferenceCost + string calldata _metadata ) external initializer { __Ownable_init(); __Pausable_init(); @@ -39,12 +32,11 @@ ReentrancyGuardUpgradeable { workerHub = _workerHub; identifier = _identifier; name = _name; - url = _url; - inferenceCost = _inferenceCost; + metadata = _metadata; } function version() external pure returns (string memory) { - return "v0.0.1"; + return VERSION; } function pause() external onlyOwner whenNotPaused { @@ -70,15 +62,9 @@ ReentrancyGuardUpgradeable { emit NameUpdate(_name); } - function updateUrl(string calldata _url) external onlyOwner { - url = _url; - emit UrlUpdate(_url); - } - - function updateInferenceCost(uint256 _inferenceCost) external onlyOwner { - inferenceCost = _inferenceCost; - - emit InferenceCostUpdate(_inferenceCost); + function updateMetadata(string calldata _metadata) external onlyOwner { + metadata = _metadata; + emit MetadataUpdate(_metadata); } function setModelId(uint256 _modelId) external { @@ -87,9 +73,7 @@ ReentrancyGuardUpgradeable { emit IdentifierUpdate(_modelId); } - function infer(bytes calldata _data) external payable whenNotPaused nonReentrant returns (uint256) { - if (msg.value < inferenceCost) revert InsufficientFunds(); - - return IWorkerHub(workerHub).infer{value: msg.value}(_data, identifier, msg.sender); + function infer(bytes calldata _input) external payable whenNotPaused nonReentrant returns (uint256) { + return IInferable(workerHub).infer{value: msg.value}(_input, msg.sender); } } diff --git a/contracts/ImageClassifier.sol b/contracts/ImageClassifier.sol index 2ca4c12..0f72c17 100644 --- a/contracts/ImageClassifier.sol +++ b/contracts/ImageClassifier.sol @@ -29,9 +29,6 @@ contract ImageClassifier is IImageClassifier, Ownable { using Layers for Layers.MaxPooling2DLayer; using Layers for Layers.Conv2DLayer; using Tensor1DMethods for Tensors.Tensor1D; - using Tensor2DMethods for Tensors.Tensor2D; - using Tensor3DMethods for Tensors.Tensor3D; - using Tensor4DMethods for Tensors.Tensor4D; Model public model; address public modelInterface; diff --git a/contracts/ModelCollection.sol b/contracts/ModelCollection.sol new file mode 100644 index 0000000..2a70f4e --- /dev/null +++ b/contracts/ModelCollection.sol @@ -0,0 +1,190 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; +import {IERC165Upgradeable} from "@openzeppelin/contracts-upgradeable/interfaces/IERC165Upgradeable.sol"; +import {IERC2981Upgradeable} from "@openzeppelin/contracts-upgradeable/interfaces/IERC2981Upgradeable.sol"; +import {ReentrancyGuardUpgradeable} from "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol"; +import {ERC721Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol"; +import {ERC721EnumerableUpgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol"; +import {ERC721PausableUpgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721PausableUpgradeable.sol"; +import {ERC721URIStorageUpgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721URIStorageUpgradeable.sol"; +import {IERC721MetadataUpgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/IERC721MetadataUpgradeable.sol"; +import {EIP712Upgradeable, ECDSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol"; + +import {IModel} from "./interfaces/IModel.sol"; + +import {ModelCollectionStorage} from "./storages/ModelCollectionStorage.sol"; + +contract ModelCollection is +ModelCollectionStorage, +EIP712Upgradeable, +ERC721EnumerableUpgradeable, +ERC721PausableUpgradeable, +ERC721URIStorageUpgradeable, +OwnableUpgradeable { + string constant private VERSION = "v0.0.1"; + uint256 constant private PORTION_DENOMINATOR = 10000; + + receive() external payable {} + + function initialize( + string calldata _name, + string calldata _symbol, + uint256 _mintPrice, + address _royaltyReceiver, + uint16 _royaltyPortion, + uint256 _nextModelId + ) external initializer { + __ERC721_init(_name, _symbol); + __ERC721Pausable_init(); + __Ownable_init(); + + mintPrice = _mintPrice; + royaltyReceiver = _royaltyReceiver; + royaltyPortion = _royaltyPortion; + nextModelId = _nextModelId; + } + + function version() external pure returns (string memory) { + return VERSION; + } + + function pause() external onlyOwner whenNotPaused { + _pause(); + } + + function unpause() external onlyOwner whenPaused { + _unpause(); + } + + function updateMintPrice(uint256 _mintPrice) external onlyOwner { + mintPrice = _mintPrice; + emit MintPriceUpdate(_mintPrice); + } + + function updateRoyaltyReceiver(address _royaltyReceiver) external onlyOwner { + royaltyReceiver = _royaltyReceiver; + emit RoyaltyReceiverUpdate(_royaltyReceiver); + } + + function updateRoyaltyPortion(uint16 _royaltyPortion) external onlyOwner { + royaltyPortion = _royaltyPortion; + emit RoyaltyPortionUpdate(_royaltyPortion); + } + + function mint_(address _to, string calldata _uri, address _model, uint256 tokenId) internal returns (uint256) { + if (_model == address(0)) revert InvalidModel(); + if (msg.value < mintPrice) revert InsufficientFunds(); + + _safeMint(_to, tokenId); + _setTokenURI(tokenId, _uri); + models[tokenId] = _model; + IModel(_model).setModelId(tokenId); + + emit NewToken(tokenId, _uri, _model, msg.sender); + + return tokenId; + } + + function mint(address _to, string calldata _uri, address _model) external payable onlyOwner returns (uint256) { + while (models[nextModelId] != address(0)) { + nextModelId++; + } + uint256 tokenId = nextModelId++; + + return mint_(_to, _uri, _model, tokenId); + } + + function mintBySignature( + address _to, + string calldata _uri, + address _model, + uint256 _tokenId, + uint8 v, + bytes32 r, + bytes32 s + ) public virtual returns (uint256) { + bytes32 hash = getHashToSign(_to, _uri, _model, _tokenId); + + address signer = ECDSAUpgradeable.recover(hash, v, r, s); + if (signer != owner()) revert InvalidSignature(); + if (models[_tokenId] != address(0)) revert AlreadyMinted(); + + return mint_(_to, _uri, _model, _tokenId); + } + + function getHashToSign( + address _to, + string calldata _uri, + address _model, + uint256 _tokenId + ) public view virtual returns(bytes32) { + bytes32 structHash = keccak256(abi.encode(_to, _uri, _model, _tokenId)); + + return _hashTypedDataV4(structHash); + } + + function withdraw(address _to, uint _value) external onlyOwner { + (bool success, ) = _to.call{value: _value}(""); + if (!success) revert FailedTransfer(); + } + + function updateTokenURI(uint256 _tokenId, string calldata _uri) external onlyOwner { + _setTokenURI(_tokenId, _uri); + emit TokenURIUpdate(_tokenId, _uri); + } + + function updateTokenModel(uint256 _tokenId, address _model) external onlyOwner { + require(_model != address(0), "invalid token model"); + + models[_tokenId] = _model; + emit TokenModelUpdate(_tokenId, _model); + } + + function modelAddressOf(uint256 _tokenId) external view returns (address) { + return models[_tokenId]; + } + + function royaltyInfo(uint256 _tokenId, uint256 _salePrice) external view returns (address, uint256) { + _tokenId; + return (royaltyReceiver, _salePrice * royaltyPortion / PORTION_DENOMINATOR); + } + + function tokenURI(uint256 _tokenId) + public view override ( + ERC721Upgradeable, + ERC721URIStorageUpgradeable, + IERC721MetadataUpgradeable + ) returns (string memory) { + return super.tokenURI(_tokenId); + } + + function supportsInterface(bytes4 _interfaceId) + public view override ( + ERC721Upgradeable, + ERC721EnumerableUpgradeable, + ERC721URIStorageUpgradeable, + IERC165Upgradeable + ) returns (bool) { + return _interfaceId == type(IERC2981Upgradeable).interfaceId || super.supportsInterface(_interfaceId); + } + + function _beforeTokenTransfer( + address _from, + address _to, + uint256 _tokenId, + uint256 _batchSize + ) internal override ( + ERC721Upgradeable, + ERC721EnumerableUpgradeable, + ERC721PausableUpgradeable + ) { + super._beforeTokenTransfer(_from, _to, _tokenId, _batchSize); + } + + function _burn(uint256 _tokenId) + internal override (ERC721Upgradeable, ERC721URIStorageUpgradeable) { + super._burn(_tokenId); + } +} diff --git a/contracts/ModelReg.sol b/contracts/ModelReg.sol index e50b00a..f8c0a93 100644 --- a/contracts/ModelReg.sol +++ b/contracts/ModelReg.sol @@ -23,7 +23,7 @@ contract ModelRegStorage is IModelReg { uint256[50] private __gap; } -contract ModelReg is +contract ModelReg is ModelRegStorage, Initializable, ERC721Upgradeable, @@ -75,11 +75,11 @@ IERC2981Upgradeable { __ERC721_init("Models", "MDL"); __ERC721Enumerable_init(); __ERC721URIStorage_init(); - + mintPrice = _mintPrice; evalPrice = _evalPrice; royaltyReceiver = _royaltyReceiver; - nextModelId = 1; + nextModelId = 1; } function afterUpgrade(uint256 _mintPrice, uint256 _evalPrice, address _royaltyReceiver, uint256 _nextModelId) public { @@ -107,7 +107,7 @@ IERC2981Upgradeable { IModel(_modelAddr).setModelId(modelId); } - /* @dev EIP2981 royalties implementation. + /* @dev EIP2981 royalties implementation. // EIP2981 standard royalties return. */ function royaltyInfo(uint256 _tokenId, uint256 _salePrice) external view virtual override diff --git a/contracts/OnchainModel.sol b/contracts/OnchainModel.sol index 2e8cb25..9bdeee1 100644 --- a/contracts/OnchainModel.sol +++ b/contracts/OnchainModel.sol @@ -46,7 +46,7 @@ ReentrancyGuardUpgradeable { address _implementation, uint256 _inferenceCost ) external initializer nonReentrant { - // if (!IOnchainImplementation(_implementation).isReady()) revert ModelNotReady(); + if (!IOnchainImplementation(_implementation).isReady()) revert ModelNotReady(); __Ownable_init(); __Pausable_init(); diff --git a/contracts/WorkerHub.sol b/contracts/WorkerHub.sol index adc4b38..d75aa37 100644 --- a/contracts/WorkerHub.sol +++ b/contracts/WorkerHub.sol @@ -4,60 +4,64 @@ pragma solidity ^0.8.0; import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import {PausableUpgradeable} from "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; import {ReentrancyGuardUpgradeable} from "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol"; -import {IERC721Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol"; -import {IHybridModel} from "./interfaces/IHybridModel.sol"; -import {IWorkerHub} from "./interfaces/IWorkerHub.sol"; +import {Random} from "./lib/Random.sol"; +import {Set} from "./lib/Set.sol"; +import {TransferHelper} from "./lib/TransferHelper.sol"; -abstract contract WorkerHubStorage is IWorkerHub { - mapping(address => bool) public isModel; - mapping(address => Worker) internal workers; - mapping(uint256 => Inference) internal inferences; - mapping(uint256 => UnstakeRequest) internal unstakeRequests; - - uint256 public inferenceNumber; - uint256 public unstakeRequestNumber; - uint256 public minimumStake; - - uint8 public feePercentage; - uint8 public royaltyPercentage; - uint40 public stakeLockingDuration; - - address public treasury; - address public collection; - - uint256[50] private __gap; -} +import {WorkerHubStorage} from "./storages/WorkerHubStorage.sol"; contract WorkerHub is WorkerHubStorage, OwnableUpgradeable, PausableUpgradeable, ReentrancyGuardUpgradeable { + using Random for Random.Randomizer; + using Set for Set.AddressSet; + using Set for Set.Uint256Set; + + string constant private VERSION = "v0.0.2"; + uint256 constant private PERCENTAGE_DENOMINATOR = 100_00; + uint256 constant private BLOCK_PER_YEAR = 365 days / 2; // 2s per block + + receive() external payable {} + function initialize( address _treasury, - address _collection, - uint8 _feePercentage, - uint8 _royaltyPercentage, - uint256 _minimumStake, - uint40 _stakeLockingDuration + uint16 _feePercentage, + uint256 _minerMinimumStake, + uint256 _validatorMinimumStake, + uint40 _miningTimeLimit, + uint8 _minerRequirement, + uint256 _blocksPerEpoch, + uint256 _rewardPerEpochBasedOnPerf, + uint256 _rewardPerEpoch, + uint40 _unstakeDelayTime, + uint40 _penaltyDuration, + uint16 _finePercentage ) external initializer { __Ownable_init(); __Pausable_init(); __ReentrancyGuard_init(); - if (_feePercentage + _royaltyPercentage > 100) revert ConflictedPercentage(); - treasury = _treasury; - collection = _collection; feePercentage = _feePercentage; - royaltyPercentage = _royaltyPercentage; - minimumStake = _minimumStake; - stakeLockingDuration = _stakeLockingDuration; + minerMinimumStake = _minerMinimumStake; + validatorMinimumStake = _validatorMinimumStake; + miningTimeLimit = _miningTimeLimit; + minerRequirement = _minerRequirement; + blocksPerEpoch = _blocksPerEpoch; + rewardPerEpochBasedOnPerf = _rewardPerEpochBasedOnPerf; + rewardPerEpoch = _rewardPerEpoch; + unstakeDelayTime = _unstakeDelayTime; + maximumTier = 1; + lastBlock = block.number; + penaltyDuration = _penaltyDuration; + finePercentage = _finePercentage; } function version() external pure returns (string memory) { - return "v0.0.1"; + return VERSION; } function pause() external onlyOwner whenNotPaused { @@ -68,352 +72,687 @@ ReentrancyGuardUpgradeable { _unpause(); } - function updateTreasury(address _treasury) external onlyOwner { - treasury = _treasury; - emit TreasuryUpdate(_treasury); + function updateMiningTimeLimit(uint40 _miningTimeLimit) external onlyOwner { + miningTimeLimit = _miningTimeLimit; + emit MiningTimeLimitUpdate(_miningTimeLimit); } - function updateCollection(address _collection) external onlyOwner { - collection = _collection; - emit CollectionUpdate(_collection); + function getModelAddresses() external view returns (address[] memory) { + return modelAddresses.values; } - function updateFeePercentage(uint8 _feePercentage) external onlyOwner { - feePercentage = _feePercentage; - emit FeePercentageUpdate(_feePercentage); + function getMiningAssignments() external view returns (AssignmentInfo[] memory) { + uint256[] memory assignmentIds = assignmentsByMiner[msg.sender].values; + uint256 assignmentNumber = assignmentIds.length; + + uint256 counter = 0; + for (uint256 i = 0; i < assignmentNumber; ++i) + if (isAssignmentPending(assignmentIds[i])) counter++; + + AssignmentInfo[] memory result = new AssignmentInfo[](counter); + counter = 0; + + for (uint256 i = 0; i < assignmentNumber; ++i) + if (isAssignmentPending(assignmentIds[i])) { + Assignment storage assignment = assignments[assignmentIds[i]]; + Inference storage inference = inferences[assignment.inferenceId]; + result[counter++] = AssignmentInfo( + assignmentIds[i], + assignment.inferenceId, + inference.value, + inference.input, + inference.modelAddress, + inference.creator, + inference.expiredAt + ); + } + + return result; + } + + function getMintingAssignmentsOfInference(uint256 _inferenceId) external view returns (AssignmentInfo[] memory) { + uint256[] memory assignmentIds = assignmentsByInference[_inferenceId].values; + uint256 assignmentNumber = assignmentIds.length; + + AssignmentInfo[] memory result = new AssignmentInfo[](assignmentNumber); + for (uint256 i = 0; i < assignmentNumber; ++i) { + Assignment storage assignment = assignments[assignmentIds[i]]; + Inference storage inference = inferences[assignment.inferenceId]; + result[i] = AssignmentInfo( + assignmentIds[i], + assignment.inferenceId, + inference.value, + inference.input, + inference.modelAddress, + inference.creator, + inference.expiredAt + ); + } + + return result; } - function updateRoyaltyPercentage(uint8 _royaltyPercentage) external onlyOwner { - royaltyPercentage = _royaltyPercentage; - emit RoyaltyPercentageUpdate(_royaltyPercentage); + function getNOMiner() external view returns (uint) { + return minerAddresses.values.length; } - function updateMinimumStake(uint256 _minimumStake) external onlyOwner { - minimumStake = _minimumStake; - emit MinimumStakeUpdate(_minimumStake); + function getMinerAddresses() external view returns (address[] memory) { + return minerAddresses.values; } - function updateStakeLockingDuration(uint40 _stakeLockingDuration) external onlyOwner { - stakeLockingDuration = _stakeLockingDuration; - emit StakeLockingDurationUpdate(_stakeLockingDuration); + function getMinerAddressesOfModel(address _model) external view returns (address[] memory) { + return minerAddressesByModel[_model].values; } - function registerModel(address _model) external onlyOwner { - if (isModel[_model]) revert AlreadyRegistered(); + function getValidatorAddressesOfModel(address _model) external view returns (address[] memory) { + return validatorAddressesByModel[_model].values; + } + + + function getMiners() external view returns (WorkerInfo[] memory) { + address[] memory addresses = minerAddresses.values; + uint256 minerNumber = addresses.length; + WorkerInfo[] memory result = new WorkerInfo[](minerNumber); + for (uint256 i = 0; i < minerNumber; ++i) { + Worker memory miner = miners[addresses[i]]; + result[i] = WorkerInfo( + addresses[i], + miner.stake, + miner.commitment, + miner.modelAddress, + miner.lastClaimedEpoch, + miner.activeTime, + miner.tier + ); + } + return result; + } - isModel[_model] = true; + function getValidatorAddresses() external view returns (address[] memory) { + return validatorAddresses.values; + } - emit ModelRegistration(_model); + function getValidators() external view returns (WorkerInfo[] memory) { + address[] memory addresses = validatorAddresses.values; + uint256 validatorNumber = addresses.length; + WorkerInfo[] memory result = new WorkerInfo[](validatorNumber); + for (uint256 i = 0; i < validatorNumber; ++i) { + Worker memory validator = validators[addresses[i]]; + result[i] = WorkerInfo( + addresses[i], + validator.stake, + validator.commitment, + validator.modelAddress, + validator.lastClaimedEpoch, + validator.activeTime, + validator.tier + ); + } + return result; + } + + function isAssignmentPending(uint256 _assignmentId) public view returns (bool) { + return assignments[_assignmentId].output.length == 0 + && block.timestamp < inferences[assignments[_assignmentId].inferenceId].expiredAt; + } + + function getInferences(uint256[] calldata _inferenceIds) external view returns (InferenceInfo[] memory) { + uint256 inferenceNumber = _inferenceIds.length; + InferenceInfo[] memory result = new InferenceInfo[](inferenceNumber); + for (uint256 i = 0; i < inferenceNumber; ++i) { + Inference storage inference = inferences[_inferenceIds[i]]; + result[i] = InferenceInfo( + _inferenceIds[i], + inference.input, + inference.status == InferenceStatus.Solved + ? assignments[inference.assignments[inference.firstSubmissionId]].output + : bytes(""), + inference.value, + inference.disputingAddress, + inference.modelAddress, + inference.expiredAt, + inference.status, + inference.creator + ); + } + return result; + } + + function registerModel(address _model, uint16 _tier, uint256 _minimumFee) external onlyOwner { + _updateEpoch(); + + if (_tier == 0) revert InvalidTier(); + + Model storage model = models[_model]; + if (model.tier != 0) revert AlreadyRegistered(); + + model.minimumFee = _minimumFee; + model.tier = _tier; + modelAddresses.insert(_model); + + emit ModelRegistration(_model, _tier, _minimumFee); } function unregisterModel(address _model) external onlyOwner { - if (!isModel[_model]) revert NotRegistered(); + _updateEpoch(); - isModel[_model] = false; + Model storage model = models[_model]; + if (model.tier == 0) revert NotRegistered(); + + model.tier = 0; + modelAddresses.erase(_model); emit ModelUnregistration(_model); } - function authorizeWorker(address _worker) external onlyOwner { - workers[_worker].isAuthorized = true; + function updateModelTier(address _model, uint32 _tier) external onlyOwner { + _updateEpoch(); + + if (_tier == 0) revert InvalidTier(); + + Model storage model = models[_model]; + if (model.tier == 0) revert InvalidModel(); - emit WorkerAuthorization(_worker); + model.tier = _tier; + + emit ModelTierUpdate(_model, _tier); } - function unauthorizeWorker(address _worker) external onlyOwner { - workers[_worker].isAuthorized = false; + function updateModelMinimumFee(address _model, uint256 _minimumFee) external onlyOwner { + _updateEpoch(); + + Model storage model = models[_model]; + if (model.tier == 0) revert InvalidModel(); - emit WorkerUnauthorization(_worker); + model.minimumFee = _minimumFee; + + emit ModelMinimumFeeUpdate(_model, _minimumFee); } - function getInference(uint256 _inferenceId) external view returns (Inference memory) { - if (_inferenceId == 0 || _inferenceId > inferenceNumber) revert InvalidInferenceId(); - return inferences[_inferenceId]; + function registerMiner(uint16 tier) external payable whenNotPaused { + _updateEpoch(); + + if (tier == 0 || tier > maximumTier) revert InvalidTier(); + if (msg.value < minerMinimumStake) revert StakeTooLow(); + + Worker storage miner = miners[msg.sender]; + if (miner.tier != 0) revert AlreadyRegistered(); + + miner.stake = msg.value; + miner.tier = tier; + + address modelAddress = modelAddresses.values[randomizer.randomUint256() % modelAddresses.size()]; + miner.modelAddress = modelAddress; + + emit MinerRegistration(msg.sender, tier, msg.value); } - function getInferences() external view returns (Inference[] memory) { - Inference[] memory result = new Inference[](inferenceNumber); - for (uint256 i = 1; i <= inferenceNumber; ++i) { - result[i] = inferences[i]; - } - return result; + function joinForMinting() external whenNotPaused { + _updateEpoch(); + + Worker storage miner = miners[msg.sender]; + if (miner.tier == 0) revert NotRegistered(); + if (miner.stake < minerMinimumStake) revert StakeTooLow(); + if (block.timestamp < miner.activeTime) revert MinerInDeactivationTime(); + + address modelAddress = miner.modelAddress; + minerAddressesByModel[modelAddress].insert(msg.sender); + minerAddresses.insert(msg.sender); + miner.lastClaimedEpoch = currentEpoch; + boost[msg.sender].minerTimestamp = uint40(block.timestamp); + + emit MinerJoin(msg.sender); } - function getUnresolvedInferences() external view returns (UnresolvedInference[] memory) { - uint256 counter = 0; - for (uint256 i = 1; i <= inferenceNumber; ++i) { - if (!inferences[i].isResolved) { - counter++; - } - } - UnresolvedInference[] memory result = new UnresolvedInference[](counter); - counter = 0; - for (uint256 i = 1; i <= inferenceNumber; ++i) { - if (!inferences[i].isResolved) { - Inference memory inference = inferences[i]; - result[counter++] = UnresolvedInference( - i, - inference.value, - inference.data, - inference.model, - inference.creator - ); - } + function unregisterMiner() external nonReentrant { + _updateEpoch(); + + Worker storage miner = miners[msg.sender]; + if (miner.tier == 0) revert NotRegistered(); + + miner.tier = 0; + + uint stakeAmount = miner.stake; + miner.stake = 0; + miner.commitment = 0; + + if (minerAddresses.hasValue(msg.sender)) { + _claimReward(msg.sender, false); + // reset boost + boost[msg.sender].reserved1 = 0; + boost[msg.sender].minerTimestamp = uint40(block.timestamp); + + minerAddresses.erase(msg.sender); + minerAddressesByModel[miner.modelAddress].erase(msg.sender); } + miner.modelAddress = address(0); - return result; + uint currentUnstake = minerUnstakeRequests[msg.sender].stake; + minerUnstakeRequests[msg.sender] = UnstakeRequest( + stakeAmount + currentUnstake, + uint40(block.timestamp + unstakeDelayTime) + ); + + emit MinerUnregistration(msg.sender); } - function getIndividualInferences(address _account) external view returns (Inference[] memory) { - uint256 counter = 0; - for (uint256 i = 1; i <= inferenceNumber; ++i) { - if (inferences[i].creator == _account) { - counter++; - } + function increaseMinerStake() external payable whenNotPaused { + _updateEpoch(); + + Worker storage miner = miners[msg.sender]; + if (miner.tier == 0) revert NotRegistered(); + + miner.stake += msg.value; + + emit MinerExtraStake(msg.sender, msg.value); + } + + function unstakeForMiner() external { + _updateEpoch(); + + UnstakeRequest storage unstakeRequest = minerUnstakeRequests[msg.sender]; + if (block.timestamp < unstakeRequest.unlockAt) revert StillBeingLocked(); + + uint256 stake = unstakeRequest.stake; + if (stake == 0) revert NullStake(); + unstakeRequest.stake = 0; + TransferHelper.safeTransferNative(msg.sender, stake); + + emit MinerUnstake(msg.sender, stake); + } + + function restakeForMiner(uint16 tier) external { + _updateEpoch(); + + UnstakeRequest storage unstakeRequest = minerUnstakeRequests[msg.sender]; + if (unstakeRequest.stake == 0) revert ZeroValue(); + uint unstakeAmount = unstakeRequest.stake; + unstakeRequest.stake = 0; + + Worker storage miner = miners[msg.sender]; + miner.stake += unstakeAmount; + if (miner.tier == 0) { + if (tier == 0 || tier > maximumTier) revert InvalidTier(); + miner.tier = tier; } - Inference[] memory result = new Inference[](counter); - counter = 0; - for (uint256 i = 1; i <= inferenceNumber; ++i) { - if (inferences[i].creator == _account) { - result[counter++] = inferences[i]; - } + if (miner.modelAddress == address(0)) { + address modelAddress = modelAddresses.values[randomizer.randomUint256() % modelAddresses.size()]; + miner.modelAddress = modelAddress; } - return result; + emit Restake(msg.sender, unstakeAmount, miner.modelAddress); } - function getIndividualUnresolvedInferences(address _account) external view returns (UnresolvedInference[] memory) { - uint256 counter = 0; - for (uint256 i = 1; i <= inferenceNumber; ++i) { - if (!inferences[i].isResolved && inferences[i].creator == _account) { - counter++; - } - } + function registerValidator(uint16 tier) external payable whenNotPaused { + _updateEpoch(); - UnresolvedInference[] memory result = new UnresolvedInference[](counter); - counter = 0; - for (uint256 i = 1; i <= inferenceNumber; ++i) { - if (!inferences[i].isResolved && inferences[i].creator == _account) { - Inference memory inference = inferences[i]; - result[counter++] = UnresolvedInference( - i, - inference.value, - inference.data, - inference.model, - inference.creator - ); - } - } + if (tier == 0 || tier > maximumTier) revert InvalidTier(); + if (msg.value < validatorMinimumStake) revert StakeTooLow(); - return result; + Worker storage validator = validators[msg.sender]; + if (validator.tier != 0) revert AlreadyRegistered(); + + validator.stake = msg.value; + validator.tier = tier; + validator.tier = tier; + validator.lastClaimedEpoch = currentEpoch; + + address modelAddress = modelAddresses.values[randomizer.randomUint256() % modelAddresses.size()]; + validator.modelAddress = modelAddress; + + emit ValidatorRegistration(msg.sender, tier, msg.value); } - function getModelInferences(address _model) external view returns (Inference[] memory) { - uint256 counter = 0; - for (uint256 i = 1; i <= inferenceNumber; ++i) { - if (inferences[i].model == _model) { - counter++; - } - } + function joinForValidating() external whenNotPaused { + _updateEpoch(); - Inference[] memory result = new Inference[](counter); - counter = 0; - for (uint256 i = 1; i <= inferenceNumber; ++i) { - if (inferences[i].model == _model) { - result[counter++] = inferences[i]; - } + Worker storage validator = miners[msg.sender]; + if (validator.tier == 0) revert NotRegistered(); + if (block.timestamp < validator.activeTime) revert ValidatorInDeactivationTime(); + + address modelAddress = validator.modelAddress; + validatorAddressesByModel[modelAddress].insert(msg.sender); + + validatorAddresses.insert(msg.sender); + + emit ValidatorJoin(msg.sender); + } + + function unregisterValidator() external nonReentrant { + _updateEpoch(); + + Worker storage validator = validators[msg.sender]; + if (validator.tier == 0) revert NotRegistered(); + + validator.tier = 0; + + uint stakeAmount = validator.stake; + validator.stake = 0; + validator.commitment = 0; + + validatorAddresses.erase(msg.sender); + validatorAddressesByModel[validator.modelAddress].erase(msg.sender); + validator.modelAddress = address(0); + + uint currentUnstake = validatorUnstakeRequests[msg.sender].stake; + validatorUnstakeRequests[msg.sender] = UnstakeRequest( + stakeAmount + currentUnstake, + uint40(block.timestamp + unstakeDelayTime) + ); + + emit ValidatorUnregistration(msg.sender); + } + + function increaseValidatorStake() external payable whenNotPaused { + _updateEpoch(); + + Worker storage validator = validators[msg.sender]; + if (validator.tier == 0) revert NotRegistered(); + + validator.stake += msg.value; + + emit ValidatorExtraStake(msg.sender, msg.value); + } + + function unstakeForValidator() external { + _updateEpoch(); + + UnstakeRequest storage unstakeRequest = validatorUnstakeRequests[msg.sender]; + if (block.timestamp < unstakeRequest.unlockAt) revert StillBeingLocked(); + + uint256 stake = unstakeRequest.stake; + if (stake == 0) revert NullStake(); + unstakeRequest.stake = 0; + TransferHelper.safeTransferNative(msg.sender, stake); + + emit ValidatorUnstake(msg.sender, stake); + } + + function infer(bytes calldata _input, address _creator) external payable whenNotPaused returns (uint256) { + Model storage model = models[msg.sender]; + if (model.tier == 0) revert Unauthorized(); + if (msg.value < model.minimumFee) revert FeeTooLow(); + uint256 inferenceId = ++inferenceNumber; + Inference storage inference = inferences[inferenceId]; + + uint256 value = msg.value; + + inference.input = _input; + inference.value = value; + inference.creator = _creator; + inference.modelAddress = msg.sender; + + emit NewInference(inferenceId, msg.sender, _creator, value); + + _assignMiners(inferenceId); + + return inferenceId; + } + + function topUpInfer(uint256 _inferenceId) external payable whenNotPaused { + if (msg.value == 0) revert ZeroValue(); + + Inference storage inference = inferences[_inferenceId]; + if (inference.status != InferenceStatus.Solving) revert InferMustBeSolvingState(); + inference.value += msg.value; + + emit TopUpInfer(_inferenceId, inference.creator, inference.value); + } + + function _assignMiners(uint256 _inferenceId) private { + uint40 expiredAt = uint40(block.timestamp + miningTimeLimit); + inferences[_inferenceId].expiredAt = expiredAt; + inferences[_inferenceId].status = InferenceStatus.Solving; + + address model = inferences[_inferenceId].modelAddress; + if (minerAddressesByModel[model].size() < minerRequirement) revert NotEnoughMiners(); + + Set.AddressSet storage miners = minerAddressesByModel[model]; + uint256 n = minerRequirement; + address[] memory selectedMiners = new address[](n); + + for (uint256 i = 0; i < n; ++i) { + address miner = miners.values[randomizer.randomUint256() % miners.size()]; + miners.erase(miner); + uint256 assignmentId = ++assignmentNumber; + assignments[assignmentId].inferenceId = _inferenceId; + assignments[assignmentId].worker = miner; + selectedMiners[i] = miner; + assignmentsByMiner[miner].insert(assignmentId); + assignmentsByInference[_inferenceId].insert(assignmentId); + emit NewAssignment(assignmentId, _inferenceId, miner, expiredAt); } - return result; + for (uint256 i = 0; i < n; ++i) miners.insert(selectedMiners[i]); } - function getModelUnresolvedInferences(address _model) external view returns (UnresolvedInference[] memory) { - uint256 counter = 0; - for (uint256 i = 1; i <= inferenceNumber; ++i) { - if (!inferences[i].isResolved && inferences[i].model == _model) { - counter++; + // this internal function update new epoch + function _updateEpoch() internal { + if (blocksPerEpoch > 0) { + uint256 epochPassed = (block.number - lastBlock) / blocksPerEpoch; + if (epochPassed > 0) { + lastBlock += blocksPerEpoch * epochPassed; + // reward for this epoch + // rewardPerEpoch (reward one year for 1 miner) + // rewardPerEpoch * total miner * blocker per epoch / blocks per year + uint256 rewardInCurrentEpoch = rewardPerEpoch * minerAddresses.size() * blocksPerEpoch / BLOCK_PER_YEAR; + + for (; epochPassed > 0; epochPassed--) { + rewardInEpoch[currentEpoch].totalMiner = minerAddresses.size(); + rewardInEpoch[currentEpoch].epochReward = rewardInCurrentEpoch; + currentEpoch++; + } } + } else { + lastBlock = block.number; } + } - UnresolvedInference[] memory result = new UnresolvedInference[](counter); - counter = 0; - for (uint256 i = 1; i <= inferenceNumber; ++i) { - if (!inferences[i].isResolved && inferences[i].model == _model) { - Inference memory inference = inferences[i]; - result[counter++] = UnresolvedInference( - i, - inference.value, - inference.data, - inference.model, - inference.creator - ); + + function submitSolution(uint256 _assigmentId, bytes calldata _data) public virtual whenNotPaused { + _updateEpoch(); + address _msgSender = msg.sender; + + // Check whether miner is available (the miner had previously joined). The inactive miner is not allowed to submit solution. + if (!minerAddresses.hasValue(msg.sender)) revert InvalidMiner(); + + address modelAddrOfMiner = miners[msg.sender].modelAddress; + if (!minerAddressesByModel[modelAddrOfMiner].hasValue(msg.sender)) revert InvalidMiner(); + + Assignment memory clonedAssignments = assignments[_assigmentId]; + + if (_msgSender != clonedAssignments.worker) revert Unauthorized(); + if (clonedAssignments.output.length != 0) revert AlreadySubmitted(); + + Inference memory clonedInference = inferences[clonedAssignments.inferenceId]; + + if (clonedInference.status != InferenceStatus.Solving && + clonedInference.status != InferenceStatus.Solved) + { + revert InvalidInferenceStatus(); + } + + if (clonedInference.expiredAt < block.timestamp) { + if (clonedInference.assignments.length == 0) { + resolveInference(clonedAssignments.inferenceId); + return; + } else { + revert MiningSessionEnded(); } } - return result; + Inference storage inference = inferences[clonedAssignments.inferenceId]; + + assignments[_assigmentId].output = _data; //Record the solution + inference.status = InferenceStatus.Solved; + inference.assignments.push(_assigmentId); + + if (inference.assignments.length == 1) { + uint256 fee = clonedInference.value * feePercentage / PERCENTAGE_DENOMINATOR; + uint256 value = clonedInference.value - fee; + TransferHelper.safeTransferNative(treasury, fee); + TransferHelper.safeTransferNative(_msgSender, value); + + emit TransferFee(_msgSender, value, treasury, fee); + emit InferenceStatusUpdate(clonedAssignments.inferenceId, InferenceStatus.Solved); + } + + emit SolutionSubmission(_msgSender, _assigmentId); } - function getWorker(address _worker) external view returns (Worker memory) { - return workers[_worker]; + function _handleDisputeSuccess(uint256 _inferId) internal { + // TODO } - function getUnstakeRequest(uint256 _requestId) external view returns (UnstakeRequest memory) { - return unstakeRequests[_requestId]; + + function disputeInfer(uint256 _assignmentId) public virtual { + // TODO } - function getIndividualUnstakeRequests(address _account) external view returns (UnstakeRequest[] memory) { - uint256 counter = 0; - for (uint256 i = 1; i <= unstakeRequestNumber; ++i) { - if (unstakeRequests[i].worker == _account) { - counter++; - } - } + function slashMiner(address _miner, bool _isFined) public virtual onlyOwner { + _updateEpoch(); - UnstakeRequest[] memory result = new UnstakeRequest[](counter); - counter = 0; - for (uint256 i = 1; i <= unstakeRequestNumber; ++i) { - if (unstakeRequests[i].worker == _account) { - result[counter++] = unstakeRequests[i]; - } - } + if (_miner == address(0)) revert InvalidMiner(); - return result; + _slashMiner(_miner, _isFined); } - function getIndividualWithdrawableUnstakeRequests(address _account) external view returns (UnstakeRequest[] memory) { - uint256 counter = 0; - for (uint256 i = 1; i <= unstakeRequestNumber; ++i) { - if (unstakeRequests[i].worker == _account - && unstakeRequests[i].unlockedAt <= block.timestamp - && !unstakeRequests[i].isWithdrawn) { - counter++; - } + function _slashMiner(address _miner, bool _isFined) internal { + Worker storage miner = miners[_miner]; + + if (!minerAddresses.hasValue(_miner)) revert InvalidMiner(); + // update reward + _claimReward(_miner, false); + boost[_miner].reserved1 += uint48(block.timestamp) - uint48(boost[_miner].minerTimestamp == 0 ? 1716046859 : boost[_miner].minerTimestamp); + boost[_miner].minerTimestamp = uint40(block.timestamp); + address modelAddress = miner.modelAddress; + + // Remove miner from available miner + if (minerAddressesByModel[modelAddress].hasValue(_miner)) { + minerAddressesByModel[modelAddress].erase(_miner); + minerAddresses.erase(_miner); } - UnstakeRequest[] memory result = new UnstakeRequest[](counter); - counter = 0; - for (uint256 i = 1; i <= unstakeRequestNumber; ++i) { - if (unstakeRequests[i].worker == _account - && unstakeRequests[i].unlockedAt <= block.timestamp - && !unstakeRequests[i].isWithdrawn) { - result[counter++] = unstakeRequests[i]; - } + // Set the time miner can join again + miner.activeTime = uint40(block.timestamp + penaltyDuration); + + if (_isFined) { + uint256 fine = miner.stake * finePercentage / PERCENTAGE_DENOMINATOR; // Fine = stake * 5% + miner.stake -= fine; + + // reset boost + boost[_miner].reserved1 = 0; + TransferHelper.safeTransferNative(treasury, fine); + + emit FraudulentMinerPenalized(_miner, modelAddress, treasury, fine); + return; } - return result; + emit MinerDeactivated(_miner, modelAddress, miner.activeTime); } - function stake() external payable whenNotPaused { - if (!workers[msg.sender].isAuthorized) revert Unauthorized(); + function setFinePercentage(uint16 _finePercentage) public virtual onlyOwner { + _updateEpoch(); - workers[msg.sender].stakedValue += msg.value; + emit FinePercentageUpdated(finePercentage, _finePercentage); - emit Stake(msg.sender, msg.value); + finePercentage = _finePercentage; } - function requestUnstake(uint256 _value) external whenNotPaused { - uint256 stakedValue = workers[msg.sender].stakedValue; - if (_value > stakedValue) revert InsufficientFunds(); + function setPenaltyDuration(uint40 _penaltyDuration) public virtual onlyOwner { + _updateEpoch(); - unchecked { - workers[msg.sender].stakedValue = stakedValue - _value; + emit PenaltyDurationUpdated(penaltyDuration, _penaltyDuration); - uint256 requestId = ++unstakeRequestNumber; + penaltyDuration = _penaltyDuration; + } - unstakeRequests[unstakeRequestNumber] = UnstakeRequest( - _value, - msg.sender, - uint40(block.timestamp) + stakeLockingDuration, - false - ); + function resolveInference(uint256 _inferenceId) public virtual { + _updateEpoch(); - emit NewUnstakeRequest( - requestId, - msg.sender, - _value - ); + Inference storage inference = inferences[_inferenceId]; + if (inference.status == InferenceStatus.Solving && block.timestamp > inference.expiredAt) { + inference.status = InferenceStatus.Killed; + TransferHelper.safeTransferNative(inference.creator, inference.value); + emit InferenceStatusUpdate(_inferenceId, InferenceStatus.Killed); } } - function unstake(uint256[] calldata _requestIds) external nonReentrant whenNotPaused { - uint256 totalStake; + function _claimReward(address _miner, bool _isTransfer) internal whenNotPaused { + uint256 rewardAmount = rewardToClaim(_miner); + miners[_miner].lastClaimedEpoch = currentEpoch; + if (rewardAmount > 0 && _isTransfer) { + minerRewards[_miner] = 0; + TransferHelper.safeTransferNative(_miner, rewardAmount); - unchecked { - for (uint256 i = 0; i < _requestIds.length; ++i) { - UnstakeRequest storage unstakeRequest = unstakeRequests[_requestIds[i]]; - if (unstakeRequest.worker != msg.sender) revert Unauthorized(); - if (unstakeRequest.unlockedAt > block.timestamp) revert StakeIsNotUnlockedYet(); - if (unstakeRequest.isWithdrawn) revert RequestIsAlreadyWithdrawn(); - totalStake += unstakeRequest.value; - unstakeRequest.isWithdrawn = true; - } + emit RewardClaim(_miner, rewardAmount); + } else if (rewardAmount > 0) { + minerRewards[_miner] = rewardAmount; } + } + + // miner claim reward + function claimReward(address _miner) public virtual nonReentrant { + _claimReward(_miner, true); + } - (bool success, ) = msg.sender.call{value: totalStake}(""); - if (!success) revert FailedTransfer(); + // @dev admin functions + function setNewRewardInEpoch(uint256 _newRewardAmount) public virtual onlyOwner { + _updateEpoch(); + emit RewardPerEpoch(rewardPerEpoch, _newRewardAmount); - emit Unstake(msg.sender, _requestIds); + rewardPerEpoch = _newRewardAmount; } - function infer(bytes calldata _data, uint256 _modelId, address _creator) external payable whenNotPaused returns (uint256) { - if (!isModel[msg.sender]) revert Unauthorized(); + function setBlocksPerEpoch(uint256 _blocks) public virtual onlyOwner { + _updateEpoch(); + if (_blocks == 0) revert InvalidBlockValue(); - uint256 inferenceId = ++inferenceNumber; - inferences[inferenceId] = Inference( - msg.value, - _modelId, - _data, - '', - false, - msg.sender, - _creator, - address(0) - ); + emit BlocksPerEpoch(blocksPerEpoch, _blocks); - emit NewInference(inferenceId, _creator); + blocksPerEpoch = _blocks; + } - return inferenceId; + function setUnstakDelayTime(uint40 _newUnstakeDelayTime) public virtual onlyOwner { + _updateEpoch(); + + require(_newUnstakeDelayTime != 0, "invalid unstake delay time"); + + emit UnstakeDelayTime(unstakeDelayTime, _newUnstakeDelayTime); + + unstakeDelayTime = _newUnstakeDelayTime; } - function submitResult(uint256 _inferenceId, bytes calldata _result) external nonReentrant whenNotPaused { - if (_inferenceId == 0 || _inferenceId > inferenceNumber) revert InvalidInferenceId(); - if (feePercentage + royaltyPercentage > 100) revert ConflictedPercentage(); + // sum reward of an miner since last claimed epoch + function rewardToClaim(address _miner) public virtual returns(uint256) { + _updateEpoch(); + + uint256 totalReward; + uint256 lastEpoch = currentEpoch; + if (!minerAddresses.hasValue(_miner) || lastEpoch <= miners[_miner].lastClaimedEpoch) { + totalReward = 0; + } else { + uint256 lastClaimed = uint256(miners[_miner].lastClaimedEpoch); + uint256 epochReward = rewardPerEpoch * blocksPerEpoch / BLOCK_PER_YEAR; // reward per miner in 1 epoch + totalReward += (lastEpoch - lastClaimed) * epochReward * multiplier(_miner) / PERCENTAGE_DENOMINATOR; + } - Inference storage inference = inferences[_inferenceId]; - if (inference.isResolved) revert InferenceIsAlreadyResolved(); - - Worker memory worker = workers[msg.sender]; - if (!worker.isAuthorized) revert Unauthorized(); - if (worker.stakedValue < minimumStake) revert NotEnoughStake(); - - inference.result = _result; - inference.isResolved = true; - inference.worker = msg.sender; - - unchecked { - uint256 value = inference.value; - uint256 fee = value * feePercentage / 100; - uint256 reward = value - fee; - bool success; - (success, ) = treasury.call{value: fee}(""); - if (!success) revert FailedTransfer(); - - if (collection != address(0)) { - uint256 modelIdentifier = IHybridModel(inference.model).identifier(); - if (modelIdentifier != 0) { - address modelOwner = IERC721Upgradeable(collection).ownerOf(modelIdentifier); - uint256 royalty = value * royaltyPercentage / 100; - reward -= royalty; - (success, ) = modelOwner.call{value: royalty}(""); - if (!success) revert FailedTransfer(); - } - } + return totalReward + minerRewards[_miner]; + } - (success, ) = msg.sender.call{value: reward}(""); - if (!success) revert FailedTransfer(); + function multiplier(address _miner) public view returns(uint256) { + uint256 minerLastTimestamp; - emit ResultSubmission(_inferenceId, msg.sender); + if (minerAddresses.hasValue(_miner) && boost[_miner].minerTimestamp == 0) { + minerLastTimestamp = 1716046859; + } else if (!minerAddresses.hasValue(_miner)) { + minerLastTimestamp = block.timestamp; + } else { + minerLastTimestamp = boost[_miner].minerTimestamp; } + uint256 multiplierRes = (boost[_miner].reserved1 + block.timestamp - minerLastTimestamp) / 30 days; + + return PERCENTAGE_DENOMINATOR + 500 * (multiplierRes >= 12 ? 12 : multiplierRes); } } diff --git a/contracts/interfaces/IHybridModel.sol b/contracts/interfaces/IHybridModel.sol index 84ee282..305b3d5 100644 --- a/contracts/interfaces/IHybridModel.sol +++ b/contracts/interfaces/IHybridModel.sol @@ -7,19 +7,16 @@ interface IHybridModel is IModel { event WorkerHubUpdate(address newAddress); event IdentifierUpdate(uint256 newValue); - event InferenceCostUpdate(uint256 newValue); event NameUpdate(string newValue); - event UrlUpdate(string newValue); + event MetadataUpdate(string newValue); - error InsufficientFunds(); error ModelIdAlreadySet(); function version() external pure returns (string memory version); function identifier() external view returns (uint256 identifier); - function inferenceCost() external view returns (uint256 inferenceCost); + function metadata() external view returns (string memory metadata); function name() external view returns (string memory name); - function url() external view returns (string memory url); function infer(bytes calldata _data) external payable returns (uint256 referenceId); } diff --git a/contracts/interfaces/IInferable.sol b/contracts/interfaces/IInferable.sol new file mode 100644 index 0000000..ba602f5 --- /dev/null +++ b/contracts/interfaces/IInferable.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +interface IInferable { + function infer(bytes calldata data, address creator) external payable returns (uint256 inferenceId); +} diff --git a/contracts/interfaces/IModelCollection.sol b/contracts/interfaces/IModelCollection.sol new file mode 100644 index 0000000..322f930 --- /dev/null +++ b/contracts/interfaces/IModelCollection.sol @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +import {IERC2981Upgradeable} from "@openzeppelin/contracts-upgradeable/interfaces/IERC2981Upgradeable.sol"; +import {IERC721Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol"; +import {IERC721EnumerableUpgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/IERC721EnumerableUpgradeable.sol"; +import {IERC721MetadataUpgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/IERC721MetadataUpgradeable.sol"; + +import {IInferable} from "./IInferable.sol"; + +interface IModelCollection is +IERC721Upgradeable, +IERC721MetadataUpgradeable, +IERC721EnumerableUpgradeable, +IERC2981Upgradeable { + event MintPriceUpdate(uint256 newValue); + event RoyaltyPortionUpdate(uint16 newValue); + event RoyaltyReceiverUpdate(address newAddress); + + event NewToken( + uint256 indexed tokenId, + string uri, + address model, + address indexed minter + ); + event TokenURIUpdate(uint256 indexed tokenId, string uri); + event TokenModelUpdate(uint256 indexed tokenId, address model); + + error AlreadyMinted(); + error InsufficientFunds(); + error InvalidModel(); + error InvalidSignature(); + error FailedTransfer(); + + function version() external pure returns (string memory version); + function nextModelId() external view returns (uint256 nextModelId); + function mintPrice() external view returns (uint256 mintPrice); + function royaltyReceiver() external view returns (address royaltyReceiver); + function royaltyPortion() external view returns (uint16 royaltyPortion); + + function mint(address to, string calldata uri, address model) external payable returns (uint256 tokenId); +} diff --git a/contracts/interfaces/IWorkerHub.sol b/contracts/interfaces/IWorkerHub.sol index 230318c..9748bed 100644 --- a/contracts/interfaces/IWorkerHub.sol +++ b/contracts/interfaces/IWorkerHub.sol @@ -1,109 +1,199 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; -interface IWorkerHub { - struct Inference { - uint256 value; - uint256 modelId; - bytes data; - bytes result; - bool isResolved; - address model; - address creator; - address worker; +import {IInferable} from "./IInferable.sol"; + +interface IWorkerHub is IInferable { + enum InferenceStatus { + Nil, + Solving, + Disputing, + Solved, + Killed + } + + struct MinerEpochState { + uint256 perfReward; + uint256 epochReward; + uint256 totalTaskCompleted; + uint256 totalMiner; + } + + struct Model { + uint256 minimumFee; + uint32 tier; } struct Worker { - uint256 stakedValue; - bool isAuthorized; + uint256 stake; + uint256 commitment; + address modelAddress; + uint40 lastClaimedEpoch; + uint40 activeTime; + uint16 tier; } - struct UnresolvedInference { - uint256 requestId; - uint256 value; - bytes data; - address model; - address creator; + struct WorkerInfo { + address workerAddress; + uint256 stake; + uint256 commitment; + address modelAddress; + uint40 lastClaimedEpoch; + uint40 activeTime; + uint16 tier; } - struct UnstakeRequest { - uint256 value; + struct Assignment { + uint256 inferenceId; + bytes output; address worker; - uint40 unlockedAt; - bool isWithdrawn; + uint8 disapprovalCount; } - event CollectionUpdate(address newAddress); - event TreasuryUpdate(address newAddress); + struct AssignmentInfo { + uint256 assignmentId; + uint256 inferenceId; + uint256 value; + bytes input; + address modelAddress; + address creator; + uint40 expiredAt; + } - event FeePercentageUpdate(uint8 newValue); - event MinimumStakeUpdate(uint256 newValue); - event RoyaltyPercentageUpdate(uint8 newValue); - event StakeLockingDurationUpdate(uint40 newValue); + struct Inference { + uint256[] assignments; + bytes input; + uint256 value; + address disputingAddress; + address modelAddress; + uint40 expiredAt; + uint8 firstSubmissionId; + InferenceStatus status; + address creator; + } - event ModelRegistration(address model); - event ModelUnregistration(address model); + struct InferenceInfo { + uint256 inferenceId; + bytes input; + bytes output; + uint256 value; + address disputingAddress; + address modelAddress; + uint40 expiredAt; + InferenceStatus status; + address creator; + } - event WorkerAuthorization(address worker); - event WorkerUnauthorization(address worker); + struct UnstakeRequest { + uint256 stake; + uint40 unlockAt; + } - event NewUnstakeRequest(uint256 indexed requestId, address indexed worker, uint256 value); - event Stake(address indexed worker, uint256 value); - event Unstake(address indexed worker, uint256[] requestIds); + struct Boost { + uint40 minerTimestamp; + uint40 validatorTimestamp; + uint48 reserved1; // accumulated active time + uint128 reserved2; + } - event NewInference(uint256 indexed inferenceId, address indexed creator); - event ResultSubmission(uint256 indexed inferenceId, address indexed worker); + event MiningTimeLimitUpdate(uint40 newValue); + + event ModelRegistration( + address indexed model, + uint16 indexed tier, + uint256 minimumFee + ); + event ModelUnregistration(address indexed model); + event ModelTierUpdate(address indexed model, uint32 tier); + event ModelMinimumFeeUpdate(address indexed model, uint256 minimumFee); + + event MinerExtraStake(address indexed miner, uint256 value); + event MinerRegistration( + address indexed miner, + uint16 indexed tier, + uint256 value + ); + event MinerUnregistration(address indexed miner); + + event ValidatorExtraStake(address indexed validator, uint256 value); + event ValidatorRegistration( + address indexed validator, + uint16 indexed tier, + uint256 value + ); + event ValidatorUnregistration(address indexed validator); + + event NewInference( + uint256 indexed inferenceId, + address indexed model, + address indexed creator, + uint256 value + ); + event InferenceDisputation(address indexed validator, uint256 indexed assigmentId); + event InferenceStatusUpdate(uint256 indexed inferenceId, InferenceStatus newStatus); + + event NewAssignment( + uint256 indexed assignmentId, + uint256 indexed inferenceId, + address indexed miner, + uint40 expiredAt + ); + event SolutionSubmission(address indexed miner, uint256 indexed assigmentId); + event TransferFee( + address indexed miner, + uint256 mingingFee, + address indexed treasury, + uint256 protocolFee + ); + + event TopUpInfer( + uint256 indexed inferenceId, + address indexed creator, + uint256 value + ); + + event MinerUnstake(address indexed miner, uint256 stake); + event MinerJoin(address indexed miner); + event ValidatorUnstake(address indexed validator, uint256 stake); + event ValidatorJoin(address indexed validator); + + event RewardClaim(address indexed worker, uint256 value); + + event RewardPerEpoch(uint256 oldReward, uint256 newReward); + event BlocksPerEpoch(uint256 oldBlocks, uint256 newBlocks); + event UnstakeDelayTime(uint256 oldDelayTime, uint256 newDelayTime); + event Restake(address indexed miner, uint256 restake, address indexed model); + + event MinerDeactivated(address indexed miner, address indexed modelAddress, uint40 activeTime); + event FraudulentMinerPenalized(address indexed miner, address indexed modelAddress, address indexed treasury, uint256 fine); + event PenaltyDurationUpdated(uint40 oldDuration, uint40 newDuration); + event FinePercentageUpdated(uint16 oldPercent, uint16 newPercent); error AlreadyRegistered(); - error ConflictedPercentage(); - error FailedTransfer(); - error InferenceIsAlreadyResolved(); - error InsufficientFunds(); - error InvalidInferenceId(); - error NotEnoughStake(); + error AlreadySubmitted(); error NotRegistered(); - error StakeIsNotUnlockedYet(); - error RequestIsAlreadyWithdrawn(); + error NotEnoughMiners(); error Unauthorized(); + error StillBeingLocked(); + + error InvalidBlockValue(); + error InvalidModel(); + error InvalidTier(); + error InvalidInferenceStatus(); + + error FeeTooLow(); + error StakeTooLow(); + error NullStake(); + + error MiningSessionNotEnded(); + error ValidatingSessionNotEnded(); + error MiningSessionEnded(); + + error InferMustBeSolvingState(); + error ZeroValue(); + error InvalidValidator(); + error InvalidMiner(); - function version() external pure returns (string memory); - - function collection() external view returns (address collectionAddress); - function feePercentage() external view returns (uint8 feePercentage); - function inferenceNumber() external view returns (uint256 interferenceNumber); - function minimumStake() external view returns (uint256 minimumStake); - function royaltyPercentage() external view returns (uint8 royaltyPercentage); - function stakeLockingDuration() external view returns (uint40 stakeLockingDuration); - function unstakeRequestNumber() external view returns (uint256 unstakeRequestNumber); - function treasury() external view returns (address treasuryAddress); - - function getIndividualInferences(address account) - external view returns (Inference[] memory inferences); - function getIndividualUnresolvedInferences(address account) - external view returns (UnresolvedInference[] memory inferences); - function getIndividualUnstakeRequests(address account) - external view returns (UnstakeRequest[] memory requests); - function getIndividualWithdrawableUnstakeRequests(address _account) - external view returns (UnstakeRequest[] memory requests); - function getInference(uint256 inferenceId) - external view returns (Inference memory inference); - function getInferences() - external view returns (Inference[] memory inferences); - function getModelInferences(address model) - external view returns (Inference[] memory inferences); - function getModelUnresolvedInferences(address model) - external view returns (UnresolvedInference[] memory inferences); - function getUnresolvedInferences() - external view returns (UnresolvedInference[] memory inferences); - function getUnstakeRequest(uint256 requestId) - external view returns (UnstakeRequest memory); - function getWorker(address worker) - external view returns (Worker memory workerData); - - function stake() external payable; - function requestUnstake(uint256 value) external; - function unstake(uint256[] calldata requestIds) external; - - function infer(bytes calldata data, uint256 identifier, address creator) external payable returns (uint256); - function submitResult(uint256 inferenceId, bytes calldata result) external; + error MinerInDeactivationTime(); + error ValidatorInDeactivationTime(); } diff --git a/contracts/lib/Random.sol b/contracts/lib/Random.sol new file mode 100644 index 0000000..2db9e0b --- /dev/null +++ b/contracts/lib/Random.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +library Random { + struct Randomizer { + uint256 nonce; + } + + function randomUint256(Randomizer storage _randomizer) internal returns (uint256) { + uint256 newNonce = uint256(keccak256(abi.encodePacked( + _randomizer.nonce, + block.timestamp, + blockhash(block.number) + ))); + return _randomizer.nonce = newNonce; + } +} diff --git a/contracts/lib/Set.sol b/contracts/lib/Set.sol new file mode 100644 index 0000000..70ada21 --- /dev/null +++ b/contracts/lib/Set.sol @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.19; + +library Set { + struct AddressSet { + address[] values; + mapping(address => uint256) positions; + } + + error AddressSet_ValueNotFound(address value); + error AddressSet_DuplicatedValue(address value); + + function insert(AddressSet storage _set, address _value) internal { + if (_set.positions[_value] != 0) revert AddressSet_DuplicatedValue(_value); + _set.values.push(_value); + _set.positions[_value] = _set.values.length; + } + + function erase(AddressSet storage _set, address _value) internal { + uint256 p = _set.positions[_value]; + if (p == 0) revert AddressSet_ValueNotFound(_value); + unchecked { + _set.values[p - 1] = _set.values[_set.values.length - 1]; + _set.positions[_set.values[p - 1]] = p; + } + _set.values.pop(); + _set.positions[_value] = 0; + } + + function hasValue(AddressSet storage _set, address _value) internal view returns (bool) { + return _set.positions[_value] != 0; + } + + function isEmpty(AddressSet storage _set) internal view returns (bool) { + return _set.values.length == 0; + } + + function size(AddressSet storage _set) internal view returns (uint256) { + return _set.values.length; + } + + struct Uint256Set { + uint256[] values; + mapping(uint256 => uint256) positions; + } + + error Uint256Set_ValueNotFound(uint256 value); + error Uint256Set_DuplicatedValue(uint256 value); + + function insert(Uint256Set storage _set, uint256 _value) internal { + if (_set.positions[_value] != 0) revert Uint256Set_DuplicatedValue(_value); + _set.values.push(_value); + _set.positions[_value] = _set.values.length; + } + + function erase(Uint256Set storage _set, uint256 _value) internal { + uint256 p = _set.positions[_value]; + if (p == 0) revert Uint256Set_ValueNotFound(_value); + unchecked { + _set.values[p - 1] = _set.values[_set.values.length - 1]; + _set.positions[_set.values[p - 1]] = p; + } + _set.values.pop(); + _set.positions[_value] = 0; + } + + function hasValue(Uint256Set storage _set, uint256 _value) internal view returns (bool) { + return _set.positions[_value] != 0; + } + + function isEmpty(Uint256Set storage _set) internal view returns (bool) { + return _set.values.length == 0; + } + + function size(Uint256Set storage _set) internal view returns (uint256) { + return _set.values.length; + } +} diff --git a/contracts/lib/TransferHelper.sol b/contracts/lib/TransferHelper.sol new file mode 100644 index 0000000..f071c9a --- /dev/null +++ b/contracts/lib/TransferHelper.sol @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +library TransferHelper { + bytes4 constant private SELECTOR_APPROVE = bytes4(keccak256(bytes('approve(address,uint256)'))); + bytes4 constant private SELECTOR_TRANSFER = bytes4(keccak256(bytes('transfer(address,uint256)'))); + bytes4 constant private SELECTOR_TRANSFER_FROM = bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); + + error FailedApproval(); + error FailedTransfer(); + + function safeApprove( + address _token, + address _to, + uint256 _value + ) internal { + (bool success, bytes memory data) = _token.call( + abi.encodeWithSelector( + SELECTOR_TRANSFER, + _to, + _value + ) + ); + if (!success || (data.length > 0 && !abi.decode(data, (bool)))) { + revert FailedApproval(); + } + } + + function safeTransfer( + address _token, + address _to, + uint256 _value + ) internal { + (bool success, bytes memory data) = _token.call( + abi.encodeWithSelector( + SELECTOR_TRANSFER, + _to, + _value + ) + ); + if (!success || (data.length > 0 && !abi.decode(data, (bool)))) { + revert FailedTransfer(); + } + } + + function safeTransferFrom( + address _token, + address _from, + address _to, + uint256 _value + ) internal { + (bool success, bytes memory data) = _token.call( + abi.encodeWithSelector( + SELECTOR_TRANSFER_FROM, + _from, + _to, + _value + ) + ); + if (!success || (data.length > 0 && !abi.decode(data, (bool)))) { + revert FailedTransfer(); + } + } + + function safeTransferNative(address _to, uint256 _value) internal { + (bool success, ) = _to.call{value: _value}(""); + if (!success) revert FailedTransfer(); + } +} diff --git a/contracts/storages/HybridModelStorage.sol b/contracts/storages/HybridModelStorage.sol new file mode 100644 index 0000000..d5e193b --- /dev/null +++ b/contracts/storages/HybridModelStorage.sol @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +import {IHybridModel} from "../interfaces/IHybridModel.sol"; + +abstract contract HybridModelStorage is IHybridModel { + uint256 public identifier; + + string public name; + string public metadata; + + address public workerHub; + + uint256[50] private __gap; +} diff --git a/contracts/storages/ModelCollectionStorage.sol b/contracts/storages/ModelCollectionStorage.sol new file mode 100644 index 0000000..541a0f9 --- /dev/null +++ b/contracts/storages/ModelCollectionStorage.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +import {IModelCollection} from "../interfaces/IModelCollection.sol"; + +abstract contract ModelCollectionStorage is IModelCollection { + mapping(uint256 => address) internal models; + uint256 public nextModelId; + uint256 public mintPrice; + address public royaltyReceiver; + uint16 public royaltyPortion; + + uint256[50] private __gap; +} diff --git a/contracts/storages/WorkerHubStorage.sol b/contracts/storages/WorkerHubStorage.sol new file mode 100644 index 0000000..c53f376 --- /dev/null +++ b/contracts/storages/WorkerHubStorage.sol @@ -0,0 +1,76 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +import {IWorkerHub} from "../interfaces/IWorkerHub.sol"; + +import {Random} from "../lib/Random.sol"; +import {Set} from "../lib/Set.sol"; + +abstract contract WorkerHubStorage is IWorkerHub { + Random.Randomizer internal randomizer; + + mapping(address => Model) public models; + mapping(address => Worker) public miners; + mapping(address => Worker) public validators; + + mapping(address => Set.AddressSet) internal minerAddressesByModel; + mapping(address => Set.AddressSet) internal validatorAddressesByModel; + + Set.AddressSet internal modelAddresses; + Set.AddressSet internal minerAddresses; + Set.AddressSet internal validatorAddresses; + + mapping(address => UnstakeRequest) public minerUnstakeRequests; + mapping(address => UnstakeRequest) public validatorUnstakeRequests; + + uint256 public inferenceNumber; + mapping(uint256 => Inference) internal inferences; + + uint256 public assignmentNumber; + mapping(uint256 => Assignment) public assignments; + mapping(address => Set.Uint256Set) internal assignmentsByMiner; + mapping(uint256 => Set.Uint256Set) internal assignmentsByInference; + + mapping(address => mapping(uint256 => bool)) public validatorDisputed; + + // mapping total task completed in epoch and reward per epoch + // epoch index => total reward + mapping(uint256 => MinerEpochState) public rewardInEpoch; + + // mapping detail miner completed how many request + // total task completed in epoch + // miner => epoch => total task completed + mapping(address => mapping(uint256 => uint256)) internal minerTaskCompleted; + + uint256 public minerMinimumStake; + uint256 public validatorMinimumStake; + address public treasury; + uint16 public feePercentage; + uint40 public miningTimeLimit; + uint40 public validatingTimeLimit; + uint40 public disputingTimeLimit; + uint40 public penaltyDuration; + uint40 public unstakeDelayTime; + uint8 public minerRequirement; + + uint16 public maximumTier; + uint16 public disqualificationPercentage; + + // reward purpose + uint40 public currentEpoch; + uint256 public blocksPerEpoch; + uint256 public lastBlock; + uint256 internal rewardPerEpochBasedOnPerf; // percentage for workers completed task + uint256 public rewardPerEpoch; // 12299.97 reward EAI for 1 worker per year + + // Tx Fee + uint16 public finePercentage; + + // mapping tracking reward + mapping(address => uint256) internal minerRewards; + // tracking time miner join the network to + // determine multiplier value + mapping(address => Boost) internal boost; + + uint256[97] private __gap; +} diff --git a/deploy/1-model.ts b/deploy/1-model.ts index a626ae4..bf703eb 100644 --- a/deploy/1-model.ts +++ b/deploy/1-model.ts @@ -11,24 +11,25 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { await network.provider.send("evm_setIntervalMining", [3000]); } - // uint256 _mintPrice, uint256 _evalPrice, address _royaltyReceiver, uint256 _nextModelId + const name = "Models"; + const symbol = "MDL"; const mintPrice = ethers.utils.parseEther('0.1'); - const evalPrice = ethers.utils.parseEther('0.01'); const royaltyReceiver = deployer; - const nextModelId = 1000; + const royaltyPortion = 10; + const nextModelId = 1; - await deploy('ModelReg', { + await deploy('ModelCollection', { from: deployer, proxy: { proxyContract: 'OpenZeppelinTransparentProxy', execute: { init: { methodName: 'initialize', - args: [mintPrice, evalPrice, royaltyReceiver], + args: [name, symbol, mintPrice, royaltyReceiver, royaltyPortion, nextModelId], }, // onUpgrade: { // methodName: 'afterUpgrade', - // args: [mintPrice, evalPrice, royaltyReceiver, nextModelId], + // args: [name, symbol, mintPrice, royaltyReceiver, royaltyPortion, nextModelId], // } }, }, @@ -38,5 +39,5 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { }; -func.tags = ['1', 'ModelReg']; +func.tags = ['1', 'ModelCollection']; export default func; \ No newline at end of file diff --git a/deploy_data/deploy_data.txt b/deploy_data/deploy_data.txt new file mode 100644 index 0000000..57b36fe --- /dev/null +++ b/deploy_data/deploy_data.txt @@ -0,0 +1,69 @@ +const name = 'SDXL-Lightning';//`Model ${identifier}`; +const minHardware = 1; +const modelOwnerAddress = '0x5D6429703D747805920D596E15427B08083e3D2c'; +const metadata = '{\n' + + '\t"version": 1,\n' + + '\t"model_name": "SDXL-Lightning",\n' + + '\t"model_type": "image",\n' + + '\t"model_url": "https://gateway.lighthouse.storage/ipfs/QmcYLMm3X9KVkozZJoVEJRoSHDXpfhwyQJpiPTZTEcNz8T",\n' + + '\t"model_file_hash": "49694d4077e0f007c8b49ed8a8a3a877f70dd6fbbb19ae230cba76b68451f7b0",\n' + + '\t"min_hardware": 1,\n' + + '\t"verifier_url": "",\n' + + '\t"verifier_file_hash": ""\n' + + '}' + +const name = 'Fantasy Map';//`Model ${identifier}`; +const minHardware = 1; +const modelOwnerAddress = '0x10919C7A907DAAFcBF581cf5aBBb877DD6675D77'; +const metadata = '{\n' + + '\t"version": 1,\n' + + '\t"model_name": "FantasyMap",\n' + + '\t"model_type": "image",\n' + + '\t"model_url": "https://gateway.lighthouse.storage/ipfs/Qmaz3AgnZVH1DVqXdciac6G8FUnungDTkBXDo2Dx1FtXx5",\n' + + '\t"model_file_hash": "2c25f12639d4821f6bb04d853c36a383bd99234b1bb3bcd80e0ac6c98d34247d",\n' + + '\t"min_hardware": 1,\n' + + '\t"verifier_url": "",\n' + + '\t"verifier_file_hash": ""\n' + + '}' + +const name = 'DreamShaper XL';//`Model ${identifier}`; +const minHardware = 1; +const modelOwnerAddress = '0x71E73197b9868f7aE530Cb3b12B04e31f521525F'; +const metadata = '{\n' + + '\t"version": 1,\n' + + '\t"model_name": "DreamShaper XL",\n' + + '\t"model_type": "image",\n' + + '\t"model_url": "https://gateway.lighthouse.storage/ipfs/QmfKxyFbvTEF3XyyeYzEq7ysUqTJbVM5QxGYbEts8AJjRX",\n' + + '\t"model_file_hash": "2ee8c8d423f5ad46034359f5d04825a44018a93689a4fd88ce7ec3287f1e7cf4",\n' + + '\t"min_hardware": 1,\n' + + '\t"verifier_url": "",\n' + + '\t"verifier_file_hash": ""\n' + + '}' + +const name = 'Animated Concept - SDXL LoRA';//`Model ${identifier}`; +const minHardware = 1; +const modelOwnerAddress = '0xBb380912A2E0c83628935f98a5a1b08b8588Ae76'; +const metadata = '{\n' + + '\t"version": 1,\n' + + '\t"model_name": "Animated Concept - SDXL LoRA",\n' + + '\t"model_type": "image",\n' + + '\t"model_url": "https://gateway.lighthouse.storage/ipfs/QmaG6DJstjfgVuBRDi6Ma66o9SMaReMse1S75nDDwwErM3",\n' + + '\t"model_file_hash": "dc881c939ff3078b59d9bf2a6fc83db2caf7b0780ee563d3a6fc09ea5a1b35a1",\n' + + '\t"min_hardware": 1,\n' + + '\t"verifier_url": "",\n' + + '\t"verifier_file_hash": ""\n' + + '}' + +const name = 'Juggernaut XL';//`Model ${identifier}`; +const minHardware = 1; +const modelOwnerAddress = '0xB0D0c3C59B9101D0C98cD2235c03C43F1294cb95'; +const metadata = '{\n' + + '\t"version": 1,\n' + + '\t"model_name": "Juggernaut XL",\n' + + '\t"model_type": "image",\n' + + '\t"model_url": "https://gateway.lighthouse.storage/ipfs/QmcFYMYpVodkpT6t1fVmWNjPnUnnQbXvwpqyheXvPGKUr8",\n' + + '\t"model_file_hash": "7f1f29cb884c5b2f4d072b99afcb87f32cbe4adc88cffedab15ffc9fd30887ae",\n' + + '\t"min_hardware": 1,\n' + + '\t"verifier_url": "https://gateway.lighthouse.storage/ipfs/QmdkKEjx2fauzbPh1j5bUiQXrUG5Ft36pJGHS8awrN89Dc",\n' + + '\t"verifier_file_hash": "492b2b3dea3003d359fe1b2cee77a22777d8a9faf942ab6dee81e6bfadaadec4"\n' + + '}' diff --git a/foundry.toml b/foundry.toml new file mode 100644 index 0000000..ebe58d8 --- /dev/null +++ b/foundry.toml @@ -0,0 +1,9 @@ +[profile.default] +src = 'contracts' +out = 'out' +libs = ['node_modules', 'lib'] +test = 'tests' +cache_path = 'cache_forge' + +[fuzz] +runs = 0 \ No newline at end of file diff --git a/hardhat.config.ts b/hardhat.config.ts index e56e4cc..dceddb3 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -38,7 +38,7 @@ const config: HardhatUserConfig = { url: "http://127.0.0.1:8545/", timeout: 600_000, gas: 10_000_000_000, - gasPrice: "auto", + gasPrice: "auto", }, localhost: { url: "http://localhost:8545", @@ -70,9 +70,10 @@ const config: HardhatUserConfig = { treasuryAddress: process.env.REGTEST3_TREASURY_ADDRESS, collectionAddress: process.env.REGTEST3_COLLECTION_ADDRESS, workerHubAddress: process.env.REGTEST3_WORKER_HUB_ADDRESS, - timeout: 500_000, - gasPrice: 1_000_000_000, - blockGasLimit: 100_000_000_000, + timeout: 600_000, + gas: 10_000_000_000, + gasPrice: "auto", + blockGasLimit: 100_000_000_000 } as any, cudatest: { url: "http://34.124.187.213:8545", @@ -88,6 +89,17 @@ const config: HardhatUserConfig = { gasPrice: 1_000_000_000, blockGasLimit: 100_000_000_000, } as any, + mainnet: { + url: "https://node.eternalai.org/", + chainId: 43338, + accounts: [process.env.MAINNET_PRIVATE_KEY], + treasuryAddress: process.env.MAINNET_TREASURY_ADDRESS, + collectionAddress: process.env.MAINNET_COLLECTION_ADDRESS, + workerHubAddress: process.env.MAINNET_WORKER_HUB_ADDRESS, + timeout: 500_000, + gasPrice: 1_000_000_000, + blockGasLimit: 100_000_000_000, + } as any, }, namedAccounts: { deployer: 0, diff --git a/lib/forge-std b/lib/forge-std new file mode 160000 index 0000000..978ac6f --- /dev/null +++ b/lib/forge-std @@ -0,0 +1 @@ +Subproject commit 978ac6fadb62f5f0b723c996f64be52eddba6801 diff --git a/package-lock.json b/package-lock.json index 80607c6..f34d39f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "@ethersproject/experimental": "^5.7.0", "@foundry-rs/hardhat-anvil": "^0.1.7", "@nomicfoundation/hardhat-chai-matchers": "^1.0.6", + "@nomicfoundation/hardhat-foundry": "^1.1.1", "@nomicfoundation/hardhat-network-helpers": "^1.0.10", "@nomicfoundation/hardhat-toolbox": "^2.0.2", "@nomiclabs/hardhat-etherscan": "^3.1.8", @@ -1715,6 +1716,18 @@ "hardhat": "^2.9.4" } }, + "node_modules/@nomicfoundation/hardhat-foundry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-foundry/-/hardhat-foundry-1.1.1.tgz", + "integrity": "sha512-cXGCBHAiXas9Pg9MhMOpBVQCkWRYoRFG7GJJAph+sdQsfd22iRs5U5Vs9XmpGEQd1yEvYISQZMeE68Nxj65iUQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2" + }, + "peerDependencies": { + "hardhat": "^2.17.2" + } + }, "node_modules/@nomicfoundation/hardhat-network-helpers": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.10.tgz", diff --git a/package.json b/package.json index dfa9eaf..343c126 100644 --- a/package.json +++ b/package.json @@ -9,18 +9,33 @@ "blockscout:verify": "npx hardhat blockscout-verify", "ts:run": "npx ts-node", "test": "echo \"Error: no test specified\" && exit 1", + "console:anvil": "npx hardhat console --network anvil", + "deployModelCollection:anvil": "npx hardhat run scripts/deployModelCollection.ts --network anvil", + "deployWorkerHub:anvil": "npx hardhat run scripts/deployWorkerHub.ts --network anvil", + "deployHybridModel:anvil": "npx hardhat run scripts/deployHybridModel.ts --network anvil", + "updateHybridModelMetadata:anvil": "npx hardhat run scripts/updateHybridModelMetadata.ts --network anvil", "console:regtest3": "npx hardhat console --network regtest3", + "deployModelCollection:regtest3": "npx hardhat run scripts/deployModelCollection.ts --network regtest3", "deployWorkerHub:regtest3": "npx hardhat run scripts/deployWorkerHub.ts --network regtest3", "deployHybridModel:regtest3": "npx hardhat run scripts/deployHybridModel.ts --network regtest3", + "updateHybridModelMetadata:regtest3": "npx hardhat run scripts/updateHybridModelMetadata.ts --network regtest3", "console:cudatest": "npx hardhat console --network cudatest", + "deployModelCollection:cudatest": "npx hardhat run scripts/deployModelCollection.ts --network cudatest", "deployWorkerHub:cudatest": "npx hardhat run scripts/deployWorkerHub.ts --network cudatest", - "deployHybridModel:cudatest": "npx hardhat run scripts/deployHyrbidModel.ts --network cudatest" + "deployHybridModel:cudatest": "npx hardhat run scripts/deployHybridModel.ts --network cudatest", + "updateHybridModelMetadata:cudatest": "npx hardhat run scripts/updateHybridModelMetadata.ts --network cudatest", + "console:mainnet": "npx hardhat console --network mainnet", + "deployModelCollection:mainnet": "npx hardhat run scripts/deployModelCollection.ts --network mainnet", + "deployWorkerHub:mainnet": "npx hardhat run scripts/deployWorkerHub.ts --network mainnet", + "deployHybridModel:mainnet": "npx hardhat run scripts/deployHybridModel.ts --network mainnet", + "updateHybridModelMetadata:mainnet": "npx hardhat run scripts/updateHybridModelMetadata.ts --network mainnet" }, "devDependencies": { "@ericxstone/hardhat-blockscout-verify": "^1.0.2", "@ethersproject/experimental": "^5.7.0", "@foundry-rs/hardhat-anvil": "^0.1.7", "@nomicfoundation/hardhat-chai-matchers": "^1.0.6", + "@nomicfoundation/hardhat-foundry": "^1.1.1", "@nomicfoundation/hardhat-network-helpers": "^1.0.10", "@nomicfoundation/hardhat-toolbox": "^2.0.2", "@nomiclabs/hardhat-etherscan": "^3.1.8", diff --git a/run-anvil.sh b/run-anvil.sh index ff719ac..2064f28 100644 --- a/run-anvil.sh +++ b/run-anvil.sh @@ -5,21 +5,32 @@ anvil --prune-history --order fifo --code-size-limit 4294967296 -m "test test te npx hardhat deploy --tags 1 --network anvil # ImageClassifier -npx hardhat run scripts/deploy-image-model.ts +npx hardhat run scripts/deploy-image-model.ts --network anvil npx hardhat eval-img --network anvil --id '1' --contract '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0' --img 'sample-images/nft/cryptoadz/000.png' +npx hardhat eval-img --network anvil --id '1' --contract '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0' --img 'sample-images/nft/cryptoadz/001.png' +npx hardhat eval-img --network anvil --id '1' --contract '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0' --img 'sample-images/nft/cryptoadz/002.png' +npx hardhat eval-img --network anvil --id '1' --contract '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0' --img 'sample-images/nft/cryptopunks/000.png' +npx hardhat eval-img --network anvil --id '1' --contract '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0' --img 'sample-images/nft/cryptopunks/001.png' +npx hardhat eval-img --network anvil --id '1' --contract '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0' --img 'sample-images/nft/cryptopunks/002.png' +npx hardhat eval-img --network anvil --id '1' --contract '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0' --img 'sample-images/nft/moonbirds/000.png' +npx hardhat eval-img --network anvil --id '1' --contract '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0' --img 'sample-images/nft/moonbirds/001.png' +npx hardhat eval-img --network anvil --id '1' --contract '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0' --img 'sample-images/nft/moonbirds/002.png' +npx hardhat eval-img --network anvil --id '1' --contract '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0' --img 'sample-images/nft/nouns/000.png' +npx hardhat eval-img --network anvil --id '1' --contract '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0' --img 'sample-images/nft/nouns/001.png' +npx hardhat eval-img --network anvil --id '1' --contract '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0' --img 'sample-images/nft/nouns/002.png' npx hardhat get-image-model --network anvil --id '1' --contract '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0' # TextRNN -npx hardhat run scripts/deploy-textrnn-model.ts +npx hardhat run scripts/deploy-textrnn-model.ts --network anvil npx hardhat generate-text --network anvil --id '1' --contract '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0' --prompt $'ROMEO:\nIs the day so young?' --togenerate 100 --generatepertx 10 npx hardhat get-textrnn-model --network anvil --id '1' --contract '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0' # MelodyRNN -npx hardhat run scripts/deploy-melody-model.ts +npx hardhat run scripts/deploy-melody-model.ts --network anvil npx hardhat generate-melody --network anvil --id '1' --contract '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0' --count 50 --steplen 1 --output "_outputs/vgm.mid" npx hardhat generate-melody --network anvil --id '1' --contract '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0' --count 1 --steplen 50 --output "_outputs/vgm_stateful.mid" diff --git a/run-cudatest.sh b/run-cudatest.sh index e551ab1..1418d10 100644 --- a/run-cudatest.sh +++ b/run-cudatest.sh @@ -2,21 +2,21 @@ npx hardhat deploy --tags 1 --network cudatest # ImageClassifier -npx hardhat run scripts/deploy-image-model.ts +npx hardhat run scripts/deploy-image-model.ts --network cudatest npx hardhat eval-img --network cudatest --id '1' --contract '0x1D19Db739A466c156b007B8cC18687Eb21434D75' --img 'sample-images/nft/cryptoadz/000.png' npx hardhat get-image-model --network cudatest --id '1' --contract '0x1D19Db739A466c156b007B8cC18687Eb21434D75' # TextRNN -npx hardhat run scripts/deploy-textrnn-model.ts +npx hardhat run scripts/deploy-textrnn-model.ts --network cudatest npx hardhat generate-text --network cudatest --id '1' --contract '0x1D19Db739A466c156b007B8cC18687Eb21434D75' --prompt $'ROMEO:\nIs the day so young?' --togenerate 100 --generatepertx 10 npx hardhat get-textrnn-model --network cudatest --id '1' --contract '0x1D19Db739A466c156b007B8cC18687Eb21434D75' # MelodyRNN -npx hardhat run scripts/deploy-melody-model.ts +npx hardhat run scripts/deploy-melody-model.ts --network cudatest npx hardhat generate-melody --network cudatest --id '1' --contract '0x1D19Db739A466c156b007B8cC18687Eb21434D75' --count 50 --steplen 1 --output "_outputs/vgm.mid" npx hardhat generate-melody --network cudatest --id '1' --contract '0x1D19Db739A466c156b007B8cC18687Eb21434D75' --count 1 --steplen 50 --output "_outputs/vgm_stateful.mid" diff --git a/run-local.sh b/run-local.sh index 6b5aecd..41b7b39 100644 --- a/run-local.sh +++ b/run-local.sh @@ -5,21 +5,21 @@ npx hardhat node # ModelRegister contract is automatically deployed # ImageClassifier -npx hardhat run scripts/deploy-image-model.ts +npx hardhat run scripts/deploy-image-model.ts --network localhost npx hardhat eval-img --network localhost --id '1' --contract '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0' --img 'sample-images/nft/cryptoadz/000.png' npx hardhat get-image-model --network localhost --id '1' --contract '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0' # TextRNN -npx hardhat run scripts/deploy-textrnn-model.ts +npx hardhat run scripts/deploy-textrnn-model.ts --network localhost npx hardhat generate-text --network localhost --id '1' --contract '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0' --prompt $'ROMEO:\nIs the day so young?' --togenerate 100 --generatepertx 10 npx hardhat get-textrnn-model --network localhost --id '1' --contract '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0' # MelodyRNN -npx hardhat run scripts/deploy-melody-model.ts +npx hardhat run scripts/deploy-melody-model.ts --network localhost npx hardhat generate-melody --network localhost --id '1' --contract '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0' --count 50 --steplen 1 --output "_outputs/vgm.mid" npx hardhat generate-melody --network localhost --id '1' --contract '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0' --count 1 --steplen 50 --output "_outputs/vgm_stateful.mid" diff --git a/run-regtest2.sh b/run-regtest2.sh index 93ba820..d5bdf76 100644 --- a/run-regtest2.sh +++ b/run-regtest2.sh @@ -2,21 +2,21 @@ npx hardhat deploy --tags 1 --network regtest2 # ImageClassifier -npx hardhat run scripts/deploy-image-model.ts +npx hardhat run scripts/deploy-image-model.ts --network regtest2 npx hardhat eval-img --network regtest2 --id '1' --contract '0x987c7F1f0e0cec104b18Ed16e0139dc77Fa18361' --img 'sample-images/nft/cryptoadz/000.png' npx hardhat get-image-model --network regtest2 --id '1' --contract '0x987c7F1f0e0cec104b18Ed16e0139dc77Fa18361' # TextRNN -npx hardhat run scripts/deploy-textrnn-model.ts +npx hardhat run scripts/deploy-textrnn-model.ts --network regtest2 npx hardhat generate-text --network regtest2 --id '1' --contract '0x987c7F1f0e0cec104b18Ed16e0139dc77Fa18361' --prompt $'ROMEO:\nIs the day so young?' --togenerate 100 --generatepertx 10 npx hardhat get-textrnn-model --network regtest2 --id '1' --contract '0x987c7F1f0e0cec104b18Ed16e0139dc77Fa18361' # MelodyRNN -npx hardhat run scripts/deploy-melody-model.ts +npx hardhat run scripts/deploy-melody-model.ts --network regtest2 npx hardhat generate-melody --network regtest2 --id '1' --contract '0x987c7F1f0e0cec104b18Ed16e0139dc77Fa18361' --count 50 --steplen 1 --output "_outputs/vgm.mid" npx hardhat generate-melody --network regtest2 --id '1' --contract '0x987c7F1f0e0cec104b18Ed16e0139dc77Fa18361' --count 1 --steplen 50 --output "_outputs/vgm_stateful.mid" diff --git a/run-regtest3.sh b/run-regtest3.sh index 1c76a7c..a726067 100644 --- a/run-regtest3.sh +++ b/run-regtest3.sh @@ -2,26 +2,37 @@ npx hardhat deploy --tags 1 --network regtest3 # ImageClassifier -npx hardhat run scripts/deploy-image-model.ts - -npx hardhat eval-img --network regtest3 --id '1' --contract '0x987c7F1f0e0cec104b18Ed16e0139dc77Fa18361' --img 'sample-images/nft/cryptoadz/000.png' - -npx hardhat get-image-model --network regtest3 --id '1' --contract '0x987c7F1f0e0cec104b18Ed16e0139dc77Fa18361' +npx hardhat run scripts/deploy-image-model.ts --network regtest3 + +npx hardhat eval-img --network regtest3 --id '1000002' --contract '0x0D8eEd4f3E1D19bCd0CC13BD093C01048c88ee13' --img 'sample-images/nft/cryptoadz/000.png' +npx hardhat eval-img --network regtest3 --id '1000002' --contract '0x0D8eEd4f3E1D19bCd0CC13BD093C01048c88ee13' --img 'sample-images/nft/cryptoadz/001.png' +npx hardhat eval-img --network regtest3 --id '1000002' --contract '0x0D8eEd4f3E1D19bCd0CC13BD093C01048c88ee13' --img 'sample-images/nft/cryptoadz/002.png' +npx hardhat eval-img --network regtest3 --id '1000002' --contract '0x0D8eEd4f3E1D19bCd0CC13BD093C01048c88ee13' --img 'sample-images/nft/cryptopunks/000.png' +npx hardhat eval-img --network regtest3 --id '1000002' --contract '0x0D8eEd4f3E1D19bCd0CC13BD093C01048c88ee13' --img 'sample-images/nft/cryptopunks/001.png' +npx hardhat eval-img --network regtest3 --id '1000002' --contract '0x0D8eEd4f3E1D19bCd0CC13BD093C01048c88ee13' --img 'sample-images/nft/cryptopunks/002.png' +npx hardhat eval-img --network regtest3 --id '1000002' --contract '0x0D8eEd4f3E1D19bCd0CC13BD093C01048c88ee13' --img 'sample-images/nft/moonbirds/000.png' +npx hardhat eval-img --network regtest3 --id '1000002' --contract '0x0D8eEd4f3E1D19bCd0CC13BD093C01048c88ee13' --img 'sample-images/nft/moonbirds/001.png' +npx hardhat eval-img --network regtest3 --id '1000002' --contract '0x0D8eEd4f3E1D19bCd0CC13BD093C01048c88ee13' --img 'sample-images/nft/moonbirds/002.png' +npx hardhat eval-img --network regtest3 --id '1000002' --contract '0x0D8eEd4f3E1D19bCd0CC13BD093C01048c88ee13' --img 'sample-images/nft/nouns/000.png' +npx hardhat eval-img --network regtest3 --id '1000002' --contract '0x0D8eEd4f3E1D19bCd0CC13BD093C01048c88ee13' --img 'sample-images/nft/nouns/001.png' +npx hardhat eval-img --network regtest3 --id '1000002' --contract '0x0D8eEd4f3E1D19bCd0CC13BD093C01048c88ee13' --img 'sample-images/nft/nouns/002.png' + +npx hardhat get-image-model --network regtest3 --id '1000002' --contract '0x0D8eEd4f3E1D19bCd0CC13BD093C01048c88ee13' # TextRNN -npx hardhat run scripts/deploy-textrnn-model.ts +npx hardhat run scripts/deploy-textrnn-model.ts --network regtest3 -npx hardhat generate-text --network regtest3 --id '1' --contract '0x987c7F1f0e0cec104b18Ed16e0139dc77Fa18361' --prompt $'ROMEO:\nIs the day so young?' --togenerate 100 --generatepertx 10 +npx hardhat generate-text --network regtest3 --id '1' --contract '0x0D8eEd4f3E1D19bCd0CC13BD093C01048c88ee13' --prompt $'ROMEO:\nIs the day so young?' --togenerate 100 --generatepertx 10 -npx hardhat get-textrnn-model --network regtest3 --id '1' --contract '0x987c7F1f0e0cec104b18Ed16e0139dc77Fa18361' +npx hardhat get-textrnn-model --network regtest3 --id '1' --contract '0x0D8eEd4f3E1D19bCd0CC13BD093C01048c88ee13' # MelodyRNN -npx hardhat run scripts/deploy-melody-model.ts +npx hardhat run scripts/deploy-melody-model.ts --network regtest3 -npx hardhat generate-melody --network regtest3 --id '1' --contract '0x987c7F1f0e0cec104b18Ed16e0139dc77Fa18361' --count 50 --steplen 1 --output "_outputs/vgm.mid" -npx hardhat generate-melody --network regtest3 --id '1' --contract '0x987c7F1f0e0cec104b18Ed16e0139dc77Fa18361' --count 1 --steplen 50 --output "_outputs/vgm_stateful.mid" +npx hardhat generate-melody --network regtest3 --id '1' --contract '0x0D8eEd4f3E1D19bCd0CC13BD093C01048c88ee13' --count 50 --steplen 1 --output "_outputs/vgm.mid" +npx hardhat generate-melody --network regtest3 --id '1' --contract '0x0D8eEd4f3E1D19bCd0CC13BD093C01048c88ee13' --count 1 --steplen 50 --output "_outputs/vgm_stateful.mid" -npx hardhat get-melody-model --network regtest3 --id '1' --contract '0x987c7F1f0e0cec104b18Ed16e0139dc77Fa18361' +npx hardhat get-melody-model --network regtest3 --id '1' --contract '0x0D8eEd4f3E1D19bCd0CC13BD093C01048c88ee13' # Testing contract storage npx hardhat test-storage-multi-contract --network regtest3 --n 500000 diff --git a/scripts/deploy-image-model.ts b/scripts/deploy-image-model.ts index cfbdc1f..4204c0d 100644 --- a/scripts/deploy-image-model.ts +++ b/scripts/deploy-image-model.ts @@ -7,39 +7,16 @@ import { fromFloat } from './lib/utils'; import { getModelConfig, uploadModelWeights, mintModel } from './lib/modelLib'; dotenv.config(); -const ModelRegContractName = "ModelReg"; -const MaxWeightLen = 1000; -const mintPrice = ethers.utils.parseEther('0.1'); +const ImageClassifierContractName = "ImageClassifier"; +const ModelCollectionContractName = "ModelCollection"; +const OnchainModelContractName = "OnchainModel"; +const MaxWeightLen = 30000; +const mintPrice = ethers.utils.parseEther('0'); const mintConfig = { value: mintPrice }; // model 10x10: MaxWeightLen = 40, numTx = 8, fee = 0.02 * 8 TC -async function main() { - const { ethers, upgrades } = hre; - const { PRIVATE_KEY, NODE_ENDPOINT, MODEL_JSON, MODELS_NFT_CONTRACT, MODEL_OWNER, MODEL_INFERENCE_COST, CHUNK_LEN } = process.env; - if (!PRIVATE_KEY) { - throw new Error("PRIVATE_KEY is not set"); - } - if (!NODE_ENDPOINT) { - throw new Error("NODE_ENDPOINT is not set"); - } - if (!MODEL_JSON) { - throw new Error("MODEL_JSON is not set"); - } - if (!MODELS_NFT_CONTRACT || !ethers.utils.isAddress(MODELS_NFT_CONTRACT)) { - throw new Error("MODELS_NFT_CONTRACT is not set or invalid"); - } - if (!MODEL_OWNER || !ethers.utils.isAddress(MODEL_OWNER)) { - throw new Error("MODEL_OWNER is not set"); - } - - const provider = ethers.getDefaultProvider(NODE_ENDPOINT); - const signer = new ethers.Wallet(PRIVATE_KEY, provider); - - // load params from file - const modelParams = JSON.parse(fs.readFileSync(MODEL_JSON, 'utf-8')); - const params = Object.assign({}, modelParams); - +async function deployImageClassifier(params: any, weightPerTx: number, signer: ethers.Wallet): Promise { let weightsFlat: ethers.BigNumber[] = []; if (params.weight_b64) { const temp = Buffer.from(params.weight_b64, 'base64'); @@ -54,14 +31,11 @@ async function main() { params.layers_config = newLayerConfig.filter((x: any) => x !== null); params.classes_name = params.classes_name || []; - let nftContractAddress = MODELS_NFT_CONTRACT as string; - - const modelReg = await ethers.getContractAt(ModelRegContractName, nftContractAddress); - // deploy a ImageClassifier contract // ImageClassifier contract is too big (larger than 49152 bytes) to be deployed with ContractFactory const ImageFac = new ethers.ContractFactory(ImageClassifierArtifact.abi, ImageClassifierArtifact.bytecode, signer); const imageImpl = await ImageFac.deploy(); + await imageImpl.deployed(); // const ProxyFac = new ethers.ContractFactory(EIP173ProxyWithReceiveArtifact.abi, EIP173ProxyWithReceiveArtifact.bytecode, signer); // const initData = ImageFac.interface.encodeFunctionData("initialize", [params.model_name, params.classes_name, nftContractAddress]); // const mldyProxy = await ProxyFac.deploy(mldyImpl.address, signer.address, initData); @@ -80,32 +54,80 @@ async function main() { console.log('Gas used:', rc.gasUsed); console.log("Uploading weights"); - const maxlen = CHUNK_LEN ? parseInt(CHUNK_LEN) : MaxWeightLen; // do not chunk the weights - await uploadModelWeights(image, weights, maxlen); - - console.log("Deploying OnchainModel contract"); - const inferenceCost = ethers.BigNumber.from(MODEL_INFERENCE_COST); - const OnchainModel = await ethers.getContractFactory('OnchainModel'); - const onchainModel = await upgrades.deployProxy( - OnchainModel, - [ - modelReg.address, - 0, - params.model_name, - image.address, - inferenceCost - ] - ); - await onchainModel.deployed(); - console.log(`Contract OnchainModel has been deployed to address ${onchainModel.address}`); - - console.log(`Set model inferface`); - const tx = await image.setModelInterface(onchainModel.address); - await tx.wait(); - console.log("tx:", tx.hash); + await uploadModelWeights(image, weights, weightPerTx); + + return image; +} + +async function main() { + const { ethers, upgrades } = hre; + const { PRIVATE_KEY, NODE_ENDPOINT, MODEL_JSON, ONCHAIN_MODEL_CONTRACT, MODELS_NFT_CONTRACT, MODEL_OWNER, MODEL_INFERENCE_COST, CHUNK_LEN } = process.env; + if (!PRIVATE_KEY) { + throw new Error("PRIVATE_KEY is not set"); + } + if (!NODE_ENDPOINT) { + throw new Error("NODE_ENDPOINT is not set"); + } + if (!MODEL_JSON) { + throw new Error("MODEL_JSON is not set"); + } + if (ONCHAIN_MODEL_CONTRACT && !ethers.utils.isAddress(ONCHAIN_MODEL_CONTRACT)) { + throw new Error("ONCHAIN_MODEL_CONTRACT is invalid"); + } + if (!MODELS_NFT_CONTRACT || !ethers.utils.isAddress(MODELS_NFT_CONTRACT)) { + throw new Error("MODELS_NFT_CONTRACT is not set or invalid"); + } + if (!MODEL_OWNER || !ethers.utils.isAddress(MODEL_OWNER)) { + throw new Error("MODEL_OWNER is not set"); + } + if (!MODEL_INFERENCE_COST) { + throw new Error("MODEL_INFERENCE_COST is not set"); + } + + const provider = ethers.getDefaultProvider(NODE_ENDPOINT); + const signer = new ethers.Wallet(PRIVATE_KEY, provider); + + let nftContractAddress = MODELS_NFT_CONTRACT as string; + const modelCollection = await ethers.getContractAt(ModelCollectionContractName, nftContractAddress); + + const modelParams = JSON.parse(fs.readFileSync(MODEL_JSON, 'utf-8')); + const params = Object.assign({}, modelParams); + + const weightPerTx = CHUNK_LEN ? parseInt(CHUNK_LEN) : MaxWeightLen; // do not chunk the weights + let onchainModel: ethers.Contract; + let image: ethers.Contract; + + if (!ONCHAIN_MODEL_CONTRACT) { + image = await deployImageClassifier(params, weightPerTx, signer); + + console.log("Deploying OnchainModel contract"); + const inferenceCost = ethers.BigNumber.from(MODEL_INFERENCE_COST); + const OnchainModel = await ethers.getContractFactory('OnchainModel'); + onchainModel = await upgrades.deployProxy( + OnchainModel, + [ + modelCollection.address, + 0, + params.model_name, + image.address, + inferenceCost + ] + ); + await onchainModel.deployed(); + console.log(`Contract OnchainModel has been deployed to address ${onchainModel.address}`); + + console.log(`Set model inferface`); + const tx = await image.setModelInterface(onchainModel.address); + await tx.wait(); + console.log("tx:", tx.hash); + } else { + onchainModel = await ethers.getContractAt(OnchainModelContractName, ONCHAIN_MODEL_CONTRACT); + const implementAddress = await onchainModel.implementation(); + image = await ethers.getContractAt(ImageClassifierContractName, implementAddress, signer); + } console.log("Minting new model"); - await mintModel(modelReg, onchainModel, MODEL_OWNER || signer.address, mintConfig); + await mintModel(modelCollection, onchainModel, MODEL_OWNER || signer.address, mintConfig); } main().catch((error) => { diff --git a/scripts/deploy-melody-model.ts b/scripts/deploy-melody-model.ts index ed1a58f..d0996ff 100644 --- a/scripts/deploy-melody-model.ts +++ b/scripts/deploy-melody-model.ts @@ -8,7 +8,7 @@ import { getModelConfig, uploadModelWeights, mintModel } from './lib/modelLib'; dotenv.config(); -const ModelRegContractName = "ModelReg"; +const ModelCollectionContractName = "ModelCollection"; const MaxWeightLen = 1000; const mintPrice = ethers.utils.parseEther('0.1'); const mintConfig = { value: mintPrice }; @@ -55,11 +55,12 @@ async function main() { let nftContractAddress = MODELS_NFT_CONTRACT as string; - const modelReg = await ethers.getContractAt(ModelRegContractName, nftContractAddress); + const modelCollection = await ethers.getContractAt(ModelCollectionContractName, nftContractAddress); // deploy a MelodyRNN contract const MelodyFac = new ethers.ContractFactory(MelodyRNNArtifact.abi, MelodyRNNArtifact.bytecode, signer); const mldyImpl = await MelodyFac.deploy(); + await mldyImpl.deployed(); // const ProxyFac = new ethers.ContractFactory(EIP173ProxyWithReceiveArtifact.abi, EIP173ProxyWithReceiveArtifact.bytecode, signer); // const initData = MelodyFac.interface.encodeFunctionData("initialize", [params.model_name, nftContractAddress]); // const mldyProxy = await ProxyFac.deploy(mldyImpl.address, signer.address, initData); @@ -91,7 +92,7 @@ async function main() { const onchainModel = await upgrades.deployProxy( OnchainModel, [ - modelReg.address, + modelCollection.address, 0, params.model_name, mldy.address, @@ -107,7 +108,7 @@ async function main() { console.log("tx:", tx.hash); console.log("Minting new model"); - await mintModel(modelReg, onchainModel, MODEL_OWNER || signer.address, mintConfig); + await mintModel(modelCollection, onchainModel, MODEL_OWNER || signer.address, mintConfig); } main().catch((error) => { diff --git a/scripts/deploy-textrnn-model.ts b/scripts/deploy-textrnn-model.ts index a6ad237..52e0fcf 100644 --- a/scripts/deploy-textrnn-model.ts +++ b/scripts/deploy-textrnn-model.ts @@ -7,7 +7,7 @@ import { fromFloat } from './lib/utils'; import { getModelConfig, uploadModelWeights, mintModel } from './lib/modelLib'; dotenv.config(); -const ModelRegContractName = "ModelReg"; +const ModelCollectionContractName = "ModelCollection"; const MaxWeightLen = 1000; const mintPrice = ethers.utils.parseEther('0.1'); const mintConfig = { value: mintPrice }; @@ -54,13 +54,14 @@ async function main() { let nftContractAddress = MODELS_NFT_CONTRACT as string; - const modelReg = await ethers.getContractAt(ModelRegContractName, nftContractAddress); + const modelCollection = await ethers.getContractAt(ModelCollectionContractName, nftContractAddress); // deploy a TextRNN contract // TextRNN contract is too big (larger than 49152 bytes) to be deployed with ContractFactory const EaiFac = new ethers.ContractFactory(TextRNNArtifact.abi, TextRNNArtifact.bytecode, signer); const eaiImpl = await EaiFac.deploy(); + await eaiImpl.deployed(); // const ProxyFac = new ethers.ContractFactory(EIP173ProxyWithReceiveArtifact.abi, EIP173ProxyWithReceiveArtifact.bytecode, signer); // const initData = EaiFac.interface.encodeFunctionData("initialize", [params.model_name, params.classes_name, nftContractAddress]); // const mldyProxy = await ProxyFac.deploy(mldyImpl.address, signer.address, initData); @@ -91,7 +92,7 @@ async function main() { const onchainModel = await upgrades.deployProxy( OnchainModel, [ - modelReg.address, + modelCollection.address, 0, params.model_name, eai.address, @@ -107,7 +108,7 @@ async function main() { console.log("tx:", tx.hash); console.log("Minting new model"); - await mintModel(modelReg, onchainModel, MODEL_OWNER || signer.address, mintConfig); + await mintModel(modelCollection, onchainModel, MODEL_OWNER || signer.address, mintConfig); } main().catch((error) => { diff --git a/scripts/deployHybridModel.ts b/scripts/deployHybridModel.ts index 2f6894a..e25eb56 100644 --- a/scripts/deployHybridModel.ts +++ b/scripts/deployHybridModel.ts @@ -1,3 +1,5 @@ +import assert from 'assert'; +import { version } from 'chai'; import { ethers, network, upgrades } from 'hardhat'; async function deployHybridModel() { @@ -5,12 +7,32 @@ async function deployHybridModel() { const networkName = network.name.toUpperCase(); const HybridModel = await ethers.getContractFactory('HybridModel'); const WorkerHub = await ethers.getContractFactory('WorkerHub'); + const ModelCollection = await ethers.getContractFactory('ModelCollection'); + + const collectionAddress = config.collectionAddress; + assert.ok( + collectionAddress, + `Missing ${networkName}_COLLECTION_ADDRESS from environment variables!` + ); const workerHubAddress = config.workerHubAddress; const identifier = 0; - const name = 'Futuristic Fragment';//`Model ${identifier}`; - const url = '';//`abc.com/${identifier}`; - const inferenceCost = ethers.utils.parseEther('100'); + const name = 'Juggernaut XL';//`Model ${identifier}`; + const minHardware = 1; + const modelOwnerAddress = '0xB0D0c3C59B9101D0C98cD2235c03C43F1294cb95'; + const metadataObj = { + "version": 1, + "model_name": "Juggernaut XL", + "model_type": "image", + "model_url": "https://gateway.lighthouse.storage/ipfs/QmcFYMYpVodkpT6t1fVmWNjPnUnnQbXvwpqyheXvPGKUr8", + "model_file_hash": "7f1f29cb884c5b2f4d072b99afcb87f32cbe4adc88cffedab15ffc9fd30887ae", + "min_hardware": 1, + "verifier_url": "https://gateway.lighthouse.storage/ipfs/QmdkKEjx2fauzbPh1j5bUiQXrUG5Ft36pJGHS8awrN89Dc", + "verifier_file_hash": "492b2b3dea3003d359fe1b2cee77a22777d8a9faf942ab6dee81e6bfadaadec4", + } + + const metadata = JSON.stringify(metadataObj, null, "\t"); + console.log(metadata); const hybridModel = await upgrades.deployProxy( HybridModel, @@ -18,16 +40,26 @@ async function deployHybridModel() { workerHubAddress, identifier, name, - url, - inferenceCost + metadata ] ); await hybridModel.deployed(); + const collection = ModelCollection.attach(config.collectionAddress); + const mintReceipt = await (await collection.mint( + modelOwnerAddress, + metadata, + hybridModel.address + )).wait(); + const workerHub = WorkerHub.attach(workerHubAddress); - await workerHub.registerModel(hybridModel.address); + await workerHub.registerModel(hybridModel.address, minHardware, ethers.utils.parseEther('0.2')); console.log(`Contract HybridModel has been deployed to address ${hybridModel.address}`); + const newTokenEvent = mintReceipt.events?.find((event: ethers.Event) => event.event === 'NewToken'); + if (newTokenEvent) { + console.log("tokenId:", newTokenEvent.args?.tokenId); + } console.log(`${networkName}_HYBRID_MODEL_ADDRESS=${hybridModel.address}`); } diff --git a/scripts/deployModelCollection.ts b/scripts/deployModelCollection.ts new file mode 100644 index 0000000..0cfdcc1 --- /dev/null +++ b/scripts/deployModelCollection.ts @@ -0,0 +1,49 @@ +import assert from 'assert'; +import { ethers, network, upgrades } from 'hardhat'; + +async function deployModelCollection() { + const config = network.config as any; + const networkName = network.name.toUpperCase(); + const ModelCollection = await ethers.getContractFactory('ModelCollection'); + const modelCollectionAddress = config.collectionAddress ? + await (async () => { + await upgrades.upgradeProxy( + config.collectionAddress, + ModelCollection, + ); + console.log(`Contract ModelCollection has been updated to address ${config.collectionAddress}`); + return config.collectionAddress; + })() : + await (async () => { + const name = "Eternal AI" + const symbol = "" + const mintPrice = ethers.utils.parseEther('0'); + const royaltyReceiver = '0x451064E5B968858cD54f227Dba7b7F419eAC5BA9' + const royalPortion = 5_00; + const nextModelId = 100_001; + + const modelCollection = await upgrades.deployProxy( + ModelCollection, + [ + name, + symbol, + mintPrice, + royaltyReceiver, + royalPortion, + nextModelId + ] + ); + await modelCollection.deployed(); + + console.log(`Contract ModelCollection has been deployed to address ${modelCollection.address}`); + return modelCollection.address; + })(); + console.log(`${networkName}_COLLECTION_ADDRESS=${modelCollectionAddress}`); +} + +deployModelCollection() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/deployWorkerHub.ts b/scripts/deployWorkerHub.ts index 3d8e0f5..290fdc1 100644 --- a/scripts/deployWorkerHub.ts +++ b/scripts/deployWorkerHub.ts @@ -1,55 +1,66 @@ -import assert from 'assert'; -import { ethers, network, upgrades } from 'hardhat'; +import assert from "assert"; +import { ethers, network, upgrades } from "hardhat"; async function deployWorkerHub() { - const config = network.config as any; - const networkName = network.name.toUpperCase(); - const WorkerHub = await ethers.getContractFactory('WorkerHub'); - const workerHubAddress = config.workerHubAddress ? - await (async () => { - await upgrades.upgradeProxy( - config.workerHubAddress, - WorkerHub, - ); - console.log(`Contract WorkerHub has been updated to address ${config.workerHubAddress}`); - return config.workerHubAddress; - })() : - await (async () => { - const treasuryAddress = config.treasuryAddress; - assert.ok( - treasuryAddress, - `Missing ${networkName}_TREASURY_ADDRESS from environment variables!` - ); + const config = network.config as any; + const networkName = network.name.toUpperCase(); + const WorkerHub = await ethers.getContractFactory("WorkerHub"); + const workerHubAddress = config.workerHubAddress + ? await (async () => { + await upgrades.upgradeProxy(config.workerHubAddress, WorkerHub); + console.log( + `Contract WorkerHub has been updated to address ${config.workerHubAddress}` + ); + return config.workerHubAddress; + })() + : await (async () => { + const treasuryAddress = "0x451064E5B968858cD54f227Dba7b7F419eAC5BA9"; + const feePercentage = 10_00; + const minerMinimumStake = ethers.utils.parseEther("25000"); + const validatorMinimumStake = ethers.utils.parseEther("40000"); + const miningTimeLimit = 10 * 60; + const minerRequirement = 3; + const blockPerEpoch = 600; + const rewardPerEpochBasedOnPerf = ethers.utils.parseEther("0"); + const rewardPerEpoch = ethers.utils.parseEther("0"); + const unstakeDelayTime = 21 * 24 * 3600; + const penaltyDuration = 3600; + const finePercentage = 5_00; - const collectionAddress = config.collectionAddress || ethers.constants.AddressZero; + const workerHub = await upgrades.deployProxy(WorkerHub, [ + treasuryAddress, + feePercentage, + minerMinimumStake, + validatorMinimumStake, + miningTimeLimit, + minerRequirement, + blockPerEpoch, + rewardPerEpochBasedOnPerf, + rewardPerEpoch, + unstakeDelayTime, + penaltyDuration, + finePercentage, + ]); + await workerHub.deployed(); - const feePercentage = 10; - const royaltyPercentage = 10; - const minimumStake = ethers.constants.WeiPerEther; - const stakeLockingDuration = 0; + // const tx = { + // to: workerHub.address, + // value: ethers.utils.parseEther('1000') + // } + // + // await (await ethers.getSigners())[0].sendTransaction(tx); - - const workerHub = await upgrades.deployProxy( - WorkerHub, - [ - treasuryAddress, - collectionAddress, - feePercentage, - royaltyPercentage, - minimumStake, - stakeLockingDuration - ] - ); - await workerHub.deployed(); - console.log(`Contract WorkerHub has been deployed to address ${workerHub.address}`); - return workerHub.address; - })(); - console.log(`${networkName}_WORKER_HUB_ADDRESS=${workerHubAddress}`); + console.log( + `Contract WorkerHub has been deployed to address ${workerHub.address}` + ); + return workerHub.address; + })(); + console.log(`${networkName}_WORKER_HUB_ADDRESS=${workerHubAddress}`); } deployWorkerHub() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/image.task.ts b/scripts/image.task.ts index e2e9e9b..efeaef4 100644 --- a/scripts/image.task.ts +++ b/scripts/image.task.ts @@ -9,7 +9,7 @@ import { pixelsToImage, fromInt, toFloat, recursiveToFloat, recursiveToString } const ImageClassifierContractName = "ImageClassifier"; const OnchainModelContractName = "OnchainModel"; -const ModelRegContractName = "ModelReg"; +const ModelCollectionContractName = "ModelCollection"; async function inferModel(interfaceContract: ethers.Contract, pixels: ethers.BigNumber[][][]) { const abic = ethers.utils.defaultAbiCoder; @@ -32,7 +32,7 @@ async function inferModel(interfaceContract: ethers.Contract, pixels: ethers.Big task("eval-img", "evaluate model for each layer") .addOptionalParam("img", "image file name", "image.png", types.string) - .addOptionalParam("contract", "contract address", "", types.string) + .addOptionalParam("contract", "ModelCollection contract address", "", types.string) .addOptionalParam("id", "token id of model", "1", types.string) .setAction(async (taskArgs: any, hre: HardhatRuntimeEnvironment) => { const { ethers, deployments, getNamedAccounts } = hre; @@ -42,13 +42,13 @@ task("eval-img", "evaluate model for each layer") let contractAddress = taskArgs.contract; if (contractAddress === "") { - const baseContract = await deployments.get(ModelRegContractName); + const baseContract = await deployments.get(ModelCollectionContractName); contractAddress = baseContract.address; } - const modelRegContract = await ethers.getContractAt(ModelRegContractName, contractAddress, signer); + const ModelCollectionContract = await ethers.getContractAt(ModelCollectionContractName, contractAddress, signer); const tokenId = ethers.BigNumber.from(taskArgs.id); - const interfaceAddress = await modelRegContract.modelAddr(tokenId); + const interfaceAddress = await ModelCollectionContract.modelAddressOf(tokenId); const interfaceContract = await ethers.getContractAt(OnchainModelContractName, interfaceAddress, signer); const implementAddress = await interfaceContract.implementation(); @@ -90,12 +90,12 @@ task("get-image-model", "get eternal AI model") const [signer] = await ethers.getSigners(); let contractAddress = taskArgs.contract; if (contractAddress === "") { - const baseContract = await deployments.get(ModelRegContractName); + const baseContract = await deployments.get(ModelCollectionContractName); contractAddress = baseContract.address; } - const modelRegContract = await ethers.getContractAt(ModelRegContractName, contractAddress, signer); + const ModelCollectionContract = await ethers.getContractAt(ModelCollectionContractName, contractAddress, signer); const tokenId = ethers.BigNumber.from(taskArgs.id); - const interfaceAddress = await modelRegContract.modelAddr(tokenId); + const interfaceAddress = await ModelCollectionContract.modelAddressOf(tokenId); const interfaceContract = await ethers.getContractAt(OnchainModelContractName, interfaceAddress, signer); const implementAddress = await interfaceContract.implementation(); diff --git a/scripts/lib/modelLib.ts b/scripts/lib/modelLib.ts index 8b0ef8c..daf0085 100644 --- a/scripts/lib/modelLib.ts +++ b/scripts/lib/modelLib.ts @@ -246,7 +246,7 @@ export async function uploadModelWeights(model: ethers.Contract, weights: ethers } export async function mintModel( - modelReg: ethers.Contract, + modelCollection: ethers.Contract, model: ethers.Contract, owner: string, mintConfig: any @@ -262,16 +262,16 @@ export async function mintModel( try { const modelUri = ""; // unused - const tx = await modelReg.safeMint(owner, modelUri, model.address, {...mintConfig, gasLimit: 1_000_000 }); + const tx = await modelCollection.mint(owner, modelUri, model.address, {...mintConfig }); const rc = await tx.wait(); - // listen for Transfer event - const transferEvent = rc.events?.find((event: ethers.Event) => event.event === 'Transfer'); - if (transferEvent != null) { - const from = transferEvent.args?.from; - const to = transferEvent.args?.to; - const tokenId = transferEvent.args?.tokenId; + // listen for NewToken event + const newTokenEvent = rc.events?.find((event: ethers.Event) => event.event === 'NewToken'); + if (newTokenEvent != null) { + const model = newTokenEvent.args?.model; + const minter = newTokenEvent.args?.minter; + const tokenId = newTokenEvent.args?.tokenId; console.log("tx:", tx.hash); - console.log(`Minted new on-chain model, to=${to}, tokenId=${tokenId}`); + console.log(`Minted new on-chain model, tokenId=${tokenId}, model=${model}, minter=${minter}`); } // checkForDeployedModel(rc); } catch (e) { diff --git a/scripts/melody.task.ts b/scripts/melody.task.ts index 228553b..60a60a8 100644 --- a/scripts/melody.task.ts +++ b/scripts/melody.task.ts @@ -8,7 +8,7 @@ import { toInt } from "./lib/utils"; const MelodyRNNContractName = "MelodyRNN"; const OnchainModelContractName = "OnchainModel"; -const ModelRegContractName = "ModelReg"; +const ModelCollectionContractName = "ModelCollection"; async function inferModel(interfaceContract: ethers.Contract, noteCount: number, x: ethers.BigNumber[]) { const abic = ethers.utils.defaultAbiCoder; @@ -34,7 +34,7 @@ async function inferModel(interfaceContract: ethers.Contract, noteCount: number, } task("generate-melody", "evaluate model for each layer") - .addOptionalParam("contract", "modelRegistry contract address", "", types.string) + .addOptionalParam("contract", "ModelCollection contract address", "", types.string) .addOptionalParam("id", "token id of model", "1", types.string) .addOptionalParam("count", "number of step", 1, types.int) .addOptionalParam("steplen", "number of notes to generate per step", 1, types.int) @@ -48,13 +48,13 @@ task("generate-melody", "evaluate model for each layer") let contractAddress = taskArgs.contract; if (contractAddress === "") { - const baseContract = await deployments.get(ModelRegContractName); + const baseContract = await deployments.get(ModelCollectionContractName); contractAddress = baseContract.address; } - const modelRegContract = await ethers.getContractAt(ModelRegContractName, contractAddress, signer); + const modelCollectionContract = await ethers.getContractAt(ModelCollectionContractName, contractAddress, signer); const tokenId = ethers.BigNumber.from(taskArgs.id); - const interfaceAddress = await modelRegContract.modelAddr(tokenId); + const interfaceAddress = await modelCollectionContract.modelAddressOf(tokenId); const interfaceContract = await ethers.getContractAt(OnchainModelContractName, interfaceAddress, signer); const implementAddress = await interfaceContract.implementation(); @@ -109,12 +109,12 @@ task("get-melody-model", "get eternal AI model") const [signer] = await ethers.getSigners(); let contractAddress = taskArgs.contract; if (contractAddress === "") { - const baseContract = await deployments.get(ModelRegContractName); + const baseContract = await deployments.get(ModelCollectionContractName); contractAddress = baseContract.address; } - const modelRegContract = await ethers.getContractAt(ModelRegContractName, contractAddress, signer); + const modelCollectionContract = await ethers.getContractAt(ModelCollectionContractName, contractAddress, signer); const tokenId = ethers.BigNumber.from(taskArgs.id); - const modelAddress = await modelRegContract.modelAddr(tokenId); + const modelAddress = await modelCollectionContract.modelAddressOf(tokenId); console.log("Reading MelodyRNN model at address", modelAddress); const mldy = await ethers.getContractAt(MelodyRNNContractName, modelAddress, signer); // const model = await mldy.getInfo(tokenId); diff --git a/scripts/solearn-js/layers/Layers.ts b/scripts/solearn-js/layers/Layers.ts new file mode 100644 index 0000000..2234556 --- /dev/null +++ b/scripts/solearn-js/layers/Layers.ts @@ -0,0 +1,151 @@ +import { Tensors } from "../tensors/Tensors"; +import { Tensor1D } from "../tensors/Tensor1D"; +import { Tensor2D } from "../tensors/Tensor2D"; +import { Tensor3D } from "../tensors/Tensor3D"; +import { Tensor4D } from "../tensors/Tensor4D"; + +export class RescaleLayer { + scale: number; + offset: number; + + constructor(scale: number, offset: number) { + this.scale = scale; + this.offset = offset; + } + + forward(x: Tensor3D): Tensor3D { + // console.log("Rescale"); + return Tensor3D.rescale(x, this.scale, this.offset); + } +} + +export class FlattenLayer { + constructor() {} + + forward(x: Tensor3D): Tensor1D { + // console.log("Flatten"); + return Tensor3D.flat(x); + } +} + +export class DenseLayer { + input_dim: number; + out_dim: number; + activation: string; + bias: boolean; + w: Tensor2D; + b: Tensor1D; + + constructor(input_dim: number, out_dim: number, activation: string, bias: boolean, w: Tensor2D, b: Tensor1D) { + this.input_dim = input_dim; + this.out_dim = out_dim; + this.activation = activation; + this.bias = bias; + this.w = w; + this.b = b; + } + + forward(x: Tensor1D) { + console.log("Dense"); + // console.log(x); + // console.log(this.w); + // console.log(this.b); + const y = Tensor1D.add(Tensor1D.matMul(x, this.w), this.b); + const z = Tensor1D.activation(y, this.activation); + return z; + } +} + +export class MaxPooling2DLayer { + size: number[]; + stride: number[]; + padding: string; + + constructor(size: number[], stride: number[], padding: string) { + this.size = size; + this.stride = stride; + this.padding = padding; + } + + forward(x: Tensor3D): Tensor3D { + // console.log("MaxPooling2D"); + const y = Tensor3D.maxPooling2D(x, this.size, this.stride, this.padding); + return y; + } +} + +export class Conv2DLayer { + filters: number; + size: number[]; + stride: number[]; + padding: string; + activation: string; + w: Tensor4D; + b: Tensor1D; + + constructor(filters: number, size: number[], stride: number[], padding: string, activation: string, w: Tensor4D, b: Tensor1D) { + this.filters = filters; + this.size = size; + this.stride = stride; + this.padding = padding; + this.activation = activation; + this.w = w; + this.b = b; + } + + forward(x: Tensor3D): Tensor3D { + // console.log("Conv2D"); + const y = Tensor3D.conv2D(x, this.w, this.stride, this.padding); + const z = Tensor3D.add(y, this.b); + const t = Tensor3D.activation(z, this.activation); + return t; + } +} + +export class EmbeddingLayer { + inputDim: number; + outputDim: number; + w: Tensor2D; + + constructor(inputDim: number, outputDim: number, w: Tensor2D) { + this.inputDim = inputDim; + this.outputDim = outputDim; + this.w = w; + } + + forward(x: number): Tensor1D { + return new Tensor1D(this.w.mat[x]); + } +} + +export class SimpleRNNLayer { + units: number; + activation: string; + w_h: Tensor2D; + w_x: Tensor2D; + b: Tensor1D; + states: Tensor1D; + + constructor(units: number, activation: string, w_h: Tensor2D, w_x: Tensor2D, b: Tensor1D) { + this.units = units; + this.activation = activation; + this.w_h = w_h; + this.w_x = w_x; + this.b = b; + this.states = Tensor1D.zerosTensor(this.units); + } + + reset_state() { + this.states = Tensor1D.zerosTensor(this.units); + } + + forward(x: Tensor1D): Tensor1D { + // console.log("SimpleRNN"); + const y_h = Tensor1D.matMul(this.states, this.w_h); + const y_x = Tensor1D.matMul(x, this.w_x); + const y = Tensor1D.add(Tensor1D.add(y_h, y_x), this.b); + const z = Tensor1D.activation(y, this.activation); + this.states = z; + return z; + } +} diff --git a/scripts/solearn-js/models/Sequential.ts b/scripts/solearn-js/models/Sequential.ts new file mode 100644 index 0000000..65c62b0 --- /dev/null +++ b/scripts/solearn-js/models/Sequential.ts @@ -0,0 +1,170 @@ +import { + RescaleLayer, + FlattenLayer, + DenseLayer, + MaxPooling2DLayer, + Conv2DLayer, + EmbeddingLayer, + SimpleRNNLayer, +} from "../layers/Layers"; + +import { Tensors } from "../tensors/Tensors"; +import { Tensor1D } from "../tensors/Tensor1D"; +import { Tensor2D } from "../tensors/Tensor2D"; +import { Tensor3D } from "../tensors/Tensor3D"; +import { Tensor4D } from "../tensors/Tensor4D"; + +import { base64ToFloatArray } from '../utils/utils'; + +class SequentialModel { + layers: any[]; + + constructor(layers: any[]) { + this.layers = layers; + } + + forward(x: any) { + // console.log(x); + for (const layer of this.layers) { + x = layer.forward(x); + // console.log(x); + } + return x; + } +} + +export class ImageClassifier extends SequentialModel { + forward(x: Tensor3D): Tensor1D { + return super.forward(x); + } +} + +export function loadModel(layersConfig: any, weights_b64: string, type: { new(...args : any[]): T ;}): { model: T, inputDim: any } { + const layers = []; + + const weights = base64ToFloatArray(weights_b64); + + let dim: any = null; + let p = 0; + let inputDim = []; + for(const info of layersConfig.config.layers) { + // console.log(info.class_name); + if (info.class_name == "InputLayer") { + dim = info.config.batch_input_shape.slice(1); + if (dim.length == 1 && dim[0] == null) { + dim = 1; + } + inputDim = dim; + } else if (info.class_name == "Rescaling") { + layers.push(new RescaleLayer(info.config.scale, info.config.offset)) + } else if (info.class_name == "Flatten") { + layers.push(new FlattenLayer()) + dim = [dim.reduce((a: number, b: number) => a * b)] + } else if (info.class_name == "Dense") { + const nxt_dim = [info.config.units]; + const w_size = dim[0] * nxt_dim[0]; + const b_size = nxt_dim[0]; + + const w_array = Array.from(weights.subarray(p, p + w_size)); + p += w_size; + const b_array = Array.from(weights.subarray(p, p + b_size)); + p += b_size; + + const w_tensor = Tensor2D.load(w_array, dim[0], nxt_dim[0]); + const b_tensor = Tensor1D.load(b_array, nxt_dim[0]); + const activation = info.config.activation; + + // console.log(w_tensor); + // console.log(b_tensor); + + layers.push(new DenseLayer(dim, nxt_dim[0], activation, true, w_tensor, b_tensor)); + + dim = nxt_dim; + } else if (info.class_name == "MaxPooling2D") { + const [w, h, d] = dim; + const [f_w, f_h] = info.config.pool_size; + const [s_w, s_h] = info.config.strides; + const padding = info.config.padding; + + layers.push(new MaxPooling2DLayer([f_w, f_h], [s_w, s_h], padding)); + + const { out } = Tensors.getConvSize([w, h], [f_w, f_h], [s_w, s_h], padding); + dim = [out[0], out[1], d]; + // console.log(L, R, T, B); + } else if (info.class_name == "Conv2D") { + const [w, h, d] = dim; + const [f_w, f_h] = info.config.kernel_size; + const [s_w, s_h] = info.config.strides; + const filters = info.config.filters + const padding = info.config.padding; + const activation = info.config.activation; + + const w_size = f_w * f_h * d * filters; + const b_size = filters; + + const w_array = Array.from(weights.subarray(p, p + w_size)); + p += w_size; + const b_array = Array.from(weights.subarray(p, p + b_size)); + p += b_size; + + const w_tensor = Tensor4D.load(w_array, f_w, f_h, d, filters); + const b_tensor = Tensor1D.load(b_array, filters); + + // console.log(w_tensor); + // console.log(b_tensor); + + layers.push(new Conv2DLayer(filters, [f_w, f_h], [s_w, s_h], padding, activation, w_tensor, b_tensor)); + + const { out } = Tensors.getConvSize([w, h], [f_w, f_h], [s_w, s_h], padding); + dim = [out[0], out[1], filters]; + // console.log(L, R, T, B); + } else if (info.class_name == "Embedding") { + const inputDim = info.config.input_dim; + const outputDim = info.config.output_dim; + + const w_size = inputDim * outputDim; + + const w_array = Array.from(weights.subarray(p, p + w_size)); + p += w_size; + + const w_tensor = Tensor2D.load(w_array, inputDim, outputDim); + + // console.log(w_tensor); + // console.log(b_tensor); + + layers.push(new EmbeddingLayer(inputDim, outputDim, w_tensor)); + + dim = [outputDim]; + } else if (info.class_name == "SimpleRNN") { + const units = info.config.units; + const activation = info.config.activation; + const inputDim = dim[0]; + + const wx_size = inputDim * units; + const wx_array = Array.from(weights.subarray(p, p + wx_size)); + p += wx_size; + const wx_tensor = Tensor2D.load(wx_array, inputDim, units); + + const wh_size = units * units; + const wh_array = Array.from(weights.subarray(p, p + wh_size)); + p += wh_size; + const wh_tensor = Tensor2D.load(wh_array, units, units); + + const b_size = units; + const b_array = Array.from(weights.subarray(p, p + b_size)); + p += b_size; + const b_tensor = Tensor1D.load(b_array, units); + + // console.log(w_tensor); + // console.log(b_tensor); + + layers.push(new SimpleRNNLayer(units, activation, wh_tensor, wx_tensor, b_tensor)); + + dim = [units]; + } + // console.log(dim); + } + const model = new type(layers); + + return { model, inputDim }; +} diff --git a/scripts/solearn-js/tensors/Tensor1D.ts b/scripts/solearn-js/tensors/Tensor1D.ts new file mode 100644 index 0000000..a287a50 --- /dev/null +++ b/scripts/solearn-js/tensors/Tensor1D.ts @@ -0,0 +1,120 @@ +import { Tensors } from "./Tensors"; +import type { Tensor2D } from "./Tensor2D"; + +export class Tensor1D { + n: number; + mat: number[]; + + constructor(mat?: number[]) { + if (mat) { + this.n = mat.length; + this.mat = mat; + } else { + this.n = 0; + this.mat = []; + } + } + + static emptyTensor(n: number): Tensor1D { + const ts = new Tensor1D(); + ts.n = n; + return ts; + } + + static load(data: number[], n: number): Tensor1D { + const ts = Tensor1D.emptyTensor(n); + let ptr = 0; + for(let i = 0; i < n; ++i) { + ts.mat.push(ptr < data.length ? data[ptr] : 0.0); + ptr += 1; + } + return ts; + } + + static zerosTensor(n: number): Tensor1D { + return Tensor1D.load([], n); + } + + static cloneTensor(ts: Tensor1D): Tensor1D { + return Tensor1D.load(ts.mat, ts.n); + } + + static __apply_unary_op(a: Tensor1D, op: (x: number) => number): Tensor1D { + const res = Tensor1D.zerosTensor(a.n); + for(let i = 0; i < res.n; ++i) { + res.mat[i] = op(a.mat[i]); + } + return res; + } + + static __apply_binary_op(a: Tensor1D, b: Tensor1D, op: (x: number, y: number) => number): Tensor1D { + const res = Tensor1D.zerosTensor(a.n); + for(let i = 0; i < res.n; ++i) { + res.mat[i] = op(a.mat[i], b.mat[i]); + } + return res; + } + + static activation(a: Tensor1D, name: string): Tensor1D { + switch (name) { + case "relu": + return Tensor1D.__apply_unary_op(a, Tensors.__relu); + case "sigmoid": + return Tensor1D.__apply_unary_op(a, Tensors.__sigmoid); + case "tanh": + return Tensor1D.__apply_unary_op(a, Tensors.__tanh); + case "leaky_relu": + return Tensor1D.__apply_unary_op(a, Tensors.__leaky_relu); + case "linear": + default: + return Tensor1D.__apply_unary_op(a, Tensors.__linear); + } + } + + static add(a: Tensor1D, b: Tensor1D): Tensor1D { + return Tensor1D.__apply_binary_op(a, b, Tensors.__add); + } + + static add_scalar(a: Tensor1D, num: number): Tensor1D { + const res = Tensor1D.zerosTensor(a.n); + for(let i = 0; i < res.n; ++i) { + res.mat[i] = a.mat[i] + num; + } + return res; + } + + static mul(a: Tensor1D, b: Tensor1D): Tensor1D { + return Tensor1D.__apply_binary_op(a, b, Tensors.__mul); + } + + static mul_scalar(a: Tensor1D, num: number): Tensor1D { + const res = Tensor1D.zerosTensor(a.n); + for(let i = 0; i < res.n; ++i) { + res.mat[i] = a.mat[i] * num; + } + return res; + } + + static rescale(a: Tensor1D, scale: number, offset: number): Tensor1D { + return Tensor1D.__apply_unary_op(a, (x) => x * scale + offset); + } + + static matMul(a: Tensor1D, b: Tensor2D): Tensor1D { + const res = Tensor1D.zerosTensor(b.m); + for (let j = 0; j < b.m; j++) { + for (let k = 0; k < b.n; k++) { + res.mat[j] = res.mat[j] + a.mat[k] * b.mat[k][j]; + } + } + return res; + } + + static softmax(a: Tensor1D): Tensor1D { + const res = Tensor1D.__apply_unary_op(a, x => Math.exp(x)); + const sum_e = res.mat.reduce((a, b) => a + b); + for(let i = 0; i < a.n; ++i) { + res.mat[i] /= sum_e; + } + return res; + } +} diff --git a/scripts/solearn-js/tensors/Tensor2D.ts b/scripts/solearn-js/tensors/Tensor2D.ts new file mode 100644 index 0000000..a9949a1 --- /dev/null +++ b/scripts/solearn-js/tensors/Tensor2D.ts @@ -0,0 +1,140 @@ +import { Tensors } from "./Tensors"; + +export class Tensor2D { + n: number; + m: number; + mat: number[][]; + + constructor(mat?: number[][]) { + if (mat) { + this.n = mat.length; + this.m = mat[0].length; + this.mat = mat; + } else { + this.n = 0; + this.m = 0; + this.mat = []; + } + } + + static emptyTensor(n: number, m: number): Tensor2D { + const ts = new Tensor2D(); + ts.n = n; + ts.m = m; + for(let i = 0; i < n; ++i) { + ts.mat.push([]); + } + return ts; + } + + static load(data: number[], n: number, m: number): Tensor2D { + const ts = Tensor2D.emptyTensor(n, m); + let ptr = 0; + for(let i = 0; i < n; ++i) { + for(let j = 0; j < m; ++j) { + ts.mat[i].push(ptr < data.length ? data[ptr] : 0.0); + ptr += 1; + } + } + return ts; + } + + static zerosTensor(n: number, m: number): Tensor2D { + return Tensor2D.load([], n, m); + } + + static cloneTensor(ts: Tensor2D): Tensor2D { + return Tensor2D.load(ts.mat.flat(), ts.n, ts.m); + } + + static __apply_unary_op(a: Tensor2D, op: (x: number) => number): Tensor2D { + const res = Tensor2D.zerosTensor(a.n, a.m); + for(let i = 0; i < res.n; ++i) { + for(let j = 0; j < res.m; ++j) { + res.mat[i][j] = op(a.mat[i][j]); + } + } + return res; + } + + static activation(a: Tensor2D, name: string): Tensor2D { + switch (name) { + case "relu": + return Tensor2D.__apply_unary_op(a, Tensors.__relu); + case "sigmoid": + return Tensor2D.__apply_unary_op(a, Tensors.__sigmoid); + case "tanh": + return Tensor2D.__apply_unary_op(a, Tensors.__tanh); + case "leaky_relu": + return Tensor2D.__apply_unary_op(a, Tensors.__leaky_relu); + case "linear": + default: + return Tensor2D.__apply_unary_op(a, Tensors.__linear); + } + } + + static __apply_binary_op = (a: Tensor2D, b: Tensor2D, op: (x: number, y: number) => number): Tensor2D => { + const res = Tensor2D.zerosTensor(a.n, a.m); + for(let i = 0; i < res.n; ++i) { + for(let j = 0; j < res.m; ++j) { + res.mat[i][j] = op(a.mat[i][j], b.mat[i][j]); + } + } + return res; + } + + static add(a: Tensor2D, b: Tensor2D): Tensor2D { + return Tensor2D.__apply_binary_op(a, b, Tensors.__add); + } + + static add_scalar(a: Tensor2D, num: number): Tensor2D { + const res = Tensor2D.zerosTensor(a.n, a.m); + for(let i = 0; i < res.n; ++i) { + for(let j = 0; j < res.m; ++j) { + res.mat[i][j] = a.mat[i][j] + num; + } + } + return res; + } + + static mul(a: Tensor2D, b: Tensor2D): Tensor2D { + return Tensor2D.__apply_binary_op(a, b, Tensors.__mul); + } + + static mul_scalar(a: Tensor2D, num: number): Tensor2D { + const res = Tensor2D.zerosTensor(a.n, a.m); + for(let i = 0; i < res.n; ++i) { + for(let j = 0; j < res.m; ++j) { + res.mat[i][j] = a.mat[i][j] * num; + } + } + return res; + } + + static rescale(a: Tensor2D, scale: number, offset: number): Tensor2D { + return Tensor2D.__apply_unary_op(a, (x) => x * scale + offset); + } + + static matMul(a: Tensor2D, b: Tensor2D): Tensor2D { + const res = Tensor2D.zerosTensor(a.n, b.m); + for(let i = 0; i < res.n; ++i) { + for(let j = 0; j < res.m; ++j) { + for(let k = 0; k < a.m; ++k) { + res.mat[i][j] += a.mat[i][k] * b.mat[k][j]; + } + } + } + return res; + } + + static softmax(a: Tensor2D): Tensor2D { + const res = Tensor2D.__apply_unary_op(a, x => Math.exp(x)); + const sum_e = res.mat.flat().reduce((a, b) => a + b); + for(let i = 0; i < a.n; ++i) { + for(let j = 0; j < a.m; ++j) { + res.mat[i][j] /= sum_e; + } + } + return res; + } +} diff --git a/scripts/solearn-js/tensors/Tensor3D.ts b/scripts/solearn-js/tensors/Tensor3D.ts new file mode 100644 index 0000000..fd98f09 --- /dev/null +++ b/scripts/solearn-js/tensors/Tensor3D.ts @@ -0,0 +1,212 @@ +import { Tensors } from "./Tensors"; +import { Tensor1D } from "./Tensor1D"; +import type { Tensor4D } from "./Tensor4D"; + +export class Tensor3D { + n: number; + m: number; + p: number; + mat: number[][][]; + + constructor(mat?: number[][][]) { + if (mat) { + this.n = mat.length; + this.m = mat[0].length; + this.p = mat[0][0].length; + this.mat = mat; + } else { + this.n = 0; + this.m = 0; + this.p = 0; + this.mat = []; + } + } + + static emptyTensor(n: number, m: number, p: number): Tensor3D { + const ts = new Tensor3D(); + ts.n = n; + ts.m = m; + ts.p = p; + for(let i = 0; i < n; ++i) { + ts.mat.push([]); + for(let j = 0; j < m; ++j) { + ts.mat[i].push([]); + } + } + return ts; + } + + static load(data: number[], n: number, m: number, p: number): Tensor3D { + const ts = Tensor3D.emptyTensor(n, m, p); + let ptr = 0; + for(let i = 0; i < n; ++i) { + for(let j = 0; j < m; ++j) { + for(let k = 0; k < p; ++k) { + ts.mat[i][j].push(ptr < data.length ? data[ptr] : 0.0); + ptr += 1; + } + } + } + return ts; + } + + static zerosTensor(n: number, m: number, p: number): Tensor3D { + return Tensor3D.load([], n, m, p); + } + + static cloneTensor(ts: Tensor3D): Tensor3D { + return Tensor3D.load(ts.mat.flat(2), ts.n, ts.m, ts.p); + } + + static flat(a: Tensor3D): Tensor1D { + return new Tensor1D(a.mat.flat(2)); + } + + static __apply_unary_op(a: Tensor3D, op: (x: number) => number): Tensor3D { + const res = Tensor3D.emptyTensor(a.n, a.m, a.p); + for(let i = 0; i < res.n; ++i) { + for(let j = 0; j < res.m; ++j) { + for(let k = 0; k < res.p; ++k) { + res.mat[i][j][k] = op(a.mat[i][j][k]); + } + } + } + return res; + } + + static activation(a: Tensor3D, name: string): Tensor3D { + switch (name) { + case "relu": + return Tensor3D.__apply_unary_op(a, Tensors.__relu); + case "sigmoid": + return Tensor3D.__apply_unary_op(a, Tensors.__sigmoid); + case "tanh": + return Tensor3D.__apply_unary_op(a, Tensors.__tanh); + case "leaky_relu": + return Tensor3D.__apply_unary_op(a, Tensors.__leaky_relu); + case "linear": + default: + return Tensor3D.__apply_unary_op(a, Tensors.__linear); + } + } + + static __apply_binary_op = (a: Tensor3D, b: Tensor3D, op: (x: number, y: number) => number): Tensor3D => { + const res = Tensor3D.emptyTensor(a.n, a.m, a.p); + for(let i = 0; i < res.n; ++i) { + for(let j = 0; j < res.m; ++j) { + for(let k = 0; k < res.p; ++k) { + res.mat[i][j][k] = op(a.mat[i][j][k], b.mat[i][j][k]); + } + } + } + return res; + } + + static add(a: Tensor3D, b: Tensor3D): Tensor3D { + return Tensor3D.__apply_binary_op(a, b, Tensors.__add); + } + + static add_scalar(a: Tensor3D, num: number): Tensor3D { + const res = Tensor3D.zerosTensor(a.n, a.m, a.p); + for(let i = 0; i < res.n; ++i) { + for(let j = 0; j < res.m; ++j) { + for(let k = 0; k < res.p; ++k) { + res.mat[i][j][k] = a.mat[i][j][k] + num; + } + } + } + return res; + } + + static mul(a: Tensor3D, b: Tensor3D): Tensor3D { + return Tensor3D.__apply_binary_op(a, b, Tensors.__mul); + } + + static mul_scalar(a: Tensor3D, num: number): Tensor3D { + const res = Tensor3D.zerosTensor(a.n, a.m, a.p); + for(let i = 0; i < res.n; ++i) { + for(let j = 0; j < res.m; ++j) { + for(let k = 0; k < res.p; ++k) { + res.mat[i][j][k] = a.mat[i][j][k] * num; + } + } + } + return res; + } + + static rescale(a: Tensor3D, scale: number, offset: number): Tensor3D { + return Tensor3D.__apply_unary_op(a, (x) => x * scale + offset); + } + + // Input: (W, H, D) + // Filter: (F_W, F_H, D, K) + static conv2D(a: Tensor3D, b: Tensor4D, stride: number[], padding: string) { + const w = a.n, h = a.m, d = a.p; + const f_w = b.n, f_h = b.m, k = b.q; + const size = [f_w, f_h]; + const { out, pad } = Tensors.getConvSize([w, h], size, stride, padding); + + const res = Tensor3D.zerosTensor(out[0], out[1], k); + for(let x = 0; x < out[0]; ++x) { + for(let y = 0; y < out[1]; ++y) { + for(let p = 0; p < k; ++p) { + let cell = 0; + for(let dx = 0; dx < size[0]; ++dx) { + for(let dy = 0; dy < size[1]; ++dy) { + const X = x*stride[0] + dx - pad[0], Y = y*stride[1] + dy - pad[1]; + if (X >= 0 && X < w && Y >= 0 && Y < h) { + for(let q = 0; q < d; ++q) { + cell += a.mat[X][Y][q] * b.mat[dx][dy][q][p]; + } + } + } + } + res.mat[x][y][p] = cell; + } + } + } + + // console.log(res); + + return res; + } + + // Input: (W, H, D) + static maxPooling2D(a: Tensor3D, size: number[], stride: number[], padding: string) { + const w = a.n, h = a.m, d = a.p; + const { out, pad } = Tensors.getConvSize([w, h], size, stride, padding); + + const res = Tensor3D.zerosTensor(out[0], out[1], d); + for(let x = 0; x < out[0]; ++x) { + for(let y = 0; y < out[1]; ++y) { + for(let p = 0; p < d; ++p) { + let cell = -1e9; + for(let dx = 0; dx < size[0]; ++dx) { + for(let dy = 0; dy < size[1]; ++dy) { + const X = x*stride[0] + dx - pad[0], Y = y*stride[1] + dy - pad[1]; + const isIn = (X >= 0 && X < w && Y >= 0 && Y < h); + const val = isIn ? a.mat[X][Y][p] : 0; + cell = Math.max(cell, val); + } + } + res.mat[x][y][p] = cell; + } + } + } + + return res; + } + + static softmax(a: Tensor3D): Tensor3D { + const res = Tensor3D.__apply_unary_op(a, x => Math.exp(x)); + const sum_e = res.mat.flat(2).reduce((a, b) => a + b); + for(let i = 0; i < a.n; ++i) { + for(let j = 0; j < a.m; ++j) { + for(let k = 0; k < a.p; ++k) { + res.mat[i][j][k] /= sum_e; + } + } + } + return res; + } +} diff --git a/scripts/solearn-js/tensors/Tensor4D.ts b/scripts/solearn-js/tensors/Tensor4D.ts new file mode 100644 index 0000000..6b962a4 --- /dev/null +++ b/scripts/solearn-js/tensors/Tensor4D.ts @@ -0,0 +1,240 @@ +import { Tensors } from "./Tensors"; +import { Tensor1D } from "./Tensor1D"; +import { Tensor2D } from "./Tensor2D"; + +export class Tensor4D { + n: number; + m: number; + p: number; + q: number; + mat: number[][][][]; + + constructor(mat?: number[][][][]) { + if (mat) { + this.n = mat.length; + this.m = mat[0].length; + this.p = mat[0][0].length; + this.q = mat[0][0][0].length; + this.mat = mat; + } else { + this.n = 0; + this.m = 0; + this.p = 0; + this.q = 0; + this.mat = []; + } + } + + static emptyTensor(n: number, m: number, p: number, q: number): Tensor4D { + const ts = new Tensor4D(); + ts.n = n; + ts.m = m; + ts.p = p; + ts.q = q; + for(let i = 0; i < n; ++i) { + ts.mat.push([]); + for(let j = 0; j < m; ++j) { + ts.mat[i].push([]); + for(let k = 0; k < p; ++k) { + ts.mat[i][j].push([]); + } + } + } + return ts; + } + + static load(data: number[], n: number, m: number, p: number, q: number): Tensor4D { + const ts = Tensor4D.emptyTensor(n, m, p, q); + let ptr = 0; + for(let i = 0; i < n; ++i) { + for(let j = 0; j < m; ++j) { + for(let k = 0; k < p; ++k) { + for(let l = 0; l < q; ++l) { + ts.mat[i][j][k].push(ptr < data.length ? data[ptr] : 0.0); + ptr += 1; + } + } + } + } + return ts; + } + + + static zerosTensor(n: number, m: number, p: number, q: number): Tensor4D { + return Tensor4D.load([], n, m, p, q); + } + + static cloneTensor(ts: Tensor4D): Tensor4D { + return Tensor4D.load(ts.mat.flat(3), ts.n, ts.m, ts.p, ts.q); + } + + static flat(a: Tensor4D): Tensor1D { + return new Tensor1D(a.mat.flat(3)); + } + + static flatKeep1stDim(a: Tensor4D): Tensor2D { + return Tensor2D.load(a.mat.flat(3), a.n, a.m * a.p * a.q); + } + + static __apply_unary_op(a: Tensor4D, op: (x: number) => number): Tensor4D { + const res = Tensor4D.emptyTensor(a.n, a.m, a.p, a.q); + for(let i = 0; i < res.n; ++i) { + for(let j = 0; j < res.m; ++j) { + for(let k = 0; k < res.p; ++k) { + for(let l = 0; l < res.q; ++l) { + res.mat[i][j][k][l] = op(a.mat[i][j][k][l]); + } + } + } + } + return res; + } + + static activation(a: Tensor4D, name: string): Tensor4D { + switch (name) { + case "relu": + return Tensor4D.__apply_unary_op(a, Tensors.__relu); + case "sigmoid": + return Tensor4D.__apply_unary_op(a, Tensors.__sigmoid); + case "tanh": + return Tensor4D.__apply_unary_op(a, Tensors.__tanh); + case "leaky_relu": + return Tensor4D.__apply_unary_op(a, Tensors.__leaky_relu); + case "linear": + default: + return Tensor4D.__apply_unary_op(a, Tensors.__linear); + } + } + + static __apply_binary_op = (a: Tensor4D, b: Tensor4D, op: (x: number, y: number) => number): Tensor4D => { + const res = Tensor4D.emptyTensor(a.n, a.m, a.p, a.q); + for(let i = 0; i < res.n; ++i) { + for(let j = 0; j < res.m; ++j) { + for(let k = 0; k < res.p; ++k) { + for(let l = 0; l < res.p; ++l) { + res.mat[i][j][k][l] = op(a.mat[i][j][k][l], b.mat[i][j][k][l]); + } + } + } + } + return res; + } + + static add(a: Tensor4D, b: Tensor4D): Tensor4D { + return Tensor4D.__apply_binary_op(a, b, Tensors.__add); + } + + static add_scalar(a: Tensor4D, num: number): Tensor4D { + const res = Tensor4D.zerosTensor(a.n, a.m, a.p, a.q); + for(let i = 0; i < res.n; ++i) { + for(let j = 0; j < res.m; ++j) { + for(let k = 0; k < res.p; ++k) { + for(let l = 0; l < res.p; ++l) { + res.mat[i][j][k][l] = a.mat[i][j][k][l] + num; + } + } + } + } + return res; + } + + static mul(a: Tensor4D, b: Tensor4D): Tensor4D { + return Tensor4D.__apply_binary_op(a, b, Tensors.__mul); + } + + static mul_scalar(a: Tensor4D, num: number): Tensor4D { + const res = Tensor4D.zerosTensor(a.n, a.m, a.p, a.q); + for(let i = 0; i < res.n; ++i) { + for(let j = 0; j < res.m; ++j) { + for(let k = 0; k < res.p; ++k) { + for(let l = 0; l < res.p; ++l) { + res.mat[i][j][k][l] = a.mat[i][j][k][l] * num; + } + } + } + } + return res; + } + + static rescale(a: Tensor4D, scale: number, offset: number): Tensor4D { + return Tensor4D.__apply_unary_op(a, (x) => x * scale + offset); + } + + // Input: (N, W, H, D) + // Filter: (F_W, F_H, D, K) + static conv2D(a: Tensor4D, b: Tensor4D, stride: number[], padding: string) { + const n = a.n, w = a.m, h = a.p, d = a.q; + const f_w = b.n, f_h = b.m, k = b.q; + const size = [f_w, f_h]; + const { out, pad } = Tensors.getConvSize([w, h], size, stride, padding); + + const res = Tensor4D.zerosTensor(n, out[0], out[1], k); + for(let i = 0; i < n; ++i) { + for(let x = 0; x < out[0]; ++x) { + for(let y = 0; y < out[1]; ++y) { + for(let p = 0; p < k; ++p) { + let cell = 0; + for(let dx = 0; dx < size[0]; ++dx) { + for(let dy = 0; dy < size[1]; ++dy) { + const X = x*stride[0] + dx - pad[0], Y = y*stride[1] + dy - pad[1]; + if (X >= 0 && X < w && Y >= 0 && Y < h) { + for(let q = 0; q < d; ++q) { + cell += a.mat[i][X][Y][q] * b.mat[dx][dy][q][p]; + } + } + } + } + res.mat[i][x][y][p] = cell; + } + } + } + } + + // console.log(res); + + return res; + } + + // Input: (N, W, H, D) + static maxPooling2D(a: Tensor4D, size: number[], stride: number[], padding: string) { + const n = a.n, w = a.m, h = a.p, d = a.q; + const { out, pad } = Tensors.getConvSize([w, h], size, stride, padding); + + const res = Tensor4D.zerosTensor(n, out[0], out[1], d); + for(let i = 0; i < n; ++i) { + for(let x = 0; x < out[0]; ++x) { + for(let y = 0; y < out[1]; ++y) { + for(let p = 0; p < d; ++p) { + let cell = -1e9; + for(let dx = 0; dx < size[0]; ++dx) { + for(let dy = 0; dy < size[1]; ++dy) { + const X = x*stride[0] + dx - pad[0], Y = y*stride[1] + dy - pad[1]; + const isIn = (X >= 0 && X < w && Y >= 0 && Y < h); + const val = isIn ? a.mat[i][X][Y][p] : 0; + cell = Math.max(cell, val); + } + } + res.mat[i][x][y][p] = cell; + } + } + } + } + + return res; + } + + static softmax(a: Tensor4D): Tensor4D { + const res = Tensor4D.__apply_unary_op(a, x => Math.exp(x)); + const sum_e = res.mat.flat(3).reduce((a, b) => a + b); + for(let i = 0; i < a.n; ++i) { + for(let j = 0; j < a.m; ++j) { + for(let k = 0; k < a.p; ++k) { + for(let l = 0; l < a.q; ++l) { + res.mat[i][j][k][l] /= sum_e; + } + } + } + } + return res; + } +} diff --git a/scripts/solearn-js/tensors/Tensors.ts b/scripts/solearn-js/tensors/Tensors.ts new file mode 100644 index 0000000..b3facd5 --- /dev/null +++ b/scripts/solearn-js/tensors/Tensors.ts @@ -0,0 +1,30 @@ +export class Tensors { + static __linear = (x: number): number => x; + static __relu = (x: number): number => Math.max(x, 0); + static __leaky_relu = (x: number): number => x > 0 ? x : x * 0.2; + static __sigmoid = (x: number): number => 1 / (1 + Math.exp(-x)); + static __tanh = (x: number): number => Math.tanh(x); + + static __add = (a: number, b: number): number => a + b; + static __mul = (a: number, b: number): number => a * b; + + static __subMax0(a: number, b: number): number { + return a > b ? a - b : 0; + } + + static getConvSize(dim: number[], size: number[], stride: number[], padding: string) { + const out = [], pad = []; + for(let i = 0; i < 2; ++i) { + if (padding == "same") { + out.push((dim[i] + stride[i] - 1) / stride[i]); + const total_pad = (dim[i] % stride[i] == 0) ? Math.max(size[i] - stride[i], 0) : Math.max(size[i] - dim[i] % stride[i], 0); + pad.push(total_pad / 2); + } else if (padding == "valid") { + // TODO: What if dim[i] < size[i] + out.push((dim[i] - size[i]) / stride[i] + 1); + pad.push(0); + } + } + return { out, pad }; + } +} diff --git a/scripts/solearn-js/test_sequential.ts b/scripts/solearn-js/test_sequential.ts new file mode 100644 index 0000000..3ca2173 --- /dev/null +++ b/scripts/solearn-js/test_sequential.ts @@ -0,0 +1,62 @@ +import { ethers } from "hardhat"; +import fs from 'fs'; +import sharp from 'sharp'; +import { ImageClassifier, loadModel } from "./models/Sequential"; +import { Tensor3D } from "./tensors/Tensor3D"; +import { Tensor1D } from "./tensors/Tensor1D"; + +export function pixelsToImage(pixels: number[], h: number, w: number, c: number): number[][][] { + let ptr = 0; + let img: number[][][] = []; + for(let i = 0; i < h; ++i) { + img.push([]); + for(let j = 0; j < w; ++j) { + img[i].push([]); + for(let k = 0; k < c; ++k) { + img[i][j].push(pixels[ptr]); + ++ptr; + } + } + } + return img; +} + +async function main() { + const modelPath = 'sample-models/nft_mlp_10x10.json'; + const imgPath = 'sample-images/nft/cryptoadz/000.png'; + + const modelJson = fs.readFileSync(modelPath).toString(); + const modelObj = JSON.parse(modelJson); + + const layersConfig = modelObj.layers_config; + const weight_b64 = modelObj.weight_b64; + const classesName = modelObj.classes_name; + + const { model, inputDim } = loadModel(layersConfig, weight_b64, ImageClassifier); + + const imgRaw = fs.readFileSync(imgPath); + console.log("imgRaw: ", imgRaw); + + const h = inputDim[0]; + const w = inputDim[1]; + + const img = sharp(imgRaw); + const imgBuffer = await img.removeAlpha().resize(w, h).raw().toBuffer(); + const imgArray = [...imgBuffer]; + const pixels = pixelsToImage(imgArray, h, w, 3); + + const pixelsTensor = new Tensor3D(pixels) + + const logits = model.forward(pixelsTensor); + const probs = Tensor1D.softmax(logits).mat; + + const prediction = probs.indexOf(Math.max(...probs)) + console.log(classesName[prediction], probs[prediction]); +} + +// We recommend this pattern to be able to use async/await everywhere +// and properly handle errors. +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/scripts/solearn-js/utils/utils.ts b/scripts/solearn-js/utils/utils.ts new file mode 100644 index 0000000..d66e14f --- /dev/null +++ b/scripts/solearn-js/utils/utils.ts @@ -0,0 +1,8 @@ +// Modified from https://gist.github.com/sketchpunk/f5fa58a56dcfe6168a9328e7c32a4fd4 +export function base64ToFloatArray(base64: string): Float32Array { + // Base64 string converted to a char array + const blob = Buffer.from(base64, 'base64'); + // Convert raw buffer to Float32Array + const floatArray = new Float32Array(blob.buffer); + return floatArray; +} \ No newline at end of file diff --git a/scripts/textrnn.task.ts b/scripts/textrnn.task.ts index 47d6ad8..a5bf05d 100644 --- a/scripts/textrnn.task.ts +++ b/scripts/textrnn.task.ts @@ -8,7 +8,7 @@ import { runeToText, isRune } from "./rune.task"; const EternalAIContractName = "TextRNN"; const OnchainModelContractName = "OnchainModel"; -const ModelRegContractName = "ModelReg"; +const ModelCollectionContractName = "ModelCollection"; async function inferModel(interfaceContract: ethers.Contract, prompt: string, generate: number, states: ethers.BigNumber[][][], seed: ethers.BigNumber) { const abic = ethers.utils.defaultAbiCoder; @@ -34,7 +34,7 @@ async function inferModel(interfaceContract: ethers.Contract, prompt: string, ge } task("generate-text", "generate text from RNN model") - .addOptionalParam("contract", "contract address", "", types.string) + .addOptionalParam("contract", "ModelCollection contract address", "", types.string) .addOptionalParam("id", "token id of model", "1", types.string) .addOptionalParam("prompt", "input prompt", "", types.string) .addOptionalParam("togenerate", "number of characters to be generated", 100, types.int) @@ -48,7 +48,7 @@ task("generate-text", "generate text from RNN model") let contractAddress = taskArgs.contract; if (contractAddress === "") { - const baseContract = await deployments.get(ModelRegContractName); + const baseContract = await deployments.get(ModelCollectionContractName); contractAddress = baseContract.address; } @@ -56,9 +56,9 @@ task("generate-text", "generate text from RNN model") const toGenerate = taskArgs.togenerate; const generatePerTx = (taskArgs.generatepertx == -1) ? toGenerate : taskArgs.generatepertx; - const modelRegContract = await ethers.getContractAt(ModelRegContractName, contractAddress, signer); + const modelCollectionContract = await ethers.getContractAt(ModelCollectionContractName, contractAddress, signer); const tokenId = ethers.BigNumber.from(taskArgs.id); - const interfaceAddress = await modelRegContract.modelAddr(tokenId); + const interfaceAddress = await modelCollectionContract.modelAddressOf(tokenId); const interfaceContract = await ethers.getContractAt(OnchainModelContractName, interfaceAddress, signer); const implementAddress = await interfaceContract.implementation(); @@ -147,12 +147,12 @@ task("get-textrnn-model", "get eternal AI model") const [signer] = await ethers.getSigners(); let contractAddress = taskArgs.contract; if (contractAddress === "") { - const baseContract = await deployments.get(ModelRegContractName); + const baseContract = await deployments.get(ModelCollectionContractName); contractAddress = baseContract.address; } - const modelRegContract = await ethers.getContractAt(ModelRegContractName, contractAddress, signer); + const modelCollectionContract = await ethers.getContractAt(ModelCollectionContractName, contractAddress, signer); const tokenId = ethers.BigNumber.from(taskArgs.id); - const modelAddress = await modelRegContract.modelAddr(tokenId); + const modelAddress = await modelCollectionContract.modelAddressOf(tokenId); const modelContract = await ethers.getContractAt(EternalAIContractName, modelAddress, signer); const model = await modelContract.getInfo(); diff --git a/scripts/updateHybridModelMetadata.ts b/scripts/updateHybridModelMetadata.ts new file mode 100644 index 0000000..1cdf388 --- /dev/null +++ b/scripts/updateHybridModelMetadata.ts @@ -0,0 +1,58 @@ +import assert from 'assert'; +import { ethers, network, upgrades } from 'hardhat'; + +async function updateHybridModelMetadata() { + const config = network.config as any; + const networkName = network.name.toUpperCase(); + const HybridModel = await ethers.getContractFactory('HybridModel'); + const WorkerHub = await ethers.getContractFactory('WorkerHub'); + const ModelCollection = await ethers.getContractFactory('ModelCollection'); + + const collectionAddress = config.collectionAddress; + assert.ok( + collectionAddress, + `Missing ${networkName}_COLLECTION_ADDRESS from environment variables!` + ); + + const workerHubAddress = config.workerHubAddress; + assert.ok( + workerHubAddress, + `Missing ${networkName}_WORKERHUB_ADDRESS from environment variables!` + ); + + const tokenId = 1000001; + const minHardware = 1; + const metadata = '{\n' + + '\t"version": 1,\n' + + '\t"model_name": "Max Multi",\n' + + '\t"model_type": "image",\n' + + '\t"model_url": "https://gateway.lighthouse.storage/ipfs/QmcFYMYpVodkpT6t1fVmWNjPnUnnQbXvwpqyheXvPGKUr8",\n' + + '\t"model_file_hash": "7f1f29cb884c5b2f4d072b99afcb87f32cbe4adc88cffedab15ffc9fd30887ae",\n' + + `\t"min_hardware": ${minHardware},\n` + + '\t"verifier_url": "https://gateway.lighthouse.storage/ipfs/QmdkKEjx2fauzbPh1j5bUiQXrUG5Ft36pJGHS8awrN89Dc",\n' + + '\t"verifier_file_hash": "492b2b3dea3003d359fe1b2cee77a22777d8a9faf942ab6dee81e6bfadaadec4"\n' + + '}' + + const collection = ModelCollection.attach(config.collectionAddress); + await (await collection.updateTokenURI(tokenId, metadata)).wait(); + console.log("TokenURI updated"); + + const modelAddress = await collection.modelAddressOf(tokenId); + const hybridModel = HybridModel.attach(modelAddress); + await (await hybridModel.updateMetadata(metadata)).wait(); + console.log("Hybrid model metadata updated"); + + const workerHub = WorkerHub.attach(workerHubAddress); + const currentTier = (await workerHub.models(modelAddress)).tier; + if (currentTier !== minHardware) { + await (await workerHub.updateModelTier(modelAddress, minHardware)).wait(); + console.log(`Model tier updated (old=${currentTier}, new=${minHardware})`); + } +} + +updateHybridModelMetadata() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/tests/Test.t.sol b/tests/Test.t.sol new file mode 100644 index 0000000..c0d1f8e --- /dev/null +++ b/tests/Test.t.sol @@ -0,0 +1,230 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +import "forge-std/Test.sol"; +import "../contracts/WorkerHub.sol"; + +contract WorkHubTest is Test { + WorkerHub workerHub; + address public constant ADMIN_ADDR = address(10); + address public constant Miner1 = address(101); + address public constant Miner2 = address(102); + address public constant Miner3 = address(103); + address public constant ModelAddr = address(1); + + + function setUp() public { + workerHub = new WorkerHub(); + + vm.startPrank(ADMIN_ADDR); + workerHub.initialize( + ADMIN_ADDR, + 10, + 1e18, + 1e18, + 1, + 1, + 10, + 9000, // 90% + 1229997 * 1e16, // reward 1 worker in one year + 21 days, + 0, + 0 + ); + + workerHub.registerModel(ModelAddr, 1, 1e18); + vm.stopPrank(); + // Sunday, May 19, 2024 4:14:11 PM + vm.warp(1716135251); + } + + function testRewards() public { + vm.deal(Miner1, 2e18); + vm.deal(Miner2, 2e18); + vm.deal(Miner3, 2e18); + assertEq(workerHub.lastBlock(), 1); + // init block height + vm.roll(11); + vm.startPrank(Miner1); + workerHub.registerMiner{value: 1e18}(1); + workerHub.joinForMinting(); + vm.stopPrank(); + + vm.startPrank(Miner2); + workerHub.registerMiner{value: 1e18}(1); + workerHub.joinForMinting(); + vm.stopPrank(); + + vm.startPrank(Miner3); + workerHub.registerMiner{value: 1e18}(1); + workerHub.joinForMinting(); + vm.stopPrank(); + + assertEq(workerHub.lastBlock(), 11); + assertEq(workerHub.currentEpoch(), 1); + assertEq(workerHub.rewardToClaim(Miner1), 0); + assertEq(workerHub.rewardToClaim(Miner2), 0); + assertEq(workerHub.rewardToClaim(Miner3), 0); + (uint256 pefReward, uint256 epochReward, uint256 totalTaskCompleted, uint256 totalMiner) = workerHub.rewardInEpoch(0); + // assertEq(totalMiner, 3); + assertEq(pefReward, 0); + assertEq(epochReward, 0); + assertEq(totalTaskCompleted, 0); + assertEq(workerHub.rewardPerEpoch(), 12299970000000000000000); + + // create some data for 2 epochs sequence + vm.roll(31); + workerHub.rewardToClaim(ADMIN_ADDR); + ( pefReward, epochReward, totalTaskCompleted, totalMiner) = workerHub.rewardInEpoch(1); + assertEq(pefReward, 0); + assertEq(epochReward, 23401769406392694); + + ( pefReward, epochReward, totalTaskCompleted, totalMiner) = workerHub.rewardInEpoch(2); + assertEq(pefReward, 0); + assertEq(epochReward, 23401769406392694); + + assertEq(workerHub.rewardToClaim(Miner1), 15601179604261796); + assertEq(workerHub.rewardToClaim(Miner2), 15601179604261796); + assertEq(workerHub.rewardToClaim(Miner3), 15601179604261796); + + // setup task totalTaskCompleted + // epoch 1 + + (pefReward, epochReward, totalTaskCompleted, totalMiner) = workerHub.rewardInEpoch(1); + assertEq(pefReward, 0); + // assertEq(totalTaskCompleted, 10); + + // epoch 2 + + (pefReward, epochReward, totalTaskCompleted, totalMiner) = workerHub.rewardInEpoch(2); + assertEq(pefReward, 0); + assertEq(totalTaskCompleted, 0); + + assertEq(workerHub.rewardToClaim(Miner1), 15601179604261796); + assertEq(workerHub.rewardToClaim(Miner2), 15601179604261796); + assertEq(workerHub.rewardToClaim(Miner3), 15601179604261796); + + vm.deal(address(workerHub), address(workerHub).balance + 2e18); + // claim reward + workerHub.claimReward(Miner1); + workerHub.claimReward(Miner2); + workerHub.claimReward(Miner3); + + assertEq(Miner1.balance, 15601179604261796 + 1e18); + assertEq(Miner2.balance, 15601179604261796 + 1e18); + assertEq(Miner3.balance, 15601179604261796 + 1e18); + + assertEq(workerHub.rewardToClaim(Miner1), 0); + assertEq(workerHub.rewardToClaim(Miner2), 0); + assertEq(workerHub.rewardToClaim(Miner3), 0); + + workerHub.claimReward(Miner1); + workerHub.claimReward(Miner2); + workerHub.claimReward(Miner3); + + assertEq(Miner1.balance, 15601179604261796 + 1e18); + assertEq(Miner2.balance, 15601179604261796 + 1e18); + assertEq(Miner3.balance, 15601179604261796 + 1e18); + + // test miner request unstake + vm.startPrank(Miner1); + workerHub.unregisterMiner(); + vm.warp(block.timestamp + 21 days); + workerHub.unstakeForMiner(); + assertEq(Miner1.balance, 15601179604261796 + 2e18); + + assertEq(workerHub.multiplier(Miner1), 1e4); + + vm.roll(51); + assertEq(workerHub.rewardToClaim(Miner1), 0); + workerHub.claimReward(Miner1); + assertEq(Miner1.balance, 15601179604261796 + 2e18); + workerHub.registerMiner{value: 1e18}(1); + assertEq(workerHub.rewardToClaim(Miner1), 0); + workerHub.claimReward(Miner1); + assertEq(Miner1.balance, 15601179604261796 + 2e18 - 1e18); + workerHub.unregisterMiner(); + vm.warp(block.timestamp + 21 days); + workerHub.unstakeForMiner(); + assertEq(workerHub.rewardToClaim(Miner1), 0); + workerHub.claimReward(Miner1); + assertEq(Miner1.balance, 15601179604261796 + 2e18); + workerHub.registerMiner{value: 1e18}(1); + vm.roll(55); + assertEq(workerHub.rewardToClaim(Miner1), 0); + workerHub.claimReward(Miner1); + assertEq(Miner1.balance, 15601179604261796 + 2e18 - 1e18); + vm.roll(61); + assertEq(workerHub.rewardToClaim(Miner1), 0); + workerHub.claimReward(Miner1); + assertEq(Miner1.balance, 15601179604261796 + 2e18 - 1e18); + assertEq(workerHub.rewardToClaim(Miner1), 0); + assertEq(workerHub.multiplier(Miner1), 1e4); + // test case miner active then unregis but no claim reward + workerHub.joinForMinting(); + + // assertEq(workerHub.test(Miner1), block.timestamp); + assertEq(workerHub.multiplier(Miner1), 1e4); + + vm.roll(71); + assertEq(workerHub.rewardToClaim(Miner1), 7800589802130898); + vm.roll(81); + assertEq(workerHub.rewardToClaim(Miner1), 7800589802130898 * 2); + workerHub.unregisterMiner(); + vm.warp(block.timestamp + 21 days); + workerHub.unstakeForMiner(); + assertEq(Miner1.balance, 15601179604261796 + 2e18); + assertEq(workerHub.rewardToClaim(Miner1), 7800589802130898 * 2); + + // assertEq(workerHub.test(Miner1) + 21 days, block.timestamp); + + vm.roll(91); + assertEq(workerHub.rewardToClaim(Miner1), 7800589802130898 * 2); + workerHub.registerMiner{value: 1e18}(1); + workerHub.joinForMinting(); + + // assertEq(workerHub.test(Miner1), block.timestamp); + + vm.roll(101); + assertEq(workerHub.rewardToClaim(Miner1), 7800589802130898 * 3); + // assertEq(workerHub.test(Miner1), block.timestamp); + + // claim reward + workerHub.claimReward(Miner1); + assertEq(workerHub.rewardToClaim(Miner1), 0); + assertEq(Miner1.balance, 15601179604261796 + 2e18 - 1e18 + 7800589802130898 * 3); + vm.roll(109); + assertEq(workerHub.rewardToClaim(Miner1), 0); + vm.stopPrank(); + + // test boost reward + assertEq(workerHub.rewardToClaim(Miner1), 0); + // add 2 epochs + vm.roll(121); + assertEq(workerHub.multiplier(Miner2), 11000); + assertEq(workerHub.multiplier(Miner1), 1e4); + assertEq(workerHub.rewardToClaim(Miner1), 7800589802130898 * 2); + // assertEq(workerHub.test(Miner1), block.timestamp); + vm.warp(block.timestamp + 30 days); + uint boostReward = 7800589802130898 * 2 * 10500 / uint256(1e4); + assertEq(workerHub.rewardToClaim(Miner1), boostReward); + + vm.warp(block.timestamp + 30 days); + boostReward = 7800589802130898 * 2 * 11000 / uint256(1e4); + assertEq(workerHub.rewardToClaim(Miner1), boostReward); + + vm.warp(block.timestamp + 365 days); + boostReward = 7800589802130898 * 2 * 16000 / uint256(1e4); + assertEq(workerHub.rewardToClaim(Miner1), boostReward); + + workerHub.claimReward(Miner1); + assertEq(workerHub.rewardToClaim(Miner1), 0); + + // unregis reset boost + vm.startPrank(Miner1); + workerHub.unregisterMiner(); + assertEq(workerHub.multiplier(Miner1), 1e4); + + assertEq(workerHub.getNOMiner(), 2); + } +}