Skip to content

Implement anti-pre-revelation mechanism for on-chain version #13

Description

@0xferit

Context

The current centralized server naturally prevents pre-revelation: commit hashes are held privately and never broadcast to other players, so no player can prove their commitment to others.

When the game moves on-chain (Ethereum), commit hashes become public. A player could share their (choice, salt) and anyone could verify it against the on-chain hash, making pre-revelation provable and enabling explicit coordination that bypasses focal-point discovery.

Goal

Implement an anti-pre-revelation mechanism so that revealing your commitment to others before the reveal phase is economically unprofitable, preserving the independent-convergence property of the Schelling game.

References

  • On Anti-Pre-Revelation Games (Vitalik Buterin, 2015): Proposes a parallel betting game where anyone who receives a pre-revelation can bet against the revealer, making pre-revelation a liability.
  • The P + Epsilon Attack (Vitalik Buterin, 2015): Describes how credible conditional bribes can make voting for the attacker's preferred outcome a dominant strategy at zero cost.

Approach (TBD)

The leading candidate is the parallel betting mechanism from the anti-pre-revelation post: if Alice pre-reveals to Bob, Bob can register a bet predicting Alice's choice. If Alice follows through, she loses coins to Bob. This converts the public good of detecting collusion into a private good of profitable betrayal.

Alternatives to evaluate:

  • Timelock/threshold encryption (external decryption service like drand)
  • ZK-based commit schemes
  • Hybrid approaches

Current state

The centralized server provides anti-pre-revelation as an implementation artifact (hashes are private). This issue tracks making it a designed, cryptoeconomic property for the on-chain version.

Metadata

Metadata

Assignees

No one assigned

    Labels

    deferredValid but not actionable yet

    Projects

    Status
    Done

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions