FIBRE module (blvm-fibre)

UDP/FEC block relay as a loadable Commons module. Distinct from Dandelion++ transaction relay in Privacy relay.

Overview

blvm-fibre implements FIBRE-style block transport:

  • Outbound: on NewBlock / BlockMined, fetches the block via NodeAPI::get_block, FEC-encodes, and sends UDP chunks to registered FIBRE peers.
  • Inbound: assembles chunks and enqueues raw block bytes via NodeAPI::queue_received_block_bytes (same validation path as P2P BlockReceived).

The node core advertises NODE_FIBRE on P2P and emits companion-UDP events when peers advertise FIBRE (UDP port = peer TCP port + 1) for dynamic peer registration.

Wire types and FibreConfig live in blvm-protocol (fibre feature). The module crate owns UDP, Reed–Solomon, and relay logic.

Repository: BTCDecoded/blvm-fibre

Requirements

  • blvm-node with modules enabled.
  • Module listed in registry/modules.json (bootstrap via [modules] version pin) or built locally.
  • Do not bind the same UDP port twice on one host (only one FIBRE listener per deployment unless ports are explicitly separated).

Loading

Pin in blvm.toml (example):

[modules]
registry_url = "https://raw.githubusercontent.com/BTCDecoded/blvm/main/registry/modules.json"
blvm-fibre = "0.1.*"

Or place a release binary + module.toml on the module search path. See Module catalog — Installing modules.

Configuration

Module config.toml (or [modules.blvm-fibre] overrides):

KeyPurpose
fibre.enabledEnable relay when true (nested fibre table / FibreConfig)
udp_bindUDP listen host:port when not using TCP+1 follow mode (default 0.0.0.0:8334)
udp_follow_node_tcp_plus_oneListen on node P2P TCP port + 1 (node injects MODULE_CONFIG_NODE_P2P_LISTEN_* on spawn)
register_peers_from_p2pRegister peers that advertise NODE_FIBRE on P2P (UDP = peer TCP port + 1)
[[fibre_peers]]Static outbound targets: peer_id, udp_addr

FEC and timeout options are under the nested fibre table (FibreConfig in protocol), including fibre.enabled.

Example — follow node P2P port (mainnet P2P 8333 → FIBRE UDP 8334):

udp_follow_node_tcp_plus_one = true
register_peers_from_p2p = true

Example — static peer:

[[fibre_peers]]
peer_id = "relay-east"
udp_addr = "203.0.113.10:8334"

Events

EventModule action
NewBlockget_block → encode → send to registered FIBRE peers
BlockMinedSame outbound path for locally mined blocks
CompanionUdpPeerRegisteredOptional dynamic peer registration from P2P
CompanionUdpPeerUnregisteredRemove dynamic peer

Capabilities (module.toml)

  • read_blockchain
  • subscribe_events
  • queue_inbound_block

Node vs module

Node core (blvm-node)blvm-fibre module
FIBRE UDP/FECNot implemented in-processSubprocess + IPC
P2PAdvertises NODE_FIBRE; companion UDP eventsRegisters peers; sends/receives UDP
ConfigModule pins / [modules.blvm-fibre]Module config.toml
Operator docsPrivacy relayThis page

Troubleshooting

SymptomCheck
No outbound FIBRE sendsPeers registered? NewBlock firing? get_block returns block?
UDP bind failsPort clash with P2P+1 or another FIBRE listener; firewall
Blocks not accepted from FIBREqueue_received_block_bytes path; check module logs
Dynamic peers missingregister_peers_from_p2p = true; remote advertises NODE_FIBRE

See also