Erigon node as a Golem service
The purpose of this example is to demonstrate building a Golem service using a dedicated, self-contained runtime. It features an Ethereum network client, Erigon (f.k.a. Turbo-geth) started on provider nodes on user's demand. Interaction with the service, once it's running and its location and credentials have been passed to the requestor, is not facilitated by Golem though.
The application consist of three major components:
- User interface (
client/
)
A browser-based interface written in TypeScript using React. It allows the end user to interact with the application, i.e. start an Erigon node after authenticating with their Metamask wallet, and later manage their node(s). - Requestor server (
requestor/
)
A Python application developed using Quart and yapapi-service-manager. It acts both as an HTTP server (handling requests from the user interface), and as a requestor agent (submitting tasks to the Golem network). - Erigon runtime (
ya-runtime-erigon/
)
A dedicated, self-contained runtime created with ya-runtime-sdk. It is a Rust binary wrapping Erigon service itself so that it can be orchestrated by yagna daemon. The runtime also controls the access to the service by managing Nginx configuration.
To use the application locally, run docker-compose up
and open http://localhost:8000. You can provide your own subnet by setting up the SUBNET_TAG
environment variable. The default docker-compose.yml
config starts the requestor server and frontend. To start the network checker as well, include -f network-checker.yml
.
Instructions how to run client and e2e tests are here. Instructions how to run and test the requestor server are here.
Full project documentation can be found in the Golem handbook.