Algorand Node Types

The Algorand network is comprised of two distinct types of nodes, relays and non-relays. A participation node is a non-relay node that hosts one or more online accounts with valid participation keys.

Relay Nodes

A node is a valid relay node if two things are true:

  1. The node is configured to accept incoming connections on a publicly-accessible port (4161 by convention).
  2. The node's public IP address (or a valid DNS name) and assigned port are registered in Algorand's SRV records for specific network (MainNet/TestNet).

Relay nodes are where other nodes connect. Therefore, a relay node must be able to support a large number of connections, and handle the processing load associated with all the data flowing to and from these connections. Thus, relay nodes require significantly more power than non-relay nodes.

Archival Mode

Non-relay nodes can be configured to be archival or non-archival nodes. Archival nodes store the entire blockchain; non-archival nodes store only as many blocks as necessary to ensure progress. Thus, a non-archival node requires significantly less storage, generally less than a full day’s worth of blocks, and can reasonably bound its database size.

For example, after 36 hours, the TestNet archival ledger was 212.5MB, whereas the non-archival ledger was 9MB.

Currently, a relay node must be archival; a non-relay node may be archival or not.

Transaction Indexer

Currently locating a transaction is limited to a 1000 round range. Less if you are not an archival node. If a node is an archival node, you can set the isIndexerActive setting to true, which opens new REST calls to support finding any transaction stored on the node. This means when you enable the setting and restart the node all transactions on the node will be indexed. This allows swiftly locating specific transactions. See the Node Configuration Settings guide to implement this setting. The indexer can take up a great deal of space of disk space in addition to the space the ledger requires. The two REST calls that are enabled are:

/v1/transaction/{txid}
This call allows you to quickly find any transaction, using just the transaction id.

/v1/account/{account}/transactions?fromDate=YYYY-MM-DD&toDate=YYYY-MM-DD
This call allows you to locate all transactions involving a specific account within a date range. Date parameters support RFC3339 (ie 2006-01-02T15:04:05Z07:00)

See the specific SDK pages for use in specific languages (currently only /v1/transaction/{txid} is implemented in the SDKs).