program-examples
program-examples copied to clipboard
A repository of Solana program examples
Program Examples
Onchain program examples for :anchor: Anchor :crab: Native Rust, [TS] TypeScript and :snake: Python
This repo contains Solana onchain programs (referred to as 'Smart Contracts' in other blockchains).
[!NOTE] If you're new to Solana, you don't need to create your own programs to perform basic things like making accounts, creating tokens, sending tokens, or minting NFTs. These common tasks are handled with existing programs, for example the System Program (for making account or transferring SOL) or the token program (for creating tokens and NFTs). See the Solana Developer site to learn more.
Each folder includes examples for one or more of the following:
anchor- Written using Anchor, the most popular framework for Solana Development, which uses Rust. Useanchor build && anchor deployto build & deploy the program. Runanchor run testto test it.native- Written using Solana's native Rust crates and vanilla Rust. Usecicd.shto build & deploy the program. Runyarn run testto test it.poseidon- Written using Poseidon, which converts your TypeScript code to Anchor Rust.seahorse- Written using the Seahorse framework, which converts your Python code to Anchor Rust. Useseahorse build && anchor deployto build & deploy the program. Runanchor run testto test it.
If a given example is missing, please send us a PR to add it! Our aim is to have every example available in every option. We'd also love to see more programs involving staking, wrapped tokens, oracles, compression and VRF. Follow the contributing guidelines to keep things consistent.
The example programs
Basics
Hello world
Hello World on Solana! A minimal program that logs a greeting.
anchor native seahorse
Account-data
Store and retrieve data using Solana accounts.
anchor native
Storing global state - Counter
Use a PDA to store global state, making a counter that increments when called.
anchor native seahorse
Saving per-user state - Favorites
Save and update per-user state on the blockchain, ensuring users can only update their own information.
anchor
Checking Instruction Accounts
Check that the accounts provided in incoming instructions meet particular criteria.
anchor native
Closing Accounts
Close an account and get the Lamports back.
anchor native
Creating Accounts
Make new accounts on the blockchain.
anchor native
Cross program invocations
Invoke an instruction handler from one onchain program in another onchain program.
anchor native
PDA rent-payer
Use a PDA to pay the rent for the creation of a new account.
anchor native
Processing instructions
Add parameters to an instruction handler and use them.
anchor native
Storing date in program derived addresses
Store and retrieve state in Solana.
anchor native
Handling accounts that expand in size
How to store state that changes size in Solana.
anchor native
Calculating account size to determine rent
Determine the necessary minimum rent by calculating an account's size.
anchor native
Laying out larger programs
Layout larger Solana onchain programs.
anchor native
Transferring SOL
Send SOL between two accounts.
anchor native seahorse
Tokens
Creating tokens
Create a token on Solana with a token symbol and icon.
anchor native
Minting NFTS
Mint an NFT from inside your own onchain program using the Token and Metaplex Token Metadata programs. Reminder: you don't need your own program just to mint an NFT, see the note at the top of this README.
anchor native
Minting a token from inside a program
Mint a Token from inside your own onchain program using the Token program. Reminder: you don't need your own program just to mint an NFT, see the note at the top of this README.
anchor native
Transferring Tokens
Transfer tokens between accounts
anchor native seahorse
Allowing users to swap digital assets - Escrow
Allow two users to swap digital assets with each other, each getting 100% of what the other has offered due to the power of decentralization!
anchor
Minting a token from inside a program with a PDA as the mint authority
Mint a Token from inside your own onchain program using the Token program. Reminder: you don't need your own program just to mint an NFT, see the note at the top of this README.
anchor native
Creating an Automated Market Maker
Create liquidity pools to allow trading of new digital assets and allows users that provide liquidity to be rewarded by creating an Automated Market Maker.
anchor
Token Extensions
Basics - create token mints, mint tokens, and transfer tokens with Token Extensions
Create token mints, mint tokens, and transferr tokens using Token Extensions.
anchor
Preventing CPIs with CPI guard
Enable CPI guard to prevents certain token action from occurring within CPI (Cross-Program Invocation).
anchor
Using default account state
Create new token accounts that are frozen by default.
anchor native
Grouping tokens
Create tokens that belong to larger groups of tokens using the Group Pointer extension.
anchor
Creating token accounts whose owner cannot be changed
Create tokens whose owning program cannot be changed.
anchor
Interest bearing tokens
Create tokens that show an 'interest' calculation.
anchor
Requiring transactions to include descriptive memos
Create tokens where transfers must have a memo describing the transaction attached.
anchor
Adding on-chain metadata to the token mint
Create tokens that store their onchain metadata inside the token mint, without needing to use or pay for additional programs.
anchor
Allow a designedated account to close a mint
Allow a designated account to close a Mint.
anchor native
Usng multiple token extensions
Use multiple Token Extensions at once.
native
Non-transferrable - create tokens that can't be transferred.
Create tokens that cannot be transferred.
anchor native
Permanent Delegate - Create tokens permanently under the control of a particular account
Create tokens that remain under the control of an account, even when transferred elsewhere.
anchor
Create tokens with a transfer-fee.
Create tokens with an inbuilt transfer fee.
anchor native
Compression
Cnft-burn
Burn compressed NFTs.
anchor
Cnft-vault
Store Metaplex compressed NFTs inside a PDA.
anchor
Cutils
Work with Metaplex compressed NFTs.
anchor
Oracles
pyth
Use a data source for offchain data (called an Oracle) to perform activities onchain.
anchor seahorse