Encoded with TextEncoder as raw UTF-8 bytes.
6 bytes·676c6f62616c
Build typed seeds, derive the canonical PDA and bump, and copy the same setup into docs or tutorials. Everything here runs locally with PublicKey.findProgramAddressSync, with no wallet, RPC, or backend dependency.
PDA derivation is deterministic: same program ID plus the same ordered seed bytes always returns the same PDA and canonical bump.
Deriving a PDA does not create an on-chain account. It only computes the deterministic address your program can use later.
Up to 16 seeds, with a strict 32-byte limit per seed.
Encoded with TextEncoder as raw UTF-8 bytes.
6 bytes·676c6f62616c
Load a common PDA pattern, then swap in your own program ID and keys. Each template is share-linkable, so tutorials can deep-link straight into the exact derivation.
Program Derived Addresses are deterministic addresses derived from a program ID plus ordered seed bytes. Unlike normal wallet addresses, PDAs are intentionally off curve, which lets the runtime hand signing authority to the owning program via invoke_signed.
Important: Deriving a PDA is just math. It does not allocate storage, write account data, or reserve rent. Your program still creates and funds any PDA-backed account explicitly.
Some seed combinations can pair with multiple bump values before the runtime lands on an off-curve address. The canonical bump is the bump returned by findProgramAddressSync. Using that exact bump everywhere keeps your clients, tests, and on-chain program aligned.
This page stays strict on purpose: the main flow shows only the canonical bump, because that is the value most developers should persist and verify.
u64_le here is explicit little-endian encoding for counters and index-style seeds. ["ab", "cd"] and ["abcd"] hash the same concatenated bytes, so avoid ambiguous seed layouts. These snippets reflect the current builder exactly, including seed order, typed encoding, and the canonical bump derivation flow.
import { PublicKey } from '@solana/web3.js';
const programId = new PublicKey("KjG9Ac9ckWdSeTmjX65nY6wttstnY4XzGtUD9s1mxCz");
const seed1 = new TextEncoder().encode("global");
const [pda, bump] = PublicKey.findProgramAddressSync([seed1], programId);
console.log(pda.toBase58(), bump);use solana_program::pubkey::Pubkey;
use std::str::FromStr;
let program_id = Pubkey::from_str("KjG9Ac9ckWdSeTmjX65nY6wttstnY4XzGtUD9s1mxCz")?;
let seed_1 = b"global";
let seeds: &[&[u8]] = &[
seed_1.as_ref(),
];
let (pda, bump) = Pubkey::find_program_address(seeds, &program_id);No. PDA derivation is pure local computation. The calculator never hits a cluster or backend and never asks for a wallet.
Because findProgramAddressSync already resolves the canonical off-curve bump. That is the safest default for docs, tests, and client code.
Share links preserve the program ID and every typed seed row, so a tutorial or teammate can reopen the exact same derivation in one click.
Yes. A PDA is just an address until some instruction creates an account at that address and funds it with rent-exempt lamports.
This calculator is for derivation only. If you want to scan a wallet for empty token accounts, buffers, or other reclaimable balances, use the recovery flow instead.
No wallet connect happens on this page.