Mechanism design research and simulations for Futarchy.
mechanism-design/proposal-evaluation/— Proposal Poker model (see engine docs below).mechanism-design/galanis-market/— OpenSpiel formulation of the Galanis (2026) prediction-market game; CFR+ equilibria of the 4 information structures. Seegalanis-market/results/equilibria.mdand the public HTML writeup.
This repository now includes a Python simulation engine implementing the formal model in mechanism-design/proposal-evaluation/MODEL.md.
It supports:
- Pluggable mechanisms and agents discovered from folders.
- Scenario-driven runs from JSON.
- Per-proposal and aggregate reporting for:
- agent utility,
- mechanism
net_profit, - proposal utility (
x * yfor approved proposals).
python3 -m pip install -e '.[dev]'python3 -m proposal_poker.simulate \
--scenario examples/scenarios/basic.json \
--output /tmp/proposal-poker-report.jsonOptional extension submissions:
python3 -m proposal_poker.simulate \
--scenario examples/scenarios/basic.json \
--extensions-dir /path/to/my-submissions \
--output /tmp/report.json--extensions-dir can be repeated.
Each submissions root can contain:
agents/*.pymechanisms/*.py
Discovery is automatic. Duplicate IDs are rejected.
A valid agent class must expose:
agent_id: stract(wealth, signal, y, public_history, my_past) -> Contribution | None
A valid mechanism class must expose:
mechanism_id: strinit()publish(state)on_contribution(state, contribution) -> (state, receipt | None)on_round_end(state) -> (state, done)outcome(state) -> (decision, payout_fn, use_futarchy)valid_data() -> pydantic BaseModel class | None
Built-in examples live in:
mechanism-design/proposal-evaluation/agents/bayesian_threshold.pymechanism-design/proposal-evaluation/mechanisms/binary_staking_market.py
Top-level keys:
seed(optional)num_proposals(default500)round_cap(default20)stake_cap_fraction(default0.99)environmentmechanismagents
Reference scenario:
Report includes:
metadata: scenario hash, seed, duration, discovered plugin IDsaggregates: proposal/approval counts, proposal utility totals, oracle-optimal benchmark, regret, mechanism net profit totals/means, utility summary statsper_agent: wealth, total/mean utility, stake, transfer, participation countper_proposal:x,y, decisions, oracle fields, contribution and payout totals, mechanism net profit, proposal utility, forced termination flag
pytest -qA framework for studying how agents with private signals can collectively evaluate proposals. Each proposal has an unobservable quality and a public importance. Agents stake money to express their beliefs, and a mechanism aggregates these into approve/reject decisions.
The model separates the environment (proposals, agents, signals, utilities) from the mechanism (rules of the game), enabling systematic search over both agent strategies and mechanism designs.
See mechanism-design/proposal-evaluation/MODEL.md for the formal specification.