Transaction relay

Platform / build: Dandelion++ (dandelion) is in blvm default 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:

  1. Stem Phase: Transaction relayed along a random path (obscures origin)
  2. 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

  1. Privacy: Obscures transaction origin
  2. Formal Guarantees: Anonymity guarantees against origin analysis
  3. Backward Compatible: Falls back to standard relay if disabled
  4. 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 on NewBlock / BlockMined, inbound via queue_received_block_bytes.
  • Node support: advertises NODE_FIBRE on P2P and publishes CompanionUdpPeerRegistered / CompanionUdpPeerUnregistered when 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 dandelion feature + [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_FIBRE service bit and companion-UDP events for modules

Source