New: Solidity examples from Solang!
📁 Each example contains four folders:
native
- Written using Solana's native Rust crates and vanilla Rust.anchor
- Written using Anchor'sanchor_lang
Rust crate and the associated Anchor framework to build & deploy.seahorse
- Written using the Python framework Seahorse, which converts your Python code to Anchor Rust.solang
- Written using the Solang compiler, which allows developers to run Solidity natively on Solana.
🔧 How to build & run:
- Before running anything in any folder make sure you pull in the dependencies with
yarn install
. native
- Usecicd.sh
to build & deploy the program. Runyarn run test
to test it.anchor
- Useanchor build && anchor deploy
to build & deploy the program. Runanchor run test
to test it.seahorse
- Useseahorse build && anchor deploy
to build & deploy the program. Runanchor run test
to test it.solang
- Useanchor build && anchor deploy
to build & deploy the program. Runanchor run test
to test it.
- Examples needed for Native:
- Token2022
- Examples needed for Anchor:
- Additional Accounts & Resolving Accounts
- Examples needed for Seahorse
- Any existing example missing a
seahorse
folder
- Any existing example missing a
- Examples needed for Solidity
- Any existing example missing a
solang
folder
- Any existing example missing a
- New examples needed for Solidity, Anchor, Native & Seahorse:
- Token lending
- Token swapping
- Escrow
- Staking
- Wrapped tokens
- Pyth
- Clockwork
- VRF
- Any oracle
- Merkle trees (compression)
Most system-level operations on Solana involve already-existing Solana programs.
For example, to create a system account you use the system program and to create a token mint you use the token program.
So, you'll notice that these operations are in fact conducting what's called a cross-program invocation - which is a fancy way of saying it calls other Solana programs to do business. You can see this in action whenever you see invoke
or invoke_signed
in the native
examples, or CpiContext
in the anchor
examples.
Deciding when to use cross-program invocation instead of invoking the programs directly from the client is completely up to you as the builder. It depends on how your application is designed.
- Maybe you want to add some checks - such as minimum balance required, allowed ownership, etc.
- Maybe you want to assert that an account has a certain data type.
- Perhaps you want to send only one instruction from your client for a handful of sequential operations.
- The list goes on.
Regardless of what you may want to add on top of existing Solana programs, the number one use case for writing your own program is for using accounts with a Program Derived Address (PDA). Crack open the
pdas
folder to see why.