GitHub - keeper402/program-examples: A repository of Solana program examples

Onchain program examples for ⚓ Anchor 🦀 Native Rust, and 🐍 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.

Using this repo

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. Use anchor build && anchor deploy to build & deploy the program. Run anchor run test to test it.
  • native - Written using Solana's native Rust crates and vanilla Rust. Use cicd.sh to build & deploy the program. Run yarn run test to test it.
  • seahorse - Written using the Seahorse framework, which converts your Python code to Anchor Rust. Use seahorse build && anchor deploy to build & deploy the program. Run anchor run test to test it.

If a given example is missing, please add it!

The example projects

Basics

account-data

Store and retrieve data using Solana accounts.

anchor, native

checking-accounts

Check that the accounts provided in incoming instructions meet particular criteria.

anchor, native

close-account

Close an account and get the Lamports back.

anchor, native

counter

Use a PDA to store global state, making a counter that increments when called.

anchor, native, seahorse

create-account

Make new accounts on the blockchain.

anchor, native

cross-program-invocation

Invoke an instruction handler from one onchain program in another onchain program.

anchor, native

favorites

Save and update per-user state on the blockchain, ensuring users can only update their own information.

anchor

hello-solana

Hello World on Solana! A minimal program that logs a greeting.

anchor, native, seahorse

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

program-derived-addresses

Store and retrieve state in Solana.

anchor, native

realloc

How to store state that changes size in Solana.

anchor, native

rent

Determine the necessary minimum rent by calculating an account's size.

anchor, native

repository-layout

Layout larger Solana onchain programs.

anchor, native

transfer-sol

Send SOL between two accounts.

anchor, native, seahorse

Tokens

create-token

Create a token on Solana with a token symbol and icon.

anchor, native

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

nft-minter

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

pda-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

spl-token-minter

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

token-swap

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

transfer-tokens

Transfer tokens between accounts

anchor, native, seahorse

Token Extensions

basics

Create token mints, mint tokens, and transferr tokens using Token Extensions.

anchor

cpi-guard

Enable CPI guard to prevents certain token action from occurring within CPI (Cross-Program Invocation).

anchor

default-account-state

Create new token accounts that are frozen by default.

anchor, native

group

Create tokens that belong to larger groups of tokens using the Group Pointer extension.

anchor

immutable-owner

Create tokens whose owning program cannot be changed.

anchor

interest-bearing

Create tokens that show an 'interest' calculation.

anchor

memo-transfer

Create tokens where transfers must have a memo describing the transaction attached.

anchor

metadata

Create tokens that store their onchain metadata inside the token mint, without needing to use or pay for additional programs.

anchor

mint-close-authority

Allow a designated account to close a Mint.

anchor, native

multiple-extensions

Use multiple Token Extensions at once.

native

non-transferable

Create tokens that cannot be transferred.

anchor, native

permanent-delegate

Create tokens that remain under the control of an account, even when transferred elsewhere.

anchor

transfer-fee

Create tokens

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

Examples We'd Love to See!

  • Examples needed for Native:
    • Token Extensions
  • Examples needed for Anchor:
    • Additional Accounts & Resolving Accounts
  • Examples needed for Seahorse
    • Any existing example missing a seahorse folder
  • New examples needed for Anchor, Native, Solidity & Seahorse:
    • Token lending
    • Token swapping
    • Escrow
    • Staking
    • Wrapped tokens
    • Pyth
    • Clockwork
    • VRF
    • Any oracle
    • Merkle trees (compression)