Transaction relay
Platform / build: Dandelion++ (
dandelion) is inblvmdefault features; portable Windows/aarch64 release CI builds omit it. FIBRE is a loadable module (blvm-fibre), not an in-node config table. See Release process: Build variants.
Overview
The node supports Dandelion++ for privacy-preserving transaction relay (optional dandelion compile-time feature). FIBRE is block relay over UDP/FEC: provided by the loadable blvm-fibre module, not an in-node [network.fibre] table. See FIBRE module. Package relay (BIP331) is documented in Package Relay (BIP331).
blvm default features include Dandelion++ (Linux x86_64 release artifacts use the same default set). Portable Windows/aarch64 releases use a smaller CI subset. CTV, Stratum V2 node demux, and other flags may still require explicit --features: see Release process: Build variants.
Dandelion++ (experimental build)
Dandelion++ provides privacy-preserving transaction relay with formal anonymity guarantees against transaction origin analysis. It operates in two phases: stem phase (obscures origin) and fluff phase (standard diffusion).
Requires: dandelion Cargo feature in the binary (blvm default features; omitted from portable release builds).
Architecture
Dandelion++ operates in two phases:
- Stem Phase: Transaction relayed along a random path (obscures origin)
- Fluff Phase: Transaction broadcast to all peers (standard diffusion)
Stem Path Management
Each peer maintains a stem path to a randomly selected peer:
#![allow(unused)] fn main() { pub struct StemPath { pub next_peer: String, pub expiry: Instant, pub hop_count: u8, } }
Stem Phase Behavior
- Transactions relayed to next peer in stem path
- Random path selection obscures transaction origin
- Stem timeout: 10 seconds (default)
- Fluff probability: 10% per hop (default)
- Maximum stem hops: 2 (default)
Fluff Phase Behavior
- Transaction broadcast to all peers
- Standard Bitcoin transaction diffusion
- Triggered by:
- Random probability at each hop
- Stem timeout expiration
- Maximum hop count reached
Configuration
Enable at runtime via [relay].enable_dandelion (or --enable-dandelion when the binary includes the feature). Tune stem/fluff under [dandelion]:
[relay]
enable_dandelion = true
[dandelion]
stem_timeout_seconds = 10
fluff_probability = 0.1 # 10%
max_stem_hops = 2
Benefits
- Privacy: Obscures transaction origin
- Formal Guarantees: Anonymity guarantees against origin analysis
- Backward Compatible: Falls back to standard relay if disabled
- Configurable: Adjustable timeouts and probabilities
FIBRE block relay (module)
FIBRE (Fast Internet Bitcoin Relay Engine) is block transport over UDP with FEC: not transaction propagation.
- Operator path: load
blvm-fibre(FIBRE module): outbound onNewBlock/BlockMined, inbound viaqueue_received_block_bytes. - Node support: advertises
NODE_FIBREon P2P and publishesCompanionUdpPeerRegistered/CompanionUdpPeerUnregisteredwhen peers advertise FIBRE (companion UDP = peer TCP port + 1) so the module can register dynamic peers.
There is no in-node network/fibre.rs or [network.fibre] configuration table.
Integration
Relay Manager
The RelayManager coordinates relay protocols:
- Standard block/transaction relay
- Dandelion++ integration (optional
dandelionfeature +[relay].enable_dandelion) - Package relay (optional; see Package Relay (BIP331))
FIBRE block relay runs in the blvm-fibre module process, not inside RelayManager.
Protocol Selection
Relay protocols are selected based on:
- Compile-time features (
dandelion, etc.) - Peer capabilities
- Configuration settings
- Runtime preferences
Components
- Dandelion++ stem/fluff phase management
- Relay manager coordination
- P2P
NODE_FIBREservice bit and companion-UDP events for modules
Source
- network_manager.rs (companion UDP events), blvm-fibre (UDP/FEC relay)
- relay.rs
- dandelion.rs