Skip to content

Solana On‐Chain Programs

Andrei Montchik edited this page Apr 15, 2026 · 1 revision

Docs

Info

  • Program keys
    • Program Id - the on-chain program identifier. Generated by the solana program deploy command.
    • Owner - The BPF Loader program id.
    • ProgramData Address -
    • Upgrade Authority - pubkey of the solana program deploy --upgrade-authority parameter. Default pubkey is used if not provided.
  1. Create new Rust library: cargo init <NAME> --lib.
  2. 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"]
    
  3. Create the program keypair: solana-keygen new -o <PROGRAM NAME>.json
  4. Use the Solana Developers Program Examples and SPL Examples for additional details.
  5. Transactions
  6. Cross-program Invocation aka CPI
  1. Run the cargo build-bpf, this will build program binary as well as the keypair file containing program id in the target/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. The cargo build-sbf --version command 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".

  1. Make sure that the Solana Cluster is operational.
  2. Airdrop some SOL to payer:
    1. solana-keygen pubkey <PAYER KEYPAIR>
    2. solana airdrop 10 <PAYER PUBKEY>
  3. Run thesolana 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 
      

Run

  • Use Solana Clients to run on-chain programs.
  • Make sure that the solana_runtime::message_processor logging 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>.

Clone this wiki locally