GithubHelp home page GithubHelp logo

ritual-net / infernet-node Goto Github PK

View Code? Open in Web Editor NEW
63.0 5.0 29.0 382 KB

The Infernet Node is a lightweight off-chain client for Infernet responsible for fulfilling compute workloads.

Home Page: https://docs.ritual.net/infernet/node/introduction

License: BSD 3-Clause Clear License

Dockerfile 0.51% Makefile 0.67% Shell 0.04% Python 98.78%
blockchain ethereum infernet ritual

infernet-node's Introduction

pre-commit

Infernet Node

The Infernet Node is the off-chain counterpart to the Infernet SDK from Ritual, responsible for servicing compute workloads and delivering responses to on-chain smart contracts.

Developers can flexibily configure an Infernet Node for both on- and off-chain compute consumption, with extensible and robust parameterization at a per-container level.

Important

Infernet Node architecture, quick-start guides, and in-depth documentation can be found on the Ritual documentation website

Warning

This software is being provided as is. No guarantee, representation or warranty is being made, express or implied, as to the safety or correctness of the software.

Node configuration

At its core, the Infernet Node operates according to a set of runtime configurations. Some of these configurations have sane defaults and do not need modification. See config.sample.json for an example, or copy to begin modifying:

# Copy and modify sample config
cp config.sample.json config.json
vim config.json

Required configuration parameters

  • log_path (string). The local file path for logging.
  • startup_wait (float, optional). The number of seconds to wait for containers to start up before starting the node.
  • chain (object). Chain configurations.
    • enabled (boolean). Whether chain is enabled on this node.
    • trail_head_blocks (integer). if enabled: how many blocks to stay behind head when syncing. Set to 0 to ignore.
    • rpc_url (string). if enabled: the HTTP(s) JSON-RPC url.
    • registry_address (string). if enabled: the Registry contract address.
    • wallet (object). if enabled:
      • max_gas_limit (integer). Maximum gas limit per node transaction
      • private_key (string). Node wallet private key
      • payment_address (string, optional). Public address of the node's escrow wallet. This is an instance of Infernet's Wallet contract. If not provided, the node will skip subscriptions that provide payment.
      • allowed_sim_errors (array[string], optional). Allowed error messages to ignore when simulating transactions. Checks for inclusion in error message. Case-insensitive. i.e. ["out of gas"] matches "Contract reverted: Out of gas". Defaults to [].
    • snapshot_sync (object, optional). Snapshot sync configurations.
      • sleep (float, optional). Number of seconds to sleep between snapshot syncs. Defaults to 1.0.
      • batch_size (int, optional). Number of subscriptions to sync in each batch. Defaults to 200.
  • docker (object, optional). Docker credentials to pull private containers with
    • username (string). The Dockerhub username.
    • password (string). The Dockerhub Personal Access Token (PAT).
  • containers (array[container_spec]). Array of supported container specifications.
    • container_spec (object). Specification of supported container.
      • id (string). Must be unique. ID of supported service.
      • image (string). Dockerhub image to run container from. Must be local, public, or accessible with provided DockerHub credentials.
      • command (string). The command and flags to run the container with.
      • env (object). The environment variables to pass into the container.
      • port (integer). Local port to expose this container on.
      • rate_limit (object, optional). REST server rate-limiting configurations. If not provided, defaults are used.
        • num_requests (integer, optional). Maximum number of requests per period. Defaults to 60.
        • period (float, optional). Time period in seconds for allowing num_requests. Defaults to 60.0.
      • external (boolean). Whether this container can be the first container in a JobRequest.
      • description (string, optional). Description of service provided by this container.
      • allowed_ips (array[string]). Container-level firewall. Only specified IPs and/or CIDR blocks allowed to request execution of this container.
        • Leave empty for no restrictions.
      • allowed_addresses (array[string]). Container-level firewall. Only specified addresses allowed to request execution of this container, with request originating from on-chain contract.
        • Leave empty for no restrictions.
      • accepted_payments (dict[string, string], optional). Payment configurations for this container. This is a dictionary of accepted token addresses (zero address for native token i.e. ETH) and their corresponding minimum payment amount. If not provided, no payments will be received. If provided, subscriptions that don't meet these requirements will be skipped.
        • Leave empty for no payment requirements.
      • generates_proofs (boolean). Whether this container generates proofs. Defaults to false. If false, the node will skip subscriptions that require proofs from this container.
      • allowed_delegate_addresses (array[string]). Container-level firewall. Only specified addresses allowed to request execution of this container, with request originating from on-chain contract but via off-chain delegate subscription (with this address corresponding to the delegate subscription owner).
        • Leave empty for no restrictions.
      • gpu (boolean). Whether this should be a GPU-enabled container. Host must also be GPU-enabled.
      • volumes (array[string]). The volume mounts for this container.

Sane default configuration parameters

  • server (object). Server configurations.
    • port (integer). Port to run server on. Defaults to 4000.
  • redis (object). Redis configurations.
    • host (string). Host to connect to. Defaults to "redis".
    • port (integer). Port to connect to. Defaults to 6379.
  • forward_stats (boolean). Whether to send diagnostic system stats to Ritual. Defaults to true.
  • startup_wait (float). Number of seconds to wait for containers to start up before starting the node. Defaults to 60.

Deploying the node

Locally via Docker

# Set tag
tag="0.1.0"

# Build image from source
docker build -t ritualnetwork/infernet-node:$tag .

# Configure node
cd deploy
cp ../config.sample.json config.json
# FILL IN config.json #

# Run node and dependencies
docker compose up -d

Locally via Docker (GPU-enabled)

The GPU-enabled version of the image comes pre-installed with the NVIDIA CUDA Toolkit. Using this image on your GPU-enabled machine enables the node to interact with the attached accelerators for diagnostic and purposes, such as heartbeat checks and utilization reports.

# Set tag
tag="0.1.0"

# Build GPU-enabled image from source
docker build -f Dockerfile-gpu -t ritualnetwork/infernet-node:$tag-gpu .

# Configure node
cd deploy
cp ../config.sample.json config.json
# FILL IN config.json #

# Run node and dependencies
docker compose -f docker-compose-gpu.yaml  up -d

Locally via source

# Create and source new python venv
python3.11 -m venv env
source ./env/bin/activate

# Install dependencies
make install

# Configure node
cp config.sample.json config.json
# FILL IN config.json #

# Run node
make run

Remotely via AWS / GCP

Follow README instructions in the infernet-deploy repository.

Publishing a Docker image

# Set tag
tag="0.1.0"

# Build for local platform
make build

# Multi-platform build and push to repo
make build-multiplatform

License

BSD 3-clause Clear

infernet-node's People

Contributors

akilesh-ritual avatar anish-ritual avatar arshan-ritual avatar igor-ritual avatar qt-ritual avatar ritual-all avatar stelios-ritual avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

infernet-node's Issues

deploy-node-1 is failing with "the method eth_newFilter does not exist/is not available"

Deploy-node-1 is failing with the error "the method eth_newFilter does not exist/is not available" after docker compose up command

node-1       | 2024-05-30 19:20:20 [info     ] Ignored subscription creation                      [chain.listener] id=4258 err=Subscription completed
node-1       | 2024-05-30 19:20:20 [info     ] Ignored subscription creation                      [chain.listener] id=4251 err=Subscription completed
node-1       | 2024-05-30 19:20:25 [info     ] Finished snapshot sync                             [chain.listener] new_head=15153446
node-1       | 2024-05-30 19:20:26 [info     ] Running node lifecycle                             [__main__] 
node-1       | 2024-05-30 19:20:26 [info     ] Started ChainListener lifecycle                    [chain.listener] last_synced=15153446
node-1       | 2024-05-30 19:20:26 [info     ] Serving REST webserver                             [server.rest] addr=0.0.0.0 port=4000
node-1       | 2024-05-30 19:20:26 [error    ] Task exited: {'code': -32601, 'message': 'the method eth_newFilter does not exist/is not available'} [__main__] 
node-1       | 2024-05-30 19:20:26 [info     ] Exited main process                                [__main__] 

deploy-node-1 Container always restart

While running ritual validator node, the container always restart.

Docker config

services:
  node:
    image: ritualnetwork/infernet-node:latest
    ports:
      - "0.0.0.0:4000:4000"
    volumes:
      - ./config.json:/app/config.json
      - node-logs:/logs
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - network
    depends_on:
      - redis
    restart:
      on-failure
    extra_hosts:
      - "host.docker.internal:host-gateway"
    stop_grace_period: 1m

Detail logs:

2024-03-27 18:18:24 [info     ] Initialized ChainProcessor                         [chain.processor]
2024-03-27 18:18:24 [info     ] Initialized ChainListener                          [chain.listener]
2024-03-27 18:18:24 [info     ] Initialized RESTServer                             [server.rest] port=4000
2024-03-27 18:18:24 [info     ] Running node lifecycle setup                       [__main__]
2024-03-27 18:18:24 [info     ] Pulling images, this may take a while...           [orchestration.docker]
2024-03-27 18:18:24 [info     ] Pulling image ritualnetwork/hello-world-infernet:latest... [orchestration.docker]
2024-03-27 18:18:24 [info     ] Pulling image ritualnetwork/infernet-anvil:0.0.0... [orchestration.docker]
2024-03-27 18:18:25 [info     ] Successfully pulled image ritualnetwork/hello-world-infernet:latest [orchestration.docker]
2024-03-27 18:18:25 [info     ] Successfully pulled image ritualnetwork/infernet-anvil:0.0.0 [orchestration.docker]
2024-03-27 18:18:25 [info     ] Container already running: hello-world             [orchestration.docker]
2024-03-27 18:18:25 [info     ] Container already running: anvil-node              [orchestration.docker]
2024-03-27 18:18:25 [info     ] Waiting for container startup                      [orchestration.docker] seconds=1.0
2024-03-27 18:18:26 [info     ] Container manager setup complete                   [orchestration.docker] running_containers=['hello-world', 'anvil-node']
2024-03-27 18:18:26 [info     ] Started snapshot sync                              [chain.listener] head=12387079 behind=0
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/web3/contract/utils.py", line 319, in async_call_contract_function
    output_data = async_w3.codec.decode(output_types, return_data)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/eth_abi/codec.py", line 162, in decode
    return cast(Tuple[Any, ...], decoder(stream))
                                 ^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/eth_abi/decoding.py", line 131, in __call__
    return self.decode(stream)
           ^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/eth_utils/functional.py", line 47, in inner
    return callback(fn(*args, **kwargs))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/eth_abi/decoding.py", line 224, in decode
    self.validate_pointers(stream)
  File "/usr/local/lib/python3.11/site-packages/eth_abi/decoding.py", line 218, in validate_pointers
    decoder(stream)
  File "/usr/local/lib/python3.11/site-packages/eth_abi/decoding.py", line 131, in __call__
    return self.decode(stream)
           ^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/eth_abi/decoding.py", line 250, in decode
    raw_data = self.read_data_from_stream(stream)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/eth_abi/decoding.py", line 389, in read_data_from_stream
    raise InsufficientDataBytes(
eth_abi.exceptions.InsufficientDataBytes: Tried to read 32 bytes, only got 0 bytes.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/app/src/main.py", line 192, in <module>
    lifecycle_main()
  File "/app/src/main.py", line 178, in lifecycle_main
    loop.run_until_complete(lifecycle_setup())
  File "/usr/local/lib/python3.11/asyncio/base_events.py", line 654, in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
  File "/app/src/main.py", line 119, in lifecycle_setup
    await resource.setup()
  File "/app/src/chain/listener.py", line 339, in setup
    await self._snapshot_sync(cast(BlockNumber, head_block))
  File "/app/src/chain/listener.py", line 174, in _snapshot_sync
    head_id = await self._coordinator.get_head_subscription_id(head_block)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/src/chain/coordinator.py", line 416, in get_head_subscription_id
    await self._contract.functions.id().call(block_identifier=block_number),
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/web3/contract/async_contract.py", line 307, in call
    return await async_call_contract_function(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/web3/contract/utils.py", line 337, in async_call_contract_function
    raise BadFunctionCallOutput(msg) from e
web3.exceptions.BadFunctionCallOutput: Could not transact with/call contract function, is contract deployed correctly and chain synced?

Node crashes on RPC error response (Quicknode)

If I use Quicknode as a RPC for the node (base chain), it will crash once it finishes syncing up with the chain:

deploy-node-1       | 2024-02-24 02:39:14 [info     ] Sent tx                                            [chain.processor] id=2217 interval=1 delegated=False tx_hash=******
deploy-node-1       | 2024-02-24 02:39:14 [info     ] Sent tx                                            [chain.processor] id=2218 interval=1 delegated=False tx_hash=****
deploy-node-1       | /usr/local/lib/python3.11/site-packages/structlog/stdlib.py:1062: UserWarning: Remove `format_exc_info` from your processor chain if you want pretty exceptions.
deploy-node-1       |   ed = p(logger, meth_name, ed)
deploy-node-1       | --- Logging error ---
deploy-node-1       | Traceback (most recent call last):
deploy-node-1       |   File "/usr/local/lib/python3.11/logging/__init__.py", line 1110, in emit
deploy-node-1       |     msg = self.format(record)
deploy-node-1       |           ^^^^^^^^^^^^^^^^^^^
deploy-node-1       |   File "/usr/local/lib/python3.11/logging/__init__.py", line 953, in format
deploy-node-1       |     return fmt.format(record)
deploy-node-1       |            ^^^^^^^^^^^^^^^^^^
deploy-node-1       |   File "/usr/local/lib/python3.11/site-packages/structlog/stdlib.py", line 1062, in format
deploy-node-1       |     ed = p(logger, meth_name, ed)
deploy-node-1       |          ^^^^^^^^^^^^^^^^^^^^^^^^
deploy-node-1       |   File "/usr/local/lib/python3.11/site-packages/structlog/dev.py", line 513, in __call__
deploy-node-1       |     sio.write("\n" + exc)
deploy-node-1       |               ~~~~~^~~~~
deploy-node-1       | TypeError: can only concatenate str (not "ClientResponseError") to str
deploy-node-1       | Call stack:
deploy-node-1       |   File "/app/src/main.py", line 179, in <module>
deploy-node-1       |     lifecycle_main()
deploy-node-1       |   File "/app/src/main.py", line 172, in lifecycle_main
deploy-node-1       |     loop.run_until_complete(lifecycle_run())
deploy-node-1       |   File "/usr/local/lib/python3.11/asyncio/base_events.py", line 640, in run_until_complete
deploy-node-1       |     self.run_forever()
deploy-node-1       |   File "/usr/local/lib/python3.11/asyncio/base_events.py", line 607, in run_forever
deploy-node-1       |     self._run_once()
deploy-node-1       |   File "/usr/local/lib/python3.11/asyncio/base_events.py", line 1922, in _run_once
deploy-node-1       |     handle._run()
deploy-node-1       |   File "/usr/local/lib/python3.11/asyncio/events.py", line 80, in _run
deploy-node-1       |     self._context.run(self._callback, *self._args)
deploy-node-1       |   File "/app/src/main.py", line 123, in lifecycle_run
deploy-node-1       |     log.error("Task exception", exception=task.exception())
deploy-node-1       |   File "/usr/local/lib/python3.11/site-packages/structlog/stdlib.py", line 200, in error
deploy-node-1       |     return self._proxy_to_logger("error", event, *args, **kw)
deploy-node-1       |   File "/usr/local/lib/python3.11/site-packages/structlog/stdlib.py", line 247, in _proxy_to_logger
deploy-node-1       |     return super()._proxy_to_logger(method_name, event=event, **event_kw)
deploy-node-1       |   File "/usr/local/lib/python3.11/site-packages/structlog/_base.py", line 223, in _proxy_to_logger
deploy-node-1       |     return getattr(self._logger, method_name)(*args, **kw)
deploy-node-1       | Message: {'exception': ClientResponseError(RequestInfo(url=URL('https://dry-prettiest-hexagon.base-mainnet.quiknode.pro/****'), method='POST', headers=<CIMultiDictProxy('Host': 'dry-prettiest-hexagon.base-mainnet.quiknode.pro', 'Content-Type': 'application/json', 'User-Agent': "web3.py/6.11.0/<class 'web3.providers.async_rpc.AsyncHTTPProvider'>", 'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Content-Length': '402')>, real_url=URL('https://dry-prettiest-hexagon.base-mainnet.quiknode.pro/*****')), (), status=413, message='Request Entity Too Large', headers=<CIMultiDictProxy('Access-Control-Allow-Credentials': 'true', 'Access-Control-Allow-Headers': 'Content-Type,Authorization,User-Agent', 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS', 'Access-Control-Allow-Origin': '', 'Content-Type': 'application/json', 'Vary': 'Accept-Encoding', 'X-Node-Id': 'base_base-mainnet_fra', 'X-Ratelimit-Limit': '1000000, 1000000;w=86400', 'X-Ratelimit-Remaining': '967152', 'X-Ratelimit-Reset': '81875', 'Date': 'Sat, 24 Feb 2024 02:39:14 GMT', 'Content-Length': '168')>), 'event': 'Task exception', 'level': 'error', 'logger': '__main__', 'timestamp': '2024-02-24 02:39:14'}

Error code suggests that the request body is too large for Quicknode to handle:
https://support.quicknode.com/hc/en-us/articles/20626358903185-Understanding-the-413-Request-Entity-Too-Large-Error

Seems to work fine with Alchemy which likely doesn't rate limit in the same way.

node crash error

docker image ritualnetwork/infernet-node:0.1.0

2024-03-01 06:21:40 [info     ] Serving REST webserver                             [server.rest] addr=0.0.0.0 port=2631
/usr/local/lib/python3.11/site-packages/structlog/stdlib.py:1062: UserWarning: Remove `format_exc_info` from your processor chain if you want pretty exceptions.
  ed = p(logger, meth_name, ed)
--- Logging error ---
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/structlog/stdlib.py", line 1062, in format
    ed = p(logger, meth_name, ed)
         ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/structlog/dev.py", line 513, in __call__
    sio.write("\n" + exc)
              ~~~~~^~~~~
TypeError: can only concatenate str (not "ValueError") to str
Call stack:
  File "/app/src/main.py", line 183, in <module>
    lifecycle_main()
  File "/app/src/main.py", line 176, in lifecycle_main
    loop.run_until_complete(lifecycle_run())
  File "/usr/local/lib/python3.11/asyncio/base_events.py", line 640, in run_until_complete
    self.run_forever()
  File "/usr/local/lib/python3.11/asyncio/base_events.py", line 607, in run_forever
    self._run_once()
  File "/usr/local/lib/python3.11/asyncio/base_events.py", line 1922, in _run_once
    handle._run()
  File "/usr/local/lib/python3.11/asyncio/events.py", line 80, in _run
    self._context.run(self._callback, *self._args)
  File "/app/src/main.py", line 125, in lifecycle_run
    log.error("Task exception", exception=task.exception())
  File "/usr/local/lib/python3.11/site-packages/structlog/stdlib.py", line 200, in error
    return self._proxy_to_logger("error", event, *args, **kw)
  File "/usr/local/lib/python3.11/site-packages/structlog/stdlib.py", line 247, in _proxy_to_logger
    return super()._proxy_to_logger(method_name, event=event, **event_kw)
  File "/usr/local/lib/python3.11/site-packages/structlog/_base.py", line 223, in _proxy_to_logger
    return getattr(self._logger, method_name)(*args, **kw)
Message: {'exception': ValueError({'code': -32000, 'message': 'filter not found'}), 'event': 'Task exception', 'level': 'error', 'logger': '__main__', 'timestamp': '2024-03-01 06:21:40'}
Arguments: ()
2024-03-01 06:21:40 [info     ] Exited main process                                [__main__] 

Node crashes after initialization

Hi,

I`ve managed to set up the node and can even register it on the chain but after around 15 mins after it has ran through all 2217 subscription IDs the container crashes with this error:

node-1 | 2024-02-22 20:34:15 [info ] Ignored subscription creation [chain.listener] id=2216 err=Container not supported
node-1 | 2024-02-22 20:34:15 [info ] Ignored subscription creation [chain.listener] id=2217 err=Container not supported
node-1 | 2024-02-22 20:34:15 [info ] Finished snapshot sync [chain.listener] new_head=10921813
node-1 | 2024-02-22 20:34:17 [info ] Running node lifecycle [main]
node-1 | 2024-02-22 20:34:17 [info ] Started ChainListener lifecycle [chain.listener] last_synced=10921813
node-1 | 2024-02-22 20:34:17 [info ] Serving REST webserver [server.rest] addr=0.0.0.0 port=4000
node-1 | /usr/local/lib/python3.11/site-packages/structlog/stdlib.py:1062: UserWarning: Remove format_exc_info from your processor chain if you want pretty exceptions.
node-1 | ed = p(logger, meth_name, ed)
node-1 | --- Logging error ---
node-1 | Traceback (most recent call last):
node-1 | File "/usr/local/lib/python3.11/logging/init.py", line 1110, in emit
node-1 | msg = self.format(record)
node-1 | ^^^^^^^^^^^^^^^^^^^
node-1 | File "/usr/local/lib/python3.11/logging/init.py", line 953, in format
node-1 | return fmt.format(record)
node-1 | ^^^^^^^^^^^^^^^^^^
node-1 | File "/usr/local/lib/python3.11/site-packages/structlog/stdlib.py", line 1062, in format
node-1 | ed = p(logger, meth_name, ed)
node-1 | ^^^^^^^^^^^^^^^^^^^^^^^^
node-1 | File "/usr/local/lib/python3.11/site-packages/structlog/dev.py", line 513, in call
node-1 | sio.write("\n" + exc)
node-1 | ~~~~~^~~~~
node-1 | TypeError: can only concatenate str (not "ValueError") to str
node-1 | Call stack:
node-1 | File "/app/src/main.py", line 183, in
node-1 | lifecycle_main()
node-1 | File "/app/src/main.py", line 176, in lifecycle_main
node-1 | loop.run_until_complete(lifecycle_run())
node-1 | File "/usr/local/lib/python3.11/asyncio/base_events.py", line 640, in run_until_complete
node-1 | self.run_forever()
node-1 | File "/usr/local/lib/python3.11/asyncio/base_events.py", line 607, in run_forever
node-1 | self._run_once()
node-1 | File "/usr/local/lib/python3.11/asyncio/base_events.py", line 1922, in _run_once
node-1 | handle._run()
node-1 | File "/usr/local/lib/python3.11/asyncio/events.py", line 80, in _run
node-1 | self._context.run(self._callback, *self._args)
node-1 | File "/app/src/main.py", line 125, in lifecycle_run
node-1 | log.error("Task exception", exception=task.exception())
node-1 | File "/usr/local/lib/python3.11/site-packages/structlog/stdlib.py", line 200, in error
node-1 | return self._proxy_to_logger("error", event, *args, **kw)
node-1 | File "/usr/local/lib/python3.11/site-packages/structlog/stdlib.py", line 247, in _proxy_to_logger
node-1 | return super()._proxy_to_logger(method_name, event=event, **event_kw)
node-1 | File "/usr/local/lib/python3.11/site-packages/structlog/_base.py", line 223, in _proxy_to_logger
node-1 | return getattr(self._logger, method_name)(*args, **kw)
node-1 | Message: {'exception': ValueError({'code': -32000, 'message': 'filter not found'}), 'event': 'Task exception', 'level': 'error', 'logger': 'main', 'timestamp': '2024-02-22 20:34:17'}
node-1 | Arguments: ()
node-1 | 2024-02-22 20:34:18 [info ] Exited main process [main]
node-1 exited with code 0

Any assistance would be much appreciated :)

coordinator address?

hey i want to run a node to support the network, what should I put for the coordinator address?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.