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
.