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
The score is computed inside EngagementOracle and exposed both as a regular view function and as precompile 0x0A for contract use.

FireDAG structure

Each block carries parent_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:
  1. Remove the “one leader at a time” bottleneck — multiple validators can propose in parallel and cross-reference each other.
  2. Keep finality fast — the BFT layer still requires ⌊2N/3⌋+1 signatures, so a block is final within ~2s.
  3. Survive network partitions — uncle branches merge back into the DAG once connectivity returns, via yc_getTips and the gossip protocol.

Why this design