diff --git a/.openzeppelin/unknown-20156.json b/.openzeppelin/unknown-20156.json index eef9565..b79f561 100644 --- a/.openzeppelin/unknown-20156.json +++ b/.openzeppelin/unknown-20156.json @@ -17025,6 +17025,2268 @@ }, "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": {} + } } } } diff --git a/.openzeppelin/unknown-43338.json b/.openzeppelin/unknown-43338.json index edb766e..41f817f 100644 --- a/.openzeppelin/unknown-43338.json +++ b/.openzeppelin/unknown-43338.json @@ -2645,6 +2645,3778 @@ }, "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": {} + } } } } diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..c1b0617 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "cSpell.enableFiletypes": ["solidity"] +} diff --git a/contracts/WorkerHub.sol b/contracts/WorkerHub.sol index 4ca2e47..9bc41dd 100644 --- a/contracts/WorkerHub.sol +++ b/contracts/WorkerHub.sol @@ -68,6 +68,11 @@ ReentrancyGuardUpgradeable { _unpause(); } + function updateMiningTimeLimit(uint40 _miningTimeLimit) external onlyOwner { + miningTimeLimit = _miningTimeLimit; + emit MiningTimeLimitUpdate(_miningTimeLimit); + } + function getModelAddresses() external view returns (address[] memory) { return modelAddresses.values; } @@ -280,6 +285,7 @@ ReentrancyGuardUpgradeable { Worker storage miner = miners[msg.sender]; if (miner.tier == 0) revert NotRegistered(); if (miner.stake < minerMinimumStake) revert StakeTooLow(); + if (block.timestamp < miner.activeTime) revert MinerInSlashingTime(); address modelAddress = miner.modelAddress; minerAddressesByModel[modelAddress].insert(msg.sender); @@ -388,8 +394,10 @@ ReentrancyGuardUpgradeable { function joinForValidating() external whenNotPaused { _updateEpoch(); + Worker storage validator = miners[msg.sender]; if (validator.tier == 0) revert NotRegistered(); + if (block.timestamp < validator.activeTime) revert ValidatorInSlashingTime(); address modelAddress = validator.modelAddress; validatorAddressesByModel[modelAddress].insert(msg.sender); @@ -512,6 +520,7 @@ ReentrancyGuardUpgradeable { 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 @@ -525,7 +534,6 @@ ReentrancyGuardUpgradeable { rewardInEpoch[currentEpoch].epochReward = equalReward; currentEpoch++; } - lastBlock = block.number; } } else { lastBlock = block.number; @@ -533,12 +541,13 @@ ReentrancyGuardUpgradeable { } - function submitSolution(uint256 _assigmentId, bytes calldata _data) public virtual whenNotPaused { + function submitSolution(uint256 _assignmentId, bytes calldata _data) public virtual whenNotPaused { _updateEpoch(); address _msgSender = msg.sender; - Assignment memory clonedAssignments = assignments[_assigmentId]; + Assignment memory clonedAssignments = assignments[_assignmentId]; + // check msgSender is miner if (_msgSender != clonedAssignments.worker) revert Unauthorized(); if (clonedAssignments.output.length != 0) revert AlreadySubmitted(); @@ -561,9 +570,9 @@ ReentrancyGuardUpgradeable { Inference storage inference = inferences[clonedAssignments.inferenceId]; - assignments[_assigmentId].output = _data; //Record the solution + assignments[_assignmentId].output = _data; //Record the solution inference.status = InferenceStatus.Solved; - inference.assignments.push(_assigmentId); + inference.assignments.push(_assignmentId); if (inference.assignments.length == 1) { uint256 curEpoch = currentEpoch; @@ -571,7 +580,7 @@ ReentrancyGuardUpgradeable { rewardInEpoch[curEpoch].totalTaskCompleted += 1; uint256 fee = clonedInference.value * feePercentage / PERCENTAGE_DENOMINATOR; - uint256 value = clonedInference.value - fee; + uint256 value = clonedInference.value * minerFeePercentage / PERCENTAGE_DENOMINATOR; TransferHelper.safeTransferNative(treasury, fee); TransferHelper.safeTransferNative(_msgSender, value); @@ -579,7 +588,7 @@ ReentrancyGuardUpgradeable { emit InferenceStatusUpdate(clonedAssignments.inferenceId, InferenceStatus.Solved); } - emit SolutionSubmission(_msgSender, _assigmentId); + emit SolutionSubmission(_msgSender, _assignmentId); } function _handleDisputeSuccess(uint256 _inferId) internal { @@ -587,8 +596,295 @@ ReentrancyGuardUpgradeable { } - function disputeInfer(uint256 _assignmentId) public virtual { - // TODO + //Check whether a worker is available (the worker had previously joined). + function _checkAvailableWorker() internal view { + if (!validatorAddresses.hasValue(msg.sender)) { + if (!minerAddresses.hasValue(msg.sender)) revert InvalidMiner(); + + address modelAddrOfMiner = miners[msg.sender].modelAddress; + if (!minerAddressesByModel[modelAddrOfMiner].hasValue(msg.sender)) revert InvalidMiner(); + } + + address modelAddrOfValidator = validators[msg.sender].modelAddress; + if (!validatorAddressesByModel[modelAddrOfValidator].hasValue(msg.sender)) revert InvalidValidator(); + } + + function _beforeDispute(uint256 _inferId) internal view returns(uint40, uint40){ + Inference memory clonedInference = inferences[_inferId]; + uint256[] memory assignmentIds = clonedInference.assignments; + + // Check case: There is only one submission. TODO: handle (kelvin) + if (assignmentIds.length == 1) revert LoneSubmissionNoDispute(); + if (assignmentIds.length == 0) revert SubmissionsEmpty(); + if (clonedInference.status != InferenceStatus.Solved) revert InvalidInferenceStatus(); + + // Verify if this inference has been disputed + if(disputedInferIds.hasValue(_inferId)) revert InferenceAlreadyDisputed(); + + uint40 validateExpireTimestamp = uint40(clonedInference.expiredAt + validatingTimeLimit); + uint40 disputeExpiredTimestamp = uint40(clonedInference.expiredAt + validatingTimeLimit + disputingTimeLimit); + + // Verify whether the dispute is raised within the permitted time window + if (block.timestamp < clonedInference.expiredAt) revert PrematureValidate(); + if (validateExpireTimestamp < block.timestamp) revert ValidateTimeout(); + + return (validateExpireTimestamp, disputeExpiredTimestamp); + } + + function noDisputeInfer(uint256 _inferId) public { + _updateEpoch(); + _checkAvailableWorker(); + // TODO: following new logic, we must check the msg.sender has been assigned the task. + + (uint40 validateExpireTimestamp, uint40 disputeExpiredTimestamp) = _beforeDispute(_inferId); + + Inference memory clonedInference = inferences[_inferId]; + uint256 value = clonedInference.value * (PERCENTAGE_DENOMINATOR - feePercentage - minerFeePercentage) / PERCENTAGE_DENOMINATOR; + + TransferHelper.safeTransferNative(msg.sender, value); + + emit NoDisputeInference(msg.sender, _inferId, uint40(block.timestamp), value); + } + + function disputeInfer(uint256 _inferId) public virtual { + _updateEpoch(); + _checkAvailableWorker(); + // TODO: following new logic, we must check the msg.sender has been assigned the task. + + (uint40 validateExpireTimestamp, uint40 disputeExpiredTimestamp) = _beforeDispute(_inferId); + + disputedInferIds.insert(_inferId); + // disputedInfersOf[msg.sender].insert(_inferId); + + DisputedInfer storage disputedInfer = disputedInfers[_inferId]; + disputedInfer.totalValidator = uint16(validatorAddresses.values.length); + disputedInfer.validatingExpireAt = validateExpireTimestamp; + disputedInfer.disputingExpireAt = disputeExpiredTimestamp; + + //inference + Inference storage inference = inferences[_inferId]; + inference.disputingAddress = msg.sender; + inference.status = InferenceStatus.Disputing; + + emit InferenceStatusUpdate(_inferId, InferenceStatus.Disputing); + emit DisputeInference(msg.sender, _inferId, uint40(block.timestamp), validateExpireTimestamp, disputeExpiredTimestamp); + } + + function upvoteDispute(uint256 _inferId, Ballot[] calldata ballots) public virtual { + _updateEpoch(); + + if (ballots.length == 0) revert BallotEmpty(); + + // Check whether a validator is available (the validator had previously joined). + if (!validatorAddresses.hasValue(msg.sender)) revert InvalidValidator(); + address modelAddr = validators[msg.sender].modelAddress; + if (!validatorAddressesByModel[modelAddr].hasValue(msg.sender)) revert InvalidValidator(); + + Inference memory clonedInference = inferences[_inferId]; + DisputedInfer memory disputedInfer = disputedInfers[_inferId]; + + if (clonedInference.assignments.length == 0) revert SubmissionsEmpty(); + if (clonedInference.status != InferenceStatus.Disputing) revert InvalidInferenceStatus(); + + // Verify if this assignment has been disputed. + if (!disputedInferIds.hasValue(_inferId)) revert InferenceNotDisputed(); + + // Verify if the dispute period has ended + if (block.timestamp < disputedInfer.disputingExpireAt) revert PrematureDispute(); + if (disputedInfer.disputingExpireAt < block.timestamp) revert DisputeTimeout(); + + // Each person is only allowed to vote once. + if (votersOf[_inferId].hasValue(msg.sender)) revert ValidatorVoteExists(); + + uint256 ballotsLen = ballots.length; + + for (uint256 i = 0; i < ballotsLen; i++) { + if (!ballots[i].result) { + assignments[ballots[i].assignmentId].disapprovalCount++; + } + } + + // disputedInfersOf[msg.sender].insert(_inferId); + votersOf[_inferId].insert(msg.sender); + + emit DisputeUpvote(msg.sender, _inferId, uint40(block.timestamp)); + + //TODO: If the reaction time expires but the number of ballots is less than 2/3, + // should we extend the waiting time for validators or slash inactive validators and initiate a new vote? + } + + function resolveDispute(uint256 _inferId) public { + _updateEpoch(); + + // Verify if this assignment has been disputed. + if (!disputedInferIds.hasValue(_inferId)) revert InferenceNotDisputed(); + + Inference memory inference = inferences[_inferId]; + DisputedInfer memory disputedInfer = disputedInfers[_inferId]; + + if (block.timestamp < disputedInfer.disputingExpireAt) revert PrematureDispute(); + if (inference.status != InferenceStatus.Disputing) revert InvalidInferenceStatus(); + + // TODO: Handling the 'No voter' edge case + // votersOf[_inferId].values == 0 + + uint16 totalValidator = disputedInfer.totalValidator; + + uint256[] memory assignmentIds = inference.assignments; + uint256 assignmentsLen = assignmentIds.length; + address[] memory fraudMiners = new address[](minerRequirement); + + uint256 counter = 0; + bool isDisputeValid = true; + + for (uint256 i = 0; i < assignmentsLen; i++){ + Assignment memory assignment = assignments[assignmentIds[i]]; + // A dispute will be invalid if the disapproval count for a submission falls outside the range of 1/3 to 2/3 of the total number of validators. + if (totalValidator <= assignment.disapprovalCount * 3 && assignment.disapprovalCount * 3 <= totalValidator * 2) { + isDisputeValid = false; + } else if ( totalValidator * 2 < assignment.disapprovalCount * 3 ) { + fraudMiners[counter++] = assignment.worker; + } + } + + //deactivate and slash + _cullInactiveValidator(_inferId); + + if (isDisputeValid) { + // Slash the fraud miners + uint256 fraudMinersLen = fraudMiners.length; + + for (uint256 i = 0; i < fraudMinersLen; i++) { + if (fraudMiners[i] == address(0)) break; + _slashMiner(fraudMiners[i]); + } + + uint256 value = inference.value * (PERCENTAGE_DENOMINATOR - feePercentage - minerFeePercentage) / PERCENTAGE_DENOMINATOR; + TransferHelper.safeTransferNative(inference.disputingAddress, value); + + emit DisputeResolving(_inferId, inference.modelAddress, isDisputeValid); + } else { + // disputing address can be miner or validator + address disputer = inference.disputingAddress; + if (minerAddresses.hasValue(disputer)) { + _slashMiner(disputer); + } else if (validatorAddresses.hasValue(disputer)) { + _slashValidator(disputer); + } + } + + inferences[_inferId].status = InferenceStatus.Solved; + + emit InferenceStatusUpdate(_inferId, InferenceStatus.Solved); + } + + // Pruning when validator lazy to vote + function _cullInactiveValidator(uint256 _inferId) internal { + address modelAddr = inferences[_inferId].modelAddress; + + address[] memory validators = validatorAddressesByModel[modelAddr].values; + uint256 validatorsLen = validators.length; + if (validatorsLen == 0) return; + + Set.AddressSet storage votersSet = votersOf[_inferId]; + uint256 votersLen = votersSet.values.length; + + if (votersLen == validatorsLen) return; + + address[] memory inactiveValidators = new address[](validatorsLen - votersLen); + uint16 counter = 0; + + for (uint256 i = 0; i < validatorsLen; i++) { + if (!votersSet.hasValue(validators[i])) { + inactiveValidators[counter++] = validators[i]; + } + } + + uint256 len = inactiveValidators.length; + + for (uint256 i = 0; i < len; i++) { + _deactivateValidator(inactiveValidators[i]); + } + } + + function _deactivateValidator(address _validator) internal { + Worker storage validator = validators[_validator]; + + if (!validatorAddresses.hasValue(_validator)) revert InvalidValidator(); + + address modelAddress = validator.modelAddress; + + // Double check hasValue + if (validatorAddressesByModel[modelAddress].hasValue(_validator)) { + validatorAddressesByModel[modelAddress].erase(_validator); + validatorAddresses.erase(_validator); + } + + validator.activeTime = uint40(block.timestamp + penaltyDuration); + + emit ValidatorDeactivated(_validator, modelAddress, validator.activeTime); + } + + function _deactivateMiner(address _miner) internal { + Worker storage miner = miners[_miner]; + + if (!minerAddresses.hasValue(_miner)) revert InvalidMiner(); + + address modelAddress = miner.modelAddress; + + // Double check hasValue + if (minerAddressesByModel[modelAddress].hasValue(_miner)) { + minerAddressesByModel[modelAddress].erase(_miner); + minerAddresses.erase(_miner); + } + + miner.activeTime = uint40(block.timestamp + penaltyDuration); + + emit MinerDeactivated(_miner, modelAddress, miner.activeTime); + } + + function _slashValidator(address _validator) internal { + Worker storage validator = validators[_validator]; + + if (!validatorAddresses.hasValue(_validator)) revert InvalidValidator(); + + address modelAddress = validator.modelAddress; + + if (validatorAddressesByModel[modelAddress].hasValue(_validator)) { + validatorAddressesByModel[modelAddress].erase(_validator); + validatorAddresses.erase(_validator); + } + + validator.activeTime = uint40(block.timestamp + penaltyDuration); + uint256 fine = validator.stake * finePercentage / PERCENTAGE_DENOMINATOR; + validator.stake -= fine; + + TransferHelper.safeTransferNative(treasury, fine); + + emit FraudulentValidatorPenalized(_validator, modelAddress, treasury, fine); + } + + function _slashMiner(address _miner) internal { + Worker storage miner = miners[_miner]; + + if (!minerAddresses.hasValue(_miner)) revert InvalidMiner(); + + address modelAddress = miner.modelAddress; + + // Remove miner from available miner + if (minerAddressesByModel[modelAddress].hasValue(_miner)) { + minerAddressesByModel[modelAddress].erase(_miner); + minerAddresses.erase(_miner); + } + + // Set the time miner can join again + miner.activeTime = uint40(block.timestamp + penaltyDuration); + uint256 fine = miner.stake * finePercentage / PERCENTAGE_DENOMINATOR; // Fine = stake * 5% + miner.stake -= fine; + + TransferHelper.safeTransferNative(treasury, fine); + + emit FraudulentMinerPenalized(_miner, modelAddress, treasury, fine); } function resolveInference(uint256 _inferenceId) public virtual { @@ -599,6 +895,15 @@ ReentrancyGuardUpgradeable { inference.status = InferenceStatus.Killed; TransferHelper.safeTransferNative(inference.creator, inference.value); emit InferenceStatusUpdate(_inferenceId, InferenceStatus.Killed); + + // Deactivate inactive miners. + // Deactivate all 3 miners because this inference has solving status. This mean there is no submission. + uint256[] memory assignmentIds = inference.assignments; + uint256 assignmentsLen = assignmentIds.length; + + for (uint256 i = 0; i < assignmentsLen; i++) { + _deactivateMiner(assignments[assignmentIds[i]].worker); + } } } @@ -626,14 +931,14 @@ ReentrancyGuardUpgradeable { } function setNewRewardInEpochBasedOnPerf(uint256 _newRewardAmount) public virtual onlyOwner { - _updateEpoch(); + // _updateEpoch(); emit RewardPerEpochBasedOnPerf(rewardPerEpoch, _newRewardAmount); rewardPerEpochBasedOnPerf = _newRewardAmount; } function setBlocksPerEpoch(uint256 _blocks) public virtual onlyOwner { - _updateEpoch(); + // _updateEpoch(); if (_blocks == 0) revert InvalidBlockValue(); emit BlocksPerEpoch(blocksPerEpoch, _blocks); diff --git a/contracts/interfaces/IWorkerHub.sol b/contracts/interfaces/IWorkerHub.sol index f0813d4..131beae 100644 --- a/contracts/interfaces/IWorkerHub.sol +++ b/contracts/interfaces/IWorkerHub.sol @@ -84,11 +84,25 @@ interface IWorkerHub is IInferable { address creator; } + struct DisputedInfer { + uint16 totalValidator; + bool isValid; + uint40 validatingExpireAt; + uint40 disputingExpireAt; + } + + struct Ballot { + uint256 assignmentId; + bool result; + } + struct UnstakeRequest { uint256 stake; uint40 unlockAt; } + event MiningTimeLimitUpdate(uint40 newValue); + event ModelRegistration( address indexed model, uint16 indexed tier, @@ -156,6 +170,15 @@ interface IWorkerHub is IInferable { 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 ValidatorDeactivated(address indexed validator, address indexed modelAddress, uint40 activeTime); + event FraudulentValidatorPenalized(address indexed validator, address indexed modelAddress, address indexed treasury, uint256 fine); + event DisputeInference(address indexed caller, uint256 indexed inferId, uint40 now, uint40 validateExpireTimestamp, uint40 disputeExpiredTimestamp); + event NoDisputeInference(address indexed caller, uint256 indexed inferId, uint40 now, uint256 value); + event DisputeUpvote(address indexed caller, uint256 indexed inferId, uint40 now); + event DisputeResolving(uint256 indexed inferId, address indexed modelAddress, bool status); + error AlreadyRegistered(); error AlreadySubmitted(); error NotRegistered(); @@ -178,4 +201,23 @@ interface IWorkerHub is IInferable { error InferMustBeSolvingState(); error ZeroValue(); + error InvalidValidator(); + error InvalidMiner(); + + error InferenceAlreadyDisputed(); + error InferenceNotDisputed(); + + error PrematureValidate(); + error ValidateTimeout(); + error PrematureDispute(); + error DisputeTimeout(); + + error ValidatorVoteExists(); + error SubmissionsEmpty(); + error LoneSubmissionNoDispute(); + error BallotEmpty(); + + error MinerInSlashingTime(); + error ValidatorInSlashingTime(); + } diff --git a/contracts/storages/WorkerHubStorage.sol b/contracts/storages/WorkerHubStorage.sol index 6bca021..7d7faa8 100644 --- a/contracts/storages/WorkerHubStorage.sol +++ b/contracts/storages/WorkerHubStorage.sol @@ -1,6 +1,5 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; - import {IWorkerHub} from "../interfaces/IWorkerHub.sol"; import {Random} from "../lib/Random.sol"; @@ -31,7 +30,8 @@ abstract contract WorkerHubStorage is IWorkerHub { mapping(address => Set.Uint256Set) internal assignmentsByMiner; mapping(uint256 => Set.Uint256Set) internal assignmentsByInference; - mapping(address => mapping(uint256 => bool)) public validatorDisputed; + mapping(address => mapping(uint256 => bool)) public validatorDisputed; //Do know the need + // mapping total task completed in epoch and reward per epoch // epoch index => total reward @@ -63,5 +63,19 @@ abstract contract WorkerHubStorage is IWorkerHub { uint256 public rewardPerEpochBasedOnPerf; // percentage for workers completed task uint256 public rewardPerEpoch; // 12299.97 reward EAI for 1 worker per year + // Tx Fee + uint16 public minerFeePercentage; // Percentage of inference value allocated to miner + uint16 public finePercentage; + + //Slashing + // uint40 public slashingMinerTimeLimit; + // uint40 public slashingValidatorTimeLimit; + + //Dispute structures + Set.Uint256Set internal disputedInferIds; + mapping(uint256 => DisputedInfer) internal disputedInfers; // inferId => DisputedInfer + mapping(uint256 => Set.AddressSet) internal votersOf; // disputed inference ID => voters's address + // mapping(address => Set.Uint256Set) internal disputedInfersOf; //voter's address => disputed inference id + uint256[100] private __gap; }