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_id
being undefined when chain is disabled.
v1.3.0
v1.3.0 - 2024-09-20
Added
- New
sync_period
field assnapshot_sync
configuration parameter, to optionally set the period of polling the chain for new blocks/subscriptions.
Changed
- Almost all container configurations (except
id
andimage
) 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.json
using 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_id
field assnapshot_sync
configuration 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.json
now accepts optionallog
object, with new configuration optionsmax_file_size
andbackup_count
for 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-gpu
anddocker-compose-gpu.yaml
for 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
destination
field 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/stream
endpoint. - 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/stream
endpoint. - New flag
"allowed_sim_errors"
in theconfig.json
file to specify which error messages are allowed to be ignored by the node when simulating transactions. - New flag
"payment_address"
in theconfig.json
file to specify the public address of the node's escrow wallet. This is an instance of Infernet'sWallet
contract. - 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.json
file to specify the public address of Infernet'sRegistry
contract. 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/enabled
andGET /chain/address
endpoints intoGET /info
. - Refactored node entrypoint (
main.py
) into a class. - Increased metric sender intervals to combat outbound data rate limits.
NODE_INTERVAL
for node metrics is now3600
seconds.LIVE_INTERVAL
for live metrics is now60
seconds.
- Moved
snapshot_sync
under thechain
section 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.py
are extensively refactored to remove the dependency on on-chain events.SubscriptionCreated
is now caught by repeatedly
checking the latestsub_id
& syncing all subscriptions since the last sync.SubscriptionCancelled
is now caught by checking ifactiveAt
is set tomax uint32
.
This was an optimization done in theinfernet-sdk 1.0.0
contracts.SubscriptionFulfilled
is now checked instead by reading theredundancyCount
from 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'scontainers
field 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_node
scripts have been removed from
thescripts
directory. TheWallet
class also has theregister_node
&activate_node
methods removed. - Removed the
"coordinator_address"
flag from theconfig.json
file. 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.internal
was 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
aiohttp
version to3.9.4
. - Only
localhost
allowed 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_containers
option inconfig.json
) - Option to specify alternate
config.json
file name / path via environment variableINFERNET_CONFIG_PATH
. - Batch-syncing support for snapshot-sync, along with batch-sync configuration in the
config.json
file. - New endpoint
/api/status
for "independent" (i.e. non-conforming) containers to manually register status of jobs by ID with the node.
Changed
NODE_INTERVAL
for forwarding node metrics is now900
seconds.
Fixed
- Sample config
rpc_ws
should berpc_url
inconfig.sample.json
. - Added working container example to
config.sample.json
. - Bug in
processor.py
where state dictionaries could be mutated while being iterated over.
Security
- Bumped
aiohttp
version 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.