Overview
Registry is the source of truth for game validity in Peridot. Responsibilities:- Register games
- Store PGC-1 contract address
- Store game status
- Enforce registration fee policy
- Support trusted factory-based registration
- Manage moderation and governance decisions
- Provide game listing data for catalog and indexing
Dependencies
Data Structures
Game
Status
State
Functions
1. registerGame
Registers a new game directly by publisher.function registerGame(gameId, contractAddress)
Params
Rules
- Only publisher
gameIdMUST be uniquecontractAddressMUST NOT be zero address- Registration fee MUST be paid unless publisher is fee-exempt
- Initial status MUST be
Pending
Behavior
publisher = PGC1(contractAddress).getPublisher()canonicalGameId = PGC1(contractAddress).getGameId()msg.senderMUST equalpublishergameIdMUST matchcanonicalGameId- collect registration fee if required
- send registration fee to treasury
- store game data
- append
gameIdtoallGameIds - set
status = Pending
2. registerGameByFactory
Registers a new game through trusted factory flow.function registerGameByFactory(gameId, contractAddress, publisher)
Params
Rules
- Only trusted factory
gameIdMUST be uniquecontractAddressMUST NOT be zero addresspublisherMUST NOT be zero address- Registration fee policy MUST still be enforced unless publisher is fee-exempt
- Initial status MUST be
Pending
Behavior
canonicalPublisher = PGC1(contractAddress).getPublisher()canonicalGameId = PGC1(contractAddress).getGameId()publisherMUST matchcanonicalPublishergameIdMUST matchcanonicalGameId- collect or verify registration fee settlement if required
- send registration fee to treasury
- store game data
- append
gameIdtoallGameIds - set
status = Pending
Notes
- This function is intended for one-click Factory onboarding
- Registration fee MAY be settled by Factory on behalf of publisher in the same transaction
3. setStatus
Updates game status.function setStatus(gameId, status)
Params
Rules
- Only admin
- Game MUST exist
statusMUST be one of:0Pending1Approved2Banned
4. setAdmin
Updates admin status for an account.function setAdmin(account, isAdmin)
Params
Rules
- Only governance
accountMUST NOT be zero address- Event SHOULD be emitted
5. setGovernance
Updates governance address.function setGovernance(governance)
Params
Rules
- Only current governance
governanceMUST NOT be zero address- Event SHOULD be emitted
6. setTreasury
Updates treasury receiver address.function setTreasury(treasury)
Params
Rules
- Only governance
treasuryMUST NOT be zero address- Event SHOULD be emitted
7. setFactory
Updates trusted factory address.function setFactory(factory)
Params
Rules
- Only governance
factoryMUST NOT be zero address- Event SHOULD be emitted
8. setRegistrationFee
Updates registration fee configuration.function setRegistrationFee(amount, token)
Params
Rules
- Only governance
tokenMUST be a valid supported payment token- Event SHOULD be emitted
9. setFeeExemption
Updates fee exemption status for a publisher or studio.function setFeeExemption(account, isExempt)
Params
Rules
- Only governance
accountMUST NOT be zero address- Event SHOULD be emitted
Notes
isExempt = truegrants free registrationisExempt = falseremoves free registration access
10. getGame
Returns full game data.function getGame(gameId)
Params
Returns
11. getAllGames
Returns all registered games.function getAllGames()
Returns
Notes
- Recommended for early-stage use
- For large scale deployments, off-chain indexing is recommended
12. getContractAddress
Returns PGC-1 contract address for a game.function getContractAddress(gameId)
Params
Returns
13. getStatus
Returns current game status.function getStatus(gameId)
Params
Returns
14. getGovernance
Returns governance address.function getGovernance()
Returns
15. getTreasury
Returns treasury receiver address.function getTreasury()
Returns
16. getFactory
Returns trusted factory address.function getFactory()
Returns
17. getRegistrationFee
Returns current registration fee configuration.function getRegistrationFee()
Returns
18. isFeeExempt
Returns whether an account is exempt from registration fee.function isFeeExempt(account)
Params
Returns
19. isAdmin
Returns whether an account has admin access.function isAdmin(account)
Params
Returns
Access Control
Requirements
- Every
gameIdMUST be unique - Every registered game MUST have a valid
contractAddress PGC-1MUST implementgetPublisher()PGC-1MUST implementgetGameId()gameIdMUST matchPGC-1.getGameId()- Direct registration MUST require
msg.sender == PGC-1.getPublisher() - Factory registration MUST require
publisher == PGC-1.getPublisher() - Banned games MUST remain queryable
- Registry MUST act as source of truth for game validity
- Registration fee policy MUST be enforced during registration
- Fee exemption MUST bypass registration fee without transferring value to publisher
Notes
- Registry stores game validity, not pricing
- Publisher and metadata belong to PGC-1
- Pricing belongs to Game Store
- Ownership belongs to PGC-1
- Registry is responsible for moderation and governance decisions
- Fee exemption is intended for grants, partnerships, and hackathon support
getAllGames()is suitable for early-stage scale- Large-scale catalog indexing SHOULD move to off-chain infrastructure