Skip to main content

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
Registry does NOT store publisher, metadata, pricing, or ownership.

Dependencies


Data Structures

Game

Status


State


Functions

1. registerGame

Registers a new game directly by publisher. function registerGame(gameId, contractAddress)

Params

Rules

  • Only publisher
  • gameId MUST be unique
  • contractAddress MUST 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.sender MUST equal publisher
  • gameId MUST match canonicalGameId
  • collect registration fee if required
  • send registration fee to treasury
  • store game data
  • append gameId to allGameIds
  • set status = Pending

2. registerGameByFactory

Registers a new game through trusted factory flow. function registerGameByFactory(gameId, contractAddress, publisher)

Params

Rules

  • Only trusted factory
  • gameId MUST be unique
  • contractAddress MUST NOT be zero address
  • publisher MUST 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()
  • publisher MUST match canonicalPublisher
  • gameId MUST match canonicalGameId
  • collect or verify registration fee settlement if required
  • send registration fee to treasury
  • store game data
  • append gameId to allGameIds
  • 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
  • status MUST be one of:
    • 0 Pending
    • 1 Approved
    • 2 Banned

4. setAdmin

Updates admin status for an account. function setAdmin(account, isAdmin)

Params

Rules

  • Only governance
  • account MUST NOT be zero address
  • Event SHOULD be emitted

5. setGovernance

Updates governance address. function setGovernance(governance)

Params

Rules

  • Only current governance
  • governance MUST NOT be zero address
  • Event SHOULD be emitted

6. setTreasury

Updates treasury receiver address. function setTreasury(treasury)

Params

Rules

  • Only governance
  • treasury MUST NOT be zero address
  • Event SHOULD be emitted

7. setFactory

Updates trusted factory address. function setFactory(factory)

Params

Rules

  • Only governance
  • factory MUST NOT be zero address
  • Event SHOULD be emitted

8. setRegistrationFee

Updates registration fee configuration. function setRegistrationFee(amount, token)

Params

Rules

  • Only governance
  • token MUST 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
  • account MUST NOT be zero address
  • Event SHOULD be emitted

Notes

  • isExempt = true grants free registration
  • isExempt = false removes 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 gameId MUST be unique
  • Every registered game MUST have a valid contractAddress
  • PGC-1 MUST implement getPublisher()
  • PGC-1 MUST implement getGameId()
  • gameId MUST match PGC-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