Model.sol
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.
Key Features
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.
Roles
Access Control
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
Routercontract for system-wide functionalities.
modelIdExists:Mapping of model IDs to their existence status.
existingModels:Mapping of model IDs to their corresponding
ModelInfostruct.
modelIds:Array of all registered model IDs.
Key Functions
Constructor
constructor(IRouter _router)
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)
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_ROLEor theProviderStakingFactory.
Model Management
enableModel(uint256 _modelId)
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)
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)
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)
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)
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.
View Functions
modelStakeAmount(uint256 _modelId) -> uint256
modelStakeAmount(uint256 _modelId) -> uint256Returns the staking requirement for a given model ID.
Parameters:
_modelId: The ID of the model.
Returns:
Required FUNC staking amount.
modelExists(uint256 _modelId) -> bool
modelExists(uint256 _modelId) -> boolChecks whether a model with the given ID exists.
Parameters:
_modelId: The ID of the model.
Returns:
trueif the model exists,falseotherwise.
modelEnabled(uint256 _modelId) -> bool
modelEnabled(uint256 _modelId) -> boolChecks if a model is both registered and enabled.
Parameters:
_modelId: The ID of the model.
Returns:
trueif the model is enabled,falseotherwise.
modelsIds() -> uint256[]
modelsIds() -> uint256[]Returns a list of all registered model IDs.
Returns:
An array of model IDs.
models() -> ModelInfo[]
models() -> ModelInfo[]Returns detailed information for all registered models.
Returns:
An array of
ModelInfostructs for all models.
Data Structures
ModelInfo
ModelInfoRepresents 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.
Events
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.
Last updated