Drag the bars. Watch trust flow in bits of information.
Three voters — Alice, Bob, and Carol — each sign a probability distribution over two candidate blocks at height 1, plus a "none" slot. Move their sliders to see the market, fork-choice, and KL–scored trust update in real time. All math matches the v0.2 reference implementation.
How to read this
Voter panels— each one's distribution is a three-color bar over A (dark blue), B (magenta), and the "none" slot (grey). Move the top two sliders; "none" absorbs whatever probability is left.
Market— the dark panel renders \(W(B)=\sum_v t_v\cdot q_v(B)\) as two vertical bars. The amber crown marks the winner under greedy fork-choice; the numbers below are the normalized market probabilities and the height's information content.
Finalization— once you pick a realised \(y\), every voter's bar grows to \(\alpha\cdot(\log q_v(y) - \log p_m(y))\). Positive bars (green) mean the voter beat the market in KL bits; negative bars (red) mean they fell short.
Jensen tax— \(\sum \Delta t_v\) on the right-hand card. When everyone agrees it's ≈ 0; when they disagree a lot, trust quietly deflates as "the cost of disagreement".
The math, as run
for v in { alice, bob, carol }:
q_v = slider values, in ppm, summing to 1_000_000
W(B) = Σ_v t_v · q_v(B)
winner = argmax W(B) // ties broken by lex-smallest id
p_m(B) = W(B) / Σ_v t_v
p_m(none) = Σ_v t_v · q_v(none) / Σ_v t_v
Δt_v = round( α · ( log(max(q_v(y), 1e-9))
− log(max(p_m(y), 1e-9)) ) )
t_v := max(0, t_v + Δt_v)
The numbers at the top-level "Whitepaper example" preset match the ones asserted by crates/pot-git/tests/e2e.rs to the millitrust.