The Model contract manages the registration and lifecycle of machine learning models within the system. It handles operations such as enabling/disabling models, updating staking requirements, and associating staking pools with models.
Model Registration and Management:
Supports registering new models with metadata and staking requirements.
Allows enabling or disabling of registered models.
Stake Requirement Management:
Admins can update the required staking amount for models.
Integration with Staking Pools:
Models are associated with staking pools for FUNC token staking.
Access Control:
Role-based access control for secure management.
The contract uses AccessControl to secure critical functions.
DEFAULT_ADMIN_ROLE:
Full control over all administrative functions.
MODEL_CREATOR_ROLE:
Grants permission to create new models.
State Variables
router:
Reference to the Router contract for system-wide functionalities.
modelIdExists:
Mapping of model IDs to their existence status.
existingModels:
Mapping of model IDs to their corresponding ModelInfo struct.
modelIds:
Array of all registered model IDs.
constructor(IRouter _router)
Initializes the contract and assigns the deployer the DEFAULT_ADMIN_ROLE.
Parameters:
_router: The address of the router contract.
Model Registration
createModel(uint256 _modelId, uint256 _shards, uint256 _computeUnits, uint256 _stakeAmount, IProviderStaking _staking, string _modelName)
Registers a new model with specified parameters.
Parameters:
_modelId: Unique ID of the model.
_shards: Number of shards associated with the model.
_computeUnits: Compute units required for the model.
_stakeAmount: Required FUNC staking amount.
_staking: Associated staking pool.
_modelName: Name of the model.
Access Control:
Callable by accounts with MODEL_CREATOR_ROLE or the ProviderStakingFactory.
Model Management
enableModel(uint256 _modelId)
Enables a previously disabled model.
Parameters:
_modelId: The ID of the model to enable.
Access Control:
Callable by accounts with DEFAULT_ADMIN_ROLE.
disableModel(uint256 _modelId)
Disables an active model.
Parameters:
_modelId: The ID of the model to disable.
Access Control:
Callable by accounts with DEFAULT_ADMIN_ROLE.
updateModel(uint256 _modelId, uint256 _shards, uint256 _computeUnits, string _modelName)
Updates the metadata of an existing model.
Parameters:
_modelId: The ID of the model.
_shards: Updated number of shards.
_computeUnits: Updated compute units.
_modelName: Updated model name.
Access Control:
Callable by accounts with DEFAULT_ADMIN_ROLE.
Staking Management
updateModelStakeRequirement(uint256 _modelId, uint256 amount)
Updates the FUNC staking requirement for a model.
Parameters:
_modelId: The ID of the model.
amount: New FUNC staking requirement.
Access Control:
Callable by accounts with DEFAULT_ADMIN_ROLE.
updateModelStakingPool(uint256 _modelId, IProviderStaking _staking)
Updates the staking pool associated with a model.
Parameters:
_modelId: The ID of the model.
_staking: Address of the new staking pool.
Access Control:
Callable by accounts with DEFAULT_ADMIN_ROLE.
modelStakeAmount(uint256 _modelId) -> uint256
Returns the staking requirement for a given model ID.
Parameters:
_modelId: The ID of the model.
Returns:
Required FUNC staking amount.
modelExists(uint256 _modelId) -> bool
Checks whether a model with the given ID exists.
Parameters:
_modelId: The ID of the model.
Returns:
true if the model exists, false otherwise.
modelEnabled(uint256 _modelId) -> bool
Checks if a model is both registered and enabled.
Parameters:
_modelId: The ID of the model.
Returns:
true if the model is enabled, false otherwise.
modelsIds() -> uint256[]
Returns a list of all registered model IDs.
models() -> ModelInfo[]
Returns detailed information for all registered models.
Returns:
An array of ModelInfo structs for all models.
Data Structures
Represents information about a model.
Fields:
modelId: Unique ID of the model.
shards: Number of shards associated with the model.
computeUnits: Compute units required for the model.
stakeAmount: Required FUNC staking amount.
providerStakingPool: Address of the associated staking pool.
modelName: Name of the model.
enabled: Boolean indicating if the model is enabled.
ModelCreated(uint256 indexed modelId, string modelName):
Emitted when a new model is created.
ModelEnabled(uint256 indexed modelId, bool enabled):
Emitted when a model is enabled or disabled.
ModelUpdated(uint256 indexed modelId, string modelName):
Emitted when a model's metadata is updated.
ModelStakeRequirementUpdated(uint256 indexed modelId, uint256 oldStakeAmount, uint256 newStakeAmount):
Emitted when a model's staking requirement is updated.
ModelStakingPoolUpdated(uint256 indexed modelId, address oldPool, address newPool):
Emitted when a model's staking pool is updated.