Skip to content

v1.0.0

Compare
Choose a tag to compare
@arshan-ritual arshan-ritual released this 06 Jun 16:06
· 201 commits to main since this release
3230810

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 and docker-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 the config.json file to specify which error messages are allowed to be ignored by the node when simulating transactions.
  • New flag "payment_address" in the config.json file to specify the public address of the node's escrow wallet. This is an instance of Infernet's Wallet contract.
  • New flag "accepted_payments" in the config.json's "containers" subsection to specify which tokens the container accepts as payment for jobs.
  • New flag "generates_proofs" in the config.json's "containers" subsection to specify whether the container generates proofs, defaults to false.
  • 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 the config.json file to specify the public address of Infernet's Registry 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 the config.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 and GET /chain/address endpoints into GET /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 now 3600 seconds.
    • LIVE_INTERVAL for live metrics is now 60 seconds.
  • Moved snapshot_sync under the chain section of config.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 latest sub_id & syncing all subscriptions since the last sync. SubscriptionCancelled is now caught by checking if activeAt is set to max uint32.
    This was an optimization done in the infernet-sdk 1.0.0 contracts. SubscriptionFulfilled is now checked instead by reading the redundancyCount 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's containers 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
    the scripts directory. The Wallet class also has the register_node & activate_node methods removed.
  • Removed the "coordinator_address" flag from the config.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 to 3.9.4.
  • Only localhost allowed to make calls to PUT /api/status.