mirror programs

Bidhan 8735834980 feat: add pinocchio example for hello solana program (#376) 1 주 전
.github 4b8594ec04 chore: solana native and steel bump to v2.1 (#382) 4 달 전
.husky 46f66f3da1 fix: Solana Native and Steel Action should only work on changes. (#325) 11 달 전
basics 8735834980 feat: add pinocchio example for hello solana program (#376) 1 주 전
compression 40aed81963 chore: bumped versions (#378) 4 달 전
oracles aca7380e1b feat: remove steel examples (#420) 1 주 전
scripts 2c4cb8f527 Fix: all the biome errors and update biome (#86) 1 년 전
tokens aca7380e1b feat: remove steel examples (#420) 1 주 전
tools a3b87a4948 update: tokens native, formatter, trigger action on project changes (#81) 1 년 전
.gitignore a3b87a4948 update: tokens native, formatter, trigger action on project changes (#81) 1 년 전
CONTRIBUTING.md 2eb0bedaa1 add tokens/spl-token-minter/poseidon (#213) 9 달 전
Cargo.lock 4b8594ec04 chore: solana native and steel bump to v2.1 (#382) 4 달 전
Cargo.toml 8735834980 feat: add pinocchio example for hello solana program (#376) 1 주 전
README.md 289feac921 chore: update readme (#419) 1 주 전
biome.json 2c4bc257c8 fix: Steel CLI requires solana keypair at root (#331) 10 달 전
package.json 104a0d3657 removed poseidon examples and GitHub action (#374) 5 달 전
pnpm-lock.yaml 97505283f8 feat: Anchor bankrun (#113) 1 년 전
yarn.lock 2c4cb8f527 Fix: all the biome errors and update biome (#86) 1 년 전

README.md

Program Examples

Onchain program examples for :anchor: Anchor :crab: Native Rust, and [TS] TypeScript.

Native Anchor

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

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.](./basics/hello-solana/README.md) [anchor](./basics/hello-solana/anchor) [native](./basics/hello-solana/native) ### Account-data Store and retrieve data using Solana accounts. [anchor](./basics/account-data/anchor) [native](./basics/account-data/native) ### Storing global state - Counter [Use a PDA to store global state, making a counter that increments when called.](./basics/counter/README.md) [anchor](./basics/counter/anchor) [native](./basics/counter/native) ### Saving per-user state - Favorites Save and update per-user state on the blockchain, ensuring users can only update their own information. [anchor](./basics/favorites/anchor) [native](./basics/favorites/native) ### Checking Instruction Accounts [Check that the accounts provided in incoming instructions meet particular criteria.](./basics/checking-accounts/README.md) [anchor](./basics/checking-accounts/anchor) [native](./basics/checking-accounts/native) ### Closing Accounts Close an account and get the Lamports back. [anchor](./basics/close-account/anchor) [native](./basics/close-account/native) ### Creating Accounts [Make new accounts on the blockchain.](./basics/create-account/README.md) [anchor](./basics/create-account/anchor) [native](./basics/create-account/native) ### Cross program invocations [Invoke an instruction handler from one onchain program in another onchain program.](./basics/cross-program-invocation/README.md) [anchor](./basics/cross-program-invocation/anchor) [native](./basics/cross-program-invocation/native) ### PDA rent-payer [Use a PDA to pay the rent for the creation of a new account.](./basics/pda-rent-payer/README.md) [anchor](./basics/pda-rent-payer/anchor) [native](./basics/pda-rent-payer/native) ### Processing instructions [Add parameters to an instruction handler and use them.](./basics/processing-instructions/README.md) [anchor](./basics/processing-instructions/anchor) [native](./basics/processing-instructions/native) ### Storing date in program derived addresses Store and retrieve state in Solana. [anchor](./basics/program-derived-addresses/anchor) [native](./basics/program-derived-addresses/native) ### Handling accounts that expand in size How to store state that changes size in Solana. [anchor](./basics/realloc/anchor) [native](./basics/realloc/native) ### Calculating account size to determine rent [Determine the necessary minimum rent by calculating an account's size.](./basics/rent/README.md) [anchor](./basics/rent/anchor) [native](./basics/rent/native) ### Laying out larger programs [Layout larger Solana onchain programs.](./basics/repository-layout/README.md) [anchor](./basics/repository-layout/anchor) [native](./basics/repository-layout/native) ### Transferring SOL [Send SOL between two accounts.](./basics/transfer-sol/README.md) [anchor](./basics/transfer-sol/anchor) [native](./basics/transfer-sol/native)
Tokens ### Creating tokens [Create a token on Solana with a token symbol and icon.](./tokens/create-token/README.md) [anchor](./tokens/create-token/anchor) [native](./tokens/create-token/native) ### Minting NFTS [Mint an NFT from inside your own onchain program using the Token and Metaplex Token Metadata programs.](./tokens/nft-minter/README.md) Reminder: you don't need your own program just to mint an NFT, see the note at the top of this README. [anchor](./tokens/nft-minter/anchor) [native](./tokens/nft-minter/native) ### Minting a token from inside a program [Mint a Token from inside your own onchain program using the Token program.](./tokens/spl-token-minter/README.md) Reminder: you don't need your own program just to mint an NFT, see the note at the top of this README. [anchor](./tokens/spl-token-minter/anchor) [native](./tokens/spl-token-minter/native) ### Transferring Tokens [Transfer tokens between accounts](./tokens/transfer-tokens/README.md) [anchor](./tokens/transfer-tokens/anchor) [native](./tokens/transfer-tokens/native) ### 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](./tokens/escrow/anchor) [native](./tokens/escrow/native) ### 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.](./tokens/pda-mint-authority/README.md) Reminder: you don't need your own program just to mint an NFT, see the note at the top of this README. [anchor](./tokens/pda-mint-authority/anchor) [native](./tokens/pda-mint-authority/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.](./tokens/token-swap/README.md) [anchor](./tokens/token-swap/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](./tokens/token-2022/basics/anchor) ### Preventing CPIs with CPI guard Enable CPI guard to prevents certain token action from occurring within CPI (Cross-Program Invocation). [anchor](./tokens/token-2022/cpi-guard/anchor) ### Using default account state Create new token accounts that are frozen by default. [anchor](./tokens/token-2022/default-account-state/anchor) [native](./tokens/token-2022/default-account-state/native) ### Grouping tokens Create tokens that belong to larger groups of tokens using the Group Pointer extension. [anchor](./tokens/token-2022/group/anchor) ### Creating token accounts whose owner cannot be changed Create tokens whose owning program cannot be changed. [anchor](./tokens/token-2022/immutable-owner/anchor) ### Interest bearing tokens Create tokens that show an 'interest' calculation. [anchor](./tokens/token-2022/interest-bearing/anchor) ### Requiring transactions to include descriptive memos Create tokens where transfers must have a memo describing the transaction attached. [anchor](./tokens/token-2022/memo-transfer/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](./tokens/token-2022/metadata/anchor) ### Allow a designedated account to close a mint Allow a designated account to close a Mint. [anchor](./tokens/token-2022/mint-close-authority/anchor) [native](./tokens/token-2022/mint-close-authority/native) ### Usng multiple token extensions Use multiple Token Extensions at once. [native](./tokens/token-2022/multiple-extensions/native) ### Non-transferrable - create tokens that can't be transferred. Create tokens that cannot be transferred. [anchor](./tokens/token-2022/non-transferable/anchor) [native](./tokens/token-2022/non-transferable/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](./tokens/token-2022/permanent-delegate/anchor) ### Create tokens with a transfer-fee. Create tokens with an inbuilt transfer fee. [anchor](./tokens/token-2022/transfer-fee/anchor) [native](./tokens/token-2022/transfer-fee/native)
Compression ### Cnft-burn Burn compressed NFTs. [anchor](./compression/cnft-burn/anchor) ### Cnft-vault Store Metaplex compressed NFTs inside a PDA. [anchor](./compression/cnft-vault/anchor) ### Cutils Work with Metaplex compressed NFTs. [anchor](./compression/cutils/anchor)
Oracles ### pyth Use a data source for offchain data (called an Oracle) to perform activities onchain. [anchor](./oracles/pyth/anchor)