{ "$schema": "http://json-schema.org/draft-07/schema#", "title": "Config", "description": "Contract configuration state", "type": "object", "required": [ "agent_nomination_block_duration", "agents_eject_threshold", "croncat_factory_addr", "croncat_manager_key", "croncat_tasks_key", "min_active_agent_count", "min_coins_for_agent_registration", "min_tasks_per_agent", "owner_addr", "pause_admin", "public_registration" ], "properties": { "agent_nomination_block_duration": { "description": "The duration a prospective agent has to nominate themselves. When a task is created such that a new agent can join, The agent at the zeroth index of the pending agent queue has this time to nominate The agent at the first index has twice this time to nominate (which would remove the former agent from the pending queue) Value is in seconds", "type": "integer", "format": "uint16", "minimum": 0.0 }, "agents_eject_threshold": { "description": "How many slots an agent can miss before being removed from the active queue", "type": "integer", "format": "uint64", "minimum": 0.0 }, "croncat_factory_addr": { "description": "Address of the factory contract", "allOf": [ { "$ref": "#/definitions/Addr" } ] }, "croncat_manager_key": { "description": "Name of the key for raw querying Manager address from the factory", "type": "array", "items": [ { "type": "string" }, { "type": "array", "items": { "type": "integer", "format": "uint8", "minimum": 0.0 }, "maxItems": 2, "minItems": 2 } ], "maxItems": 2, "minItems": 2 }, "croncat_tasks_key": { "description": "Name of the key for raw querying Tasks address from the factory", "type": "array", "items": [ { "type": "string" }, { "type": "array", "items": { "type": "integer", "format": "uint8", "minimum": 0.0 }, "maxItems": 2, "minItems": 2 } ], "maxItems": 2, "minItems": 2 }, "min_active_agent_count": { "description": "Minimum agent count in active queue to be untouched by bad agent verifier", "type": "integer", "format": "uint16", "minimum": 0.0 }, "min_coins_for_agent_registration": { "description": "Min coins that should be attached to register an agent", "type": "integer", "format": "uint64", "minimum": 0.0 }, "min_tasks_per_agent": { "description": "Agent management The minimum number of tasks per agent Example: 10 Explanation: For every 1 agent, 10 tasks per slot are available. NOTE: Caveat, when there are odd number of tasks or agents, the overflow will be available to first-come, first-serve. This doesn't negate the possibility of a failed txn from race case choosing winner inside a block. NOTE: The overflow will be adjusted to be handled by sweeper in next implementation.", "type": "integer", "format": "uint64", "minimum": 0.0 }, "owner_addr": { "description": "Contract owner address", "allOf": [ { "$ref": "#/definitions/Addr" } ] }, "pause_admin": { "description": "A multisig admin whose sole responsibility is to pause the contract in event of emergency. Must be a different contract address than DAO, cannot be a regular keypair Does not have the ability to unpause, must rely on the DAO to assess the situation and act accordingly", "allOf": [ { "$ref": "#/definitions/Addr" } ] }, "public_registration": { "description": "Whether agent registration is public or restricted to an internal whitelist (allowed_agents) Determines whether agent registration is open to the public If false, the APPROVED_AGENTS map will determine if an agent is allowed to register If true, any address can register and enter the pending queue, provided they have the assets required. Note that once this becomes true, it's intentionally meant to be true forever, since this is an aspect of progressive decentralization", "type": "boolean" } }, "additionalProperties": false, "definitions": { "Addr": { "description": "A human readable address.\n\nIn Cosmos, this is typically bech32 encoded. But for multi-chain smart contracts no assumptions should be made other than being UTF-8 encoded and of reasonable length.\n\nThis type represents a validated address. It can be created in the following ways 1. Use `Addr::unchecked(input)` 2. Use `let checked: Addr = deps.api.addr_validate(input)?` 3. Use `let checked: Addr = deps.api.addr_humanize(canonical_addr)?` 4. Deserialize from JSON. This must only be done from JSON that was validated before such as a contract's state. `Addr` must not be used in messages sent by the user because this would result in unvalidated instances.\n\nThis type is immutable. If you really need to mutate it (Really? Are you sure?), create a mutable copy using `let mut mutable = Addr::to_string()` and operate on that `String` instance.", "type": "string" } } }