The problem
Proof of Work rewards compute. Proof of Stake rewards capital. Neither rewards the behavior that actually gives a social network its value: users engaging with content. PoE flips this: the same on-chain engagement that signals user value also feeds consensus and governance. The design goal is that the people producing and curating content become the people producing blocks; on the current testnet, validators are operated by the foundation.Two halves
PoE (Proof of Engagement)
A Sybil-resistant score (
ES) derived from on-chain engagement actions (posts,
likes, comments, shares, watches, NFT mints, tips). ES weights leader selection,
staking jars, and DAO voting power.FireDAG
A DAG-capable block format (up to 4 parents per block) finalized by rolling BFT
rounds. Parallel production is implemented and tested on a branch; the live network
currently runs single-leader-per-round. Byte-exact deterministic throughout.
ES formula
- weight — per-action-type constant (see Engagement Score)
- decay — exponential half-life of ~30 days; stale activity fades
- quality — anti-sybil factor from on-chain signals (action cadence, wallet age, social graph); device/IP heuristics, where used, come from the oracle operator and are not purely re-derivable on-chain
EngagementOracle and exposed both as a regular view
function and as precompile 0x0A for contract use.
FireDAG structure
Each block carriesparent_hashes: Vec<Hash> and a dag_round: u32, and verifiers accept
up to 4 parents. On the live network every block is produced single-leader with
parent_hashes = [parent] (k=1); parallel DAG production is implemented and tested on a
branch, gated behind the certified-DAG fork-choice. Once enabled, the DAG format will:
- Remove the “one leader at a time” bottleneck — multiple validators can propose in parallel and cross-reference each other.
- Keep finality fast — the BFT layer still requires
⌊2N/3⌋+1signatures, so a block is final within ~2s. - Survive network partitions — uncle branches merge back into the DAG once connectivity
returns, via
yc_getTipsand the gossip protocol.