The Diamond Standard
Ludopoly is built on the Diamond Standard, an Ethereum Improvement Proposal that allows a single deployed contract address to serve as a proxy through which many independently upgradeable modules — called facets — operate. This architecture gives the protocol the upgradeability of a software system with the trustless permanence of a blockchain deployment. Players interact with a single stable contract address throughout the lifetime of the protocol, regardless of how many facets are added, updated, or replaced over time.
Facet Responsibilities
Each facet in the Ludopoly system is responsible for a clearly defined domain. Account management, social relationships, world interaction, zero-knowledge travel verification, treasure claiming, and token economics each live in their own facet. This separation ensures that a change to the travel physics, for example, has no risk of inadvertently affecting how the treasury system handles reward distributions.
A unified storage structure shared across all facets means that the game state — player positions, room records, social relationships, card balances — is coherent and consistent no matter which facet is serving a given transaction.
The Diamond Standard also allows new facets to be added without redeploying the system. Future card categories, new game modes, and additional governance mechanisms can all be introduced as new facets while preserving all existing state.
N-Layered Deployment
The deployment process follows a strict layering discipline. Infrastructure contracts are deployed first. Identity contracts are deployed above them and depend on the infrastructure layer. Verification contracts — the zero-knowledge circuits — are deployed next. Game logic sits above verification, ensuring that all moves are checked before any state is updated. Configuration contracts sit at the top of the stack, allowing governance parameters to be adjusted without touching the core logic.
This layering mirrors the dependency structure of the system and ensures that upgrades can be made to any layer without requiring the redeployment of layers that depend on it.