Suwon reading room · established 2021 0313210433

Program-derived addresses

Seeds, the bump, and a signature the program can produce

26 August 2026 · 8 minute read · Focus Orbitway learning library

A brass key and a small locked wooden box on a stone desk in soft side light

An address with no secret key

A program-derived address is a public key found from a program id and a list of seeds. It is not a wallet someone created in a back office. The point of the search is an address that lies off the ed25519 curve, so no private key exists for it.

That is why a vault can be ‘the program’s’ without the program holding a secret. The authority is the ability to pass those same seeds into the runtime when the instruction runs.

Why the bump exists

Most seed lists do not land off the curve on the first try. The bump is a single byte, usually counted down from 255, mixed into the derivation until the address is off-curve. The canonical bump is the first one that works. Store it if you will need the same address again, because guessing a different bump produces a different address.

Desk Hours on this topic often start with three seeds written in the visitor’s words: a string the program chose, a public key that scopes the account to one user, and the bump. If you cannot say which seed stops two users from sharing a vault, the address is not designed yet.

Signing with seeds

When the program must authorise a debit from that vault, it asks the runtime to accept the seeds in place of a signature. The seeds in the call have to match the seeds that derived the address. A mismatched bump is the usual reason a Thursday circle’s first invoke fails.

We practise this on paper before any local validator. The sheet has two lines: the seeds used to derive, and the seeds used to sign. They are the same list, or the instruction is a different instruction.

What we refuse to rush

Visitors sometimes want the bump ‘handled in a helper’ before they can say the seeds aloud. In the reading room the helper waits. The October circle’s escrow vault is derived from a static seed, the initializer’s public key, and the canonical bump. We write those three on the map in week one and we do not change them in week four because a test was inconvenient.

Next on the shelf: lamports and closing

Bring this question to a session