Seeding the THORChain Network

Solving how the THORChain network can be joined by new peers or queried by services

Seeding the THORChain Network
http://thornodeip:1317>/thorchain/pool_addresses

Introduction

Seeding a network to existing peers is a difficult problem for all networks. A new peer needs to know where to look in order to start a connection and syncing with a network. Seed nodes are not critical and can easily be replaced by other seed nodes, however the information returned from a seed node should never be trusted. Ideally there are many redundant seed nodes and no single seed node should be relied upon.

Bitcoin has hard-coded seed nodes in the client from community members. These nodes are queried on startup and return a list of current Bitcoin peers to allow the new peer to begin connecting to the network.

https://github.com/bitcoin/bitcoin/blob/master/src/chainparams.cpp#L143

Cosmos also has hard coded seed nodes that perform a similar function.

1f412fd8f1b173feff12b4a8cc8d54372c4da10c

THORChain Seed Node

THORChain team will never run a mainnet node in an official capacity, however it will run a Seed Node service that allows other peers and services to query.

This Seed Node will be open-source and other THORNode operators will be encouraged to run it. Over time Seed Nodes that are consistent, supported by the community and demonstrate long term alignment with the project will be listed in a public forum.

The Seed Node (https://testnet-seed.thorchain.info) simply returns a current list of known THORChain peers:["3.91.25.225", "3.227.13.6", "3.235.93.146", "3.94.144.91", "54.237.155.154", "3.226.235.152"]

The IP addresses returned by the Seed Node are active THORNodes that can then be queried by services.

THORNodes

THORNodes run a variety of services such as:

  • Connected chain nodes (Bitcoin, Ethereum, Binance Chain)
  • THORChain state machine
  • Midgard API
  • Telegram Bot Alert Service

These services are available on different ports and can be queried in accordance with the API published and any connection limitations set in place by Node Operators (such as IP white/black-listing, rate limits).

The most important service that would be queried is the THORChain address endpoint: /thorchain/pool_addresses

This returns the current pool address to accept incoming funds:

This is a critical bit of infrastructure for all connected wallets, exchanges and services — this is where funds are sent by users wishing to swap, stake or bond.

Importantly, assuming the node is honest, this address is for the main Asgard TSS vault. There is no private key associated with this address and all outgoing transactions are coordinated in accordance with the rules of the THORChain state machine and signed by a threshold signature scheme.

Although membership of the signing committee is known (http://<thornodeip:1317>/thorchain/vaults/asgard) it is very difficult to work out which nodes participated in each signing ceremony — giving each node plausible deniability in all transactions — an important quality of the network that minimises liability for nodes and allows them to consider running a THORNode even in countries with onerous regulations.

Preventing Phishing-attacks

As such, all connected services should follow the following process to prevent being phished by a malicious Node:

  1. Query a Seed Node (THORChain’s or community)
  2. Select 1/3rd + 1 of all returned THORNodes randomly
  3. Query the pool address endpoint from all selected THORNodes
  4. Ensure 100% compliance rate to the Asgard vault address (all nodes return the same address).
  5. If (4) fails, repeat Step (2–4).

THORChain team will build a reference implementation of this in the BEPSwap client, (and re-use it in Asgard Wallet), for the community to implement in their own projects.

Following THORChain Churn

Since THORChain churns continuously, (and does not re-use addresses), the vault address should never be cached and should be queried before every outgoing transaction.

Funds sent to an old vault address will be forever lost since THORNodes are anonymous and can not coordinate such a recovery transaction.

Documentation

With THORChain nearing Chaosnet, more documentation about infrastructure will be published to help the community understand how to interact and build on the network.


Community

To keep up to date, please monitor community channels, particularly Telegram and Twitter: