Requirements & Dependencies
- Foundry Toolkit: To install follow this guide.
- Node Operator delegation: address migrated to Towns Chain by DAO (see below).
- Warm wallet access to Node Operator wallet.
- Node URL pointing via DNS to Node FE attached to Node Storage.
- Access to Base over RPC endpoint
- Access to Towns Chain over RPC endpoint
- Sufficient gas on Node Operator wallet on both Base and Towns Chain to register
- Sufficient gas on Node FE wallet on Towns Chain and Base for validation and cross-chain transactions once node is operational.
Node FE’s are stateful and as such require consistent resolution of hostnames
to active instance. To avoid unintended bad consequences, it is strongly
encouraged to configure DNS for Node URL with exactly 1 A Record per domain
name. Put differently, each Node URL should point to at most 1 IP address.
The node operator wallet registered on Base must
be bridged to Towns Chain by the DAO prior to proceeding with node registration. Furthermore, the node operator needs warm access to this
wallet to perform node operations to register, and update a fleet of node instances.
When referencing contract methods in the below guide, keep in mind that our contracts are deployed using the Diamond Standard pattern. This means for practical purposes that when interacting with contracts on Base or Towns Chain, you will be calling each method on the associated diamond contract.
Registration Outline
The following outlines the logical steps to onboarding a Node FE with attached storage from 0 to 1. Instructions are applicable to testnet and mainnet. Instructions with specific calling signatures can be found below in the Node FE Registration sections. Please ensure you have completed Node Operator registration before proceeding with node registration.1
Start Stream Node in Info Mode
Operator should start the stream node process in info mode and additionally ensure DNS, TLS, and network are configured correctly.
2
Register Node in Towns Chain
Operator calls registerNode on the RiverRegistry diamond contract deployed on Towns Chain once health checks pass.
3
Register Node in Base
Operator calls registerNode on the BaseRegistry diamond contract to support cross-chain checks.
4
Start Stream Node
Operator starts the stream node by running the docker image to enter Towns Chain network once registered.
Node FE Registration
Once a node operator has registered their operator address on Towns Chain, they can proceed to register their nodes. Nodes are registered individually on Towns Chain and Base. Once a node is setup, attached to postgres storage, network configured with a public IP, and passing health checks (see System Requirements & Installation), the node is ready to enter the Towns Network and begin accepting stream writes. Registering a node on Towns Chain, can be accomplished by calling theregisterNode(address,string,uint8) method on the RiverRegistry diamond contract.
The below steps describe how to register a new node URL in Operational status using cast, a command-line tool that is part of Foundry for reading / writing to EVM chains over RPC url’s.
Setting a Node to
Operational status will allow the node to begin accepting stream writes and signal to the network that the node is healthy and ready to be connected to by clients. See all possible node statuses that a node can assume in RegistryStorage.1
Setup Variables for Registration
2
Register Node on Base and Towns Chain
Using Assuming the above reverts with
When the above transactions succeed and have been mined in a block on Towns Chain, you can re-run
cast let’s register our new node. First let’s check that the Node FE does not already exist. Node FE’s are identified in Towns Registry by their address so let’s check getNode to ensure the view reverts with NODE_NOT_FOUND before proceeding.NODE_NOT_FOUND, let’s proceed to register the new node with the Node Operator’s wallet.Registering a new node is a write transaction that will require the Node Operator wallet on Towns Chain and Base has Eth. To monitor Towns Chain transactions, you can use the explorer.
getNode(address) to confirm the node now exists in the network.3
Check Node Health from Debug Multi Dashboard
To check that your node is included in the network and healthy, you can navigate to:
$NODE_URL/debug/multi in a browser to see the node’s http1/2, grpc ping status and related health metrics.As an example, see https://ohare-3.staking.production.figment.io/debug/multi.