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

ComponentPurpose
PGC-1Source of publisher and metadata
GovernanceStatus control and fee policy
TreasuryRegistration fee receiver
FactoryTrusted one-click game creation

Data Structures

Game

FieldTypeDescription
gameIdstringUnique game identifier
contractAddressaddressPGC-1 contract address
statusuint8Game status

Status

ValueMeaning
0Pending
1Approved
2Banned

State

VariableTypeDescription
governanceaddressGovernance address
treasuryaddressRegistration fee receiver
factoryaddressTrusted factory address
registrationFeeuint256Base registration fee
registrationFeeTokenaddressRegistration fee token address
feeExemptionsmapping(address => bool)Free registration allowlist
adminsmapping(address => bool)Admin / moderator allowlist
gamesmapping(string => Game)Registered games
allGameIdsstring[]All registered game IDs

Functions

1. registerGame

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

Params

NameTypeDescription
gameIdstringUnique game identifier
contractAddressaddressPGC-1 contract address

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

NameTypeDescription
gameIdstringUnique game identifier
contractAddressaddressPGC-1 contract address
publisheraddressCanonical publisher address

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

NameTypeDescription
gameIdstringGame identifier
statusuint8New status

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

NameTypeDescription
accountaddressAdmin address
isAdminboolAdmin status

Rules

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

5. setGovernance

Updates governance address. function setGovernance(governance)

Params

NameTypeDescription
governanceaddressNew governance address

Rules

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

6. setTreasury

Updates treasury receiver address. function setTreasury(treasury)

Params

NameTypeDescription
treasuryaddressNew treasury receiver

Rules

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

7. setFactory

Updates trusted factory address. function setFactory(factory)

Params

NameTypeDescription
factoryaddressTrusted factory address

Rules

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

8. setRegistrationFee

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

Params

NameTypeDescription
amountuint256Registration fee amount
tokenaddressRegistration fee token address

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

NameTypeDescription
accountaddressPublisher or studio address
isExemptboolExemption status

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

NameTypeDescription
gameIdstringGame identifier

Returns

NameTypeDescription
gameIdstringGame identifier
contractAddressaddressPGC-1 contract address
statusuint8Current status

11. getAllGames

Returns all registered games. function getAllGames()

Returns

TypeDescription
Game[]All registered game data

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

NameTypeDescription
gameIdstringGame identifier

Returns

TypeDescription
addressPGC-1 contract address

13. getStatus

Returns current game status. function getStatus(gameId)

Params

NameTypeDescription
gameIdstringGame identifier

Returns

TypeDescription
uint8Game status

14. getGovernance

Returns governance address. function getGovernance()

Returns

TypeDescription
addressGovernance address

15. getTreasury

Returns treasury receiver address. function getTreasury()

Returns

TypeDescription
addressTreasury receiver address

16. getFactory

Returns trusted factory address. function getFactory()

Returns

TypeDescription
addressFactory address

17. getRegistrationFee

Returns current registration fee configuration. function getRegistrationFee()

Returns

NameTypeDescription
amountuint256Registration fee amount
tokenaddressRegistration fee token address

18. isFeeExempt

Returns whether an account is exempt from registration fee. function isFeeExempt(account)

Params

NameTypeDescription
accountaddressPublisher or studio address

Returns

TypeDescription
boolRegistration fee exemption

19. isAdmin

Returns whether an account has admin access. function isAdmin(account)

Params

NameTypeDescription
accountaddressAccount address

Returns

TypeDescription
boolAdmin status

Access Control

FunctionAccess
registerGamePublisher
registerGameByFactoryFactory
setStatusAdmin
setAdminGovernance
setGovernanceGovernance
setTreasuryGovernance
setFactoryGovernance
setRegistrationFeeGovernance
setFeeExemptionGovernance
getGamePublic
getAllGamesPublic
getContractAddressPublic
getStatusPublic
getGovernancePublic
getTreasuryPublic
getFactoryPublic
getRegistrationFeePublic
isFeeExemptPublic
isAdminPublic

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