Solana Program

This section provides detailed explanations of each instruction available in the Race Protocol's Solana program.

The Race Protocol's Solana implementation is a single, comprehensive smart contract that exposes a set of instructions for managing the entire lifecycle of a game. Developers interact with this program by constructing transactions that call these instructions.

The definitive list of instructions can be found in the RaceInstruction enum in race-solana/src/instruction.rs.

Instruction Set

The table below details each available instruction, its purpose, and typical usage context.

Instruction

Description

Typical Sender

Game Management

CreateGameAccount

Initializes a new GameAccount on-chain, setting its core properties like the game bundle, token type, max players, and initial data.

Game Host / dApp Backend

CloseGameAccount

Closes an empty game account to reclaim SOL from rent. All remaining assets in the stake and bonus accounts are transferred to the game owner.

Game Owner

RegisterGame

Lists an existing GameAccount in a RegistrationAccount, making it discoverable in a game lobby.

Game Owner

UnregisterGame

Removes a GameAccount from a RegistrationAccount.

Game Owner / Registry Owner

Settle

Finalizes a game round. This is the most complex instruction, processing player payouts, ejections, transfers to recipients (rake), and awarding bonuses. It writes a new state checkpoint to the game account.

Transactor Node

RejectDeposits

Rejects pending player deposits that cannot be accepted by the game logic, refunding the assets to the players.

Transactor Node

Player Management

CreatePlayerProfile

Creates a PlayerProfile account tied to a player's wallet, storing their nickname and optional PFP. This is required to join games.

Player

JoinGame

Allows a player to join a game by transferring the required entry fee (Cash or Ticket) into the game's stake account.

Player

Deposit

Allows a player who is already in a game to deposit additional funds, typically for re-buys or add-ons in cash games.

Player

Server Management

RegisterServer

Creates or updates a ServerAccount on-chain, registering a server's public endpoint and associating it with the owner's wallet.

Server Operator

ServeGame

Allows a registered server to join a game. The first server to join becomes the Transactor.

Server Operator

Vote

Allows a player or server to cast a vote against a potentially unresponsive Transactor. An accumulation of votes can halt the game.

Player / Validator Node

Asset & Bundle Management

CreateRegistry

Creates a new RegistrationAccount, which acts as a public or private lobby for listing games.

Game Host / dApp Backend

PublishGame

Mints a game's WASM bundle as an NFT on Solana using the Metaplex standard, creating a GameBundle account.

Game Developer

CreateRecipient

Creates a new RecipientAccount with one or more slots for handling complex, multi-party payment distributions.

Game Owner / dApp Backend

AddRecipientSlot

Adds a new asset distribution slot to an existing RecipientAccount.

Recipient Owner

AssignRecipient

Assigns ownership of an unassigned share within a RecipientSlot to a specific address.

Recipient Owner

RecipientClaim

Allows a wallet to claim its share of the assets held within one or more slots of a RecipientAccount.

Share Owner (Player, Host, etc.)

AttachBonus

Attaches one or more SPL token accounts as potential bonuses for a game, identified by a string identifier.

Game Owner / Sponsor

Last updated