All notable changes to this project will be documented in this file.
-
The format is based on Keep a Changelog.
-
This project adheres to Semantic Versioning.
- Added files
Dockerfile-gpuanddocker-compose-gpu.yamlfor building and deploying GPU-enabled node with access to all local GPUs. - Better error-checking and handling for all infernet-related on-chain transaction errors.
- Forward fatal errors via metric sender at shutdown for better error diagnosing (only if forwarding stats is enabled.)
- New
destinationfield to container inputs, to decouple job input source from output destination. - OpenAPI spec for the REST server.
- Simulation of transactions before submitting them to the chain, to prevent submitting invalid transactions, resulting in wasted gas.
- Support for streaming offchain job responses, via the
POST /api/jobs/streamendpoint. - Support for CIDR ranges in container-level firewalls (
"allowed_ips"). - Support for volume mounts to managed containers.
- Support for streaming offchain job responses, via the
/api/jobs/streamendpoint. - New flag
"allowed_sim_errors"in theconfig.jsonfile to specify which error messages are allowed to be ignored by the node when simulating transactions. - New flag
"payment_address"in theconfig.jsonfile to specify the public address of the node's escrow wallet. This is an instance of Infernet'sWalletcontract. - New flag
"accepted_payments"in theconfig.json's"containers"subsection to specify which tokens the container accepts as payment for jobs. - New flag
"generates_proofs"in theconfig.json's"containers"subsection to specify whether the container generates proofs, defaults tofalse. - New flag
"requires_proof"in the input to the containers. Containers can check that flag to determine if they need to provide a proof, or error if they don't support proofs. - New flag
"registry_address"in theconfig.jsonfile to specify the public address of Infernet'sRegistrycontract. This contract is used to retrieve the addresses of the rest of the Infernet contracts. Therefore, the"coordinator_address"is now removed. - New optional flag
"rate_limit"in theconfig.json's"server"configuration to allow rate limiting of incoming requests to the REST server.
- Limit restarts within time window in
docker-compose.yaml. - Consolidated
GET /chain/enabledandGET /chain/addressendpoints intoGET /info. - Refactored node entrypoint (
main.py) into a class. - Increased metric sender intervals to combat outbound data rate limits.
NODE_INTERVALfor node metrics is now3600seconds.LIVE_INTERVALfor live metrics is now60seconds.
- Moved
snapshot_syncunder thechainsection ofconfig.json. - Snapshot syncing retries now include exponential backoff when syncing chain state.
- Job and container counts are now reported separately via metric sender. The REST port is also reported.
chain/processor.py&chain/listener.pyare extensively refactored to remove the dependency on on-chain events.SubscriptionCreatedis now caught by repeatedly checking the latestsub_id& syncing all subscriptions since the last sync.SubscriptionCancelledis now caught by checking ifactiveAtis set tomax uint32. This was an optimization done in theinfernet-sdk 1.0.0contracts.SubscriptionFulfilledis now checked instead by reading theredundancyCountfrom the coordinator contract.- Guardian no longer checks whether container isn't supported, since that check is already being done at the
ContainerLookuplevel. If a subscription'scontainersfield is not empty, it means that it must require a subset of the containers that this node supports. - Since node registration feature has been removed in
1.0.0,register_node&activate_nodescripts have been removed from thescriptsdirectory. TheWalletclass also has theregister_node&activate_nodemethods removed. - Removed the
"coordinator_address"flag from theconfig.jsonfile. The address of the coordinator contract is now retrieved from the registry contract.
- Orchestrator now works in dev mode (outside of docker), previously
host.docker.internalwas hardcoded. - Surface dacite errors when parsing REST interface inputs for better UX.
- Don't return job IDs for Delegated Subscriptions (misleading, since results can only be fetched on-chain).
- Added pending job TTL (loose upper bound) to prevent jobs from being in a pending state indefinitely (due crashes and / or incorrect use of the /status endpoint)
- Fixed a bug where the node could not send multiple transactions in a single block.
- Bumped
aiohttpversion to3.9.4. - Only
localhostallowed to make calls toPUT /api/status.
- Option for containers to be managed separately from the node (via
manage_containersoption inconfig.json) - Option to specify alternate
config.jsonfile name / path via environment variableINFERNET_CONFIG_PATH. - Batch-syncing support for snapshot-sync, along with batch-sync configuration in the
config.jsonfile. - New endpoint
/api/statusfor "independent" (i.e. non-conforming) containers to manually register status of jobs by ID with the node.
NODE_INTERVALfor forwarding node metrics is now900seconds.
- Sample config
rpc_wsshould berpc_urlinconfig.sample.json. - Added working container example to
config.sample.json. - Bug in
processor.pywhere state dictionaries could be mutated while being iterated over.
- Bumped
aiohttpversion to3.9.2. - Compose file no longer exposes Fluentbit and Redis ports to the host.
- Initial release of Infernet Node.