See here for instructions on how to set up a full node.
How full nodes register for secondary RaptorCast
-
Full nodes start by peering with some of the validators. They do this by peering with the
bootstrap peers specified in
node.toml, then asking them for their peers, and repeating until they have the name records of the full validator set. -
On a recurring basis, each validator (provided that it has
enable_publisher = trueinnode.toml) sends invites to the full nodes in its routing table up tomax_group_size, inviting the full nodes to join that validator’s secondary RaptorCast group. - A full node will accept or reject, rejecting if they are already in too many groups.
- The validator will collect these accept/reject responses and confirm a group.
-
The group will lasts for
round_spanspecified in the validator’snode.toml(default: 240 rounds). When one of these intervals is close to finishing, the validator starts sending invites for its next secondary RaptorCast group. -
Full nodes can (and should) join multiple secondary RaptorCast groups for redundancy.
This is controlled by the
max_num_groupparameter below.
Configuration
node.toml contains the following settings:
enable_publisher = truemeans that if the full node becomes a validator, it will participate as a secondary RaptorCast originator.max_group_sizemaximum number of full nodes in a groupround_spannumber of rounds that a group last forinvite_lookaheadhow far ahead (in rounds) does a validator sends invites to full nodes before the start of the roundmax_invite_waitmaximum number of rounds that a validator wait for invite response from the full node
- full nodes should have
enable_client = trueto participate in secondary RaptorCast max_num_groupindicates the maximum number of groups that the full node will joininvite_future_dist_minandinvite_future_dist_maxindicates the time range (in rounds) that the full node will accept the secondary raptorcast group inviteinvite_accept_heartbeat_msis a heartbeat which is used to determine whether the full node is receiving proposals
Additional options
Prioritized secondary RaptorCast inclusion
A full node may coordinate with a validator to be explicitly and consistently invited to that validator’s secondary RaptorCast group. To do this, the full node provides some information for the validator to include in its[fullnode_raptorcast.full_nodes_prioritized.identities] section. See
Validator Installation for details on what needs to
be provided. Note that this means the full node doesn’t have to rely on peer discovery to peer with
that validator.
Dedicated upstream
Validators also have the option of specifying full nodes to which they wish to directly forward all primary RaptorCast chunks. This utilizes a lot of validator bandwidth, since each registered downstream requires another copy of all chunks to be sent. It is potentially more reliable for the downstream node than subscribing via secondary RaptorCast, although in practice secondary RaptorCast is quite reliable. Note that if a full node is designated by one or more validators for dedicated chunk forwarding, then it could be configured withenable_client = false. This turns off attempting to participate
in secondary RaptorCast.
Comparison
| Configuration | Requires validator to whitelist full node | RaptorCast mode | Data Source |
|---|---|---|---|
| Normal | No | enable_client = true | Secondary RaptorCast |
| Prioritized secondary RaptorCast | Yes | enable_client = true | Secondary RaptorCast |
| Chunk forwarding | Yes | enable_client = false | Primary RaptorCast |
RaptorCast configurations for validators
Validators can toggle off their participation in secondary RaptorCast by settingenable_publisher = false.
Although turning secondary RaptorCast off will reduce bandwidth usage,
note that the bandwidth cost of secondary RaptorCast is relatively low; for example, even at
10,000 transactions per second, the expected usage will be about 6 MB per second (3 MB of
block data with 2x redundancy). Therefore, it is recommended to keep enable_publisher = true.

