Releases: ritual-net/infernet-node
Releases · ritual-net/infernet-node
v1.4.0
v1.3.1
v1.3.1 - 2024-10-03
Fixed
- Bug with
chain_idbeing undefined when chain is disabled.
v1.3.0
v1.3.0 - 2024-09-20
Added
- New
sync_periodfield assnapshot_syncconfiguration parameter, to optionally set the period of polling the chain for new blocks/subscriptions.
Changed
- Almost all container configurations (except
idandimage) are now reasonably defaulted (e.g. port auto-assignment), making it easier to configure a service and enabling the use of service recipes. Container configurations are validated at startup and errors are reported early. - Added validation for entire
config.jsonusing pydantic, for sane defaulting and more meaningful error messages.
Fixed
- Bug with batch syncing new subscriptions
v1.2.0
v1.2.0 minor release of the Infernet Node—a way to bring off-chain compute workloads, on-chain.
Added
- New
starting_sub_idfield assnapshot_syncconfiguration parameter, to optionally start syncing from a certain subscription id instead of 0.
Changed
- Subscriptions collection now is handled through smart contract reads instead of RPC calls, resulting in higher efficiency
Fixed
- Reduced(almost eliminated) "429: Too many requests" RPC errors on Base Mainnet. Public RPCs can be used.
- Snapshot sync time is significantly less for chains with high number of subscriptions
- Fixed duplicate snapshot syncing bug
v1.1.0
v1.1.0 minor release of the Infernet Node—a way to bring off-chain compute workloads, on-chain.
Added
- Node version check at node boot to notify user if node version is outdated.
Changed
- Logger now uses RotatingFileHandler to limit disk space impact.
config.jsonnow accepts optionallogobject, with new configuration optionsmax_file_sizeandbackup_countfor managing logging.
Fixed
- Docker subnets are also considered "local IPs" for storing data in Redis via
POST api/status.
v1.0.0
v1.0.0 major release of the Infernet Node—a way to bring off-chain compute workloads, on-chain.
New Features
- Payments
- Proof verification
- Streaming jobs
Added
- 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.
Changed
- 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
ContainerLookup
level. 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.
Fixed
- 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.
Security
- Bumped
aiohttpversion to3.9.4. - Only
localhostallowed to make calls toPUT /api/status.
v0.2.0
[0.2.0] - 2024-03-21
Added
- 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.
Changed
NODE_INTERVALfor forwarding node metrics is now900seconds.
Fixed
- 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.
Security
- Bumped
aiohttpversion to3.9.2. - Compose file no longer exposes Fluentbit and Redis ports to the host.
v0.1.0
Initial release of the Infernet Node—a lightweight off-chain client for Infernet responsible for fulfilling compute workloads.
Features
- Full featured support for the Infernet SDK
- Support for arbitrary compute workloads (via Ritual ML Workflows)
- On-chain request processing w/ support for dynamic and delegate subscriptions
- Off-chain request processing via REST API
- Batch workload processing as first-class citizen
- Robust runtime configuration for node operator flexibility
- Out-of-box support for major cloud provider deployments
- Plug-and-play request scaling through drop-in router
For more in-depth details, consult the Infernet Node: Architecture docs.