FireDAG is YouthChain’s block format and its roadmap for parallel production. The
live testnet currently runs single-leader-per-round — every block has a single
parent (
parent_hashes = [parent], k=1). The parallel proposals and path-weight DAG
fork-choice described below are implemented and tested on a branch and activate once the
certified-DAG fork-choice is enabled. Today the canonical tip is simply the block with
the most commit signatures at the highest finalized height (ties broken by lowest hash).Why a DAG?
Linear chains force a single leader at a time — throughput is capped by one block per slot. A DAG lets multiple validators propose in parallel and reference each other’s blocks as parents, reducing wasted work under load.Block shape
Every block exposes:block.number is defined as max(parent.number) + 1, not a strict successor. Two blocks
at the same height with disjoint transaction sets both contribute to throughput.
Tips
A tip is any block with no known descendants in the local view. Tips are tracked inChain::tips() and exposed over JSON-RPC:
parent_hashes. The leader typically picks the
single latest tip on its heaviest branch, plus any uncle branches it has seen, merging
them back in.
Visualizing the DAG
yc_getDagGraph returns an adjacency list suitable for direct D3 / Cytoscape rendering:
Fork choice on a DAG
Once parallel production is enabled, fork choice computesweight(tip) as the sum of
⌊2N/3⌋+1-BFT-finalized block weights on the path from tip back to genesis. The heaviest
tip wins. Unfinalized blocks contribute zero weight, so unconfirmed branches never eclipse
confirmed ones. Under today’s single-leader production this reduces to picking the tip with
the most commit signatures at the highest finalized height.