-
Notifications
You must be signed in to change notification settings - Fork 0
Solana On‐Chain Programs
Andrei Montchik edited this page Apr 15, 2026
·
1 revision
- Developing Solana on-chain programs
- Solana Cookbook
- Deploy Solana program with CLI
- Anchor
- Sealevel Attacks and mitigation examples
- Program keys
-
Program Id - the on-chain program identifier. Generated by the
solana program deploycommand. - Owner - The BPF Loader program id.
- ProgramData Address -
-
Upgrade Authority - pubkey of the
solana program deploy --upgrade-authorityparameter. Default pubkey is used if not provided.
-
Program Id - the on-chain program identifier. Generated by the
- Create new Rust library:
cargo init <NAME> --lib. - Update the Cargo.toml:
[package] name = "<NAME>" version = "0.1.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] solana-program = "=1.17.31" [lib] crate-type = ["cdylib", "lib"] - Create the program keypair:
solana-keygen new -o <PROGRAM NAME>.json - Use the Solana Developers Program Examples and SPL Examples for additional details.
- Transactions
- Cross-program Invocation aka CPI
-
Run the
cargo build-bpf, this will build program binary as well as the keypair file containing program id in thetarget/deploy/<CRATE NAME>directory.In case if compilation fails complaining about an obsolete Rust version, add the Solana platform-tools version parameter to the command
cargo build-bpf --tools-version v1.39. Versions are tagged in the platform-tools repository. Thecargo build-sbf --versioncommand shows rustc version used by the platform-tools.If compilation fails because of incompatible dependencies, consider setting the concrete solana-program version in Cargo.toml:
solana-program = "=1.17.31".
- Make sure that the Solana Cluster is operational.
- Airdrop some SOL to payer:
solana-keygen pubkey <PAYER KEYPAIR>solana airdrop 10 <PAYER PUBKEY>
- Run the
solana program deploy -ul --program-id <PROGRAM KEYPAIR> --keypair <PAYER KEYPAIR> <PROGRAM BINARY>command to deploy to specific cluster. It will return the program id. Example:solana program deploy -ul --program-id ~/work/src/public/solana/programs/keypairs/ping.json --keypair ~/work/src/public/solana/programs/keypairs/payer.json ~/work/src/public/solana/programs/target/deploy/ping.so- Use the following command to redeploy:
solana program deploy -ul --program-id <PROGRAM PUBKEY> --upgrade-authority <PAYER KEYPAIR> <PROGRAM BINARY>. Example:solana program deploy -ul --program-id HTnUFY3ogPkVuMoS3R6HnRDGRWg3Vi88WYHEHUu9XrNP --upgrade-authority ~/work/src/public/solana/programs/keypairs/payer.json ~/work/src/public/solana/programs/target/deploy/ping.so
- Use the following command to redeploy:
- Use Solana Clients to run on-chain programs.
- Make sure that the
solana_runtime::message_processorlogging is set to debug for seeing the program specific logging. Example:export RUST_LOG=solana=warn,solana_core=warn,solana_runtime=warn,solana_runtime::message_processor=debug,solana_streamer=warn,solana_poh=warn,solana_gossip=warn; solana-test-validator
- Show program information:
solana program show -u[m|t|d|l] <PROGRAM ID>. - Show all programs for given authority:
solana program show -um --programs --buffer-authority <PROGRAM AUTHORITY KEYPAIR>.