Emerging Tech

Solana Development interview questions

Solana development interviews probe understanding of Proof-of-History, the runtime model (BPF), account model, SPL tokens, and program security. Candidates must demonstrate practical knowledge of writing and deploying Solana programs using Rust and the Anchor framework.

16 questions (5 easy · 6 medium · 5 hard), each with what a strong answer covers and where people lose the point. Free to read, no account.

On this page (16 questions)

1.How does Proof-of-History differ from traditional blockchain consensus mechanisms like Proof-of-Work or Proof-of-Stake?

Warm-up

What a strong answer covers

  • PoH is a cryptographic clock that orders events before consensus, not a consensus mechanism itself.
  • PoW uses computational puzzles to achieve consensus; PoS uses stake-based voting.
  • PoH enables parallel transaction processing (Sealevel) by providing a global order.
  • PoH requires high-bandwidth networking and a leader-based schedule.
  • Tower BFT (Solana's consensus) uses PoH as a source of time to reduce message overhead.

Where people lose the point

  • Claiming PoH replaces consensus entirely.
  • Confusing PoH with a blockchain's timestamp field.
  • Assuming PoH is a proof-of-work variant.
Link to this question

2.Explain the rent mechanism in Solana. What does it mean for an account to be rent-exempt?

Warm-up

What a strong answer covers

  • Rent is a fee paid per epoch to keep an account alive, based on its data size.
  • Accounts with a balance sufficient to pay rent for 2 years become rent-exempt and no longer pay rent.
  • Rent-exempt accounts persist indefinitely; non-exempt accounts may be garbage collected.
  • Developers should ensure accounts are rent-exempt to avoid unexpected deletion.
  • Rent can be reclaimed when an account is closed (via the `close` constraint in Anchor).

Where people lose the point

  • Thinking rent is a one-time fee.
  • Believing all accounts must pay rent forever.
  • Ignoring rent-exemption when designing account sizes.
Link to this question

3.What is Cross-Program Invocation (CPI) and how does it work in Solana?

Core

What a strong answer covers

  • CPI allows a program to call instructions on another program, enabling composability.
  • The calling program must pass all accounts required by the callee, including the callee program's ID.
  • CPI is performed using `invoke` or `invoke_signed` (for PDA signing).
  • The runtime enforces that the caller's signer privileges are passed to the callee.
  • CPI depth is limited to 4 levels to prevent abuse.

Where people lose the point

  • Forgetting to include the callee program's account in the accounts list.
  • Assuming signer privileges are automatically propagated without explicit passing.
  • Not checking the return status of a CPI call.
Link to this question

4.What are Program Derived Addresses (PDAs) and how are they used in Solana programs?

Core

What a strong answer covers

  • PDAs are addresses deterministically derived from a program ID and a set of seeds (e.g., strings, public keys).
  • PDAs have no corresponding private key; only the program that derived them can sign on their behalf using `invoke_signed`.
  • Common uses: creating unique account addresses for users (e.g., ATA), storing program state, and enabling program-controlled signing.
  • The derivation uses a hash function and must find a nonce (bump) to ensure the address is off the ed25519 curve.
  • Anchor provides the `#[account(seeds = ...)]` constraint to handle PDA derivation and validation.

Where people lose the point

  • Thinking PDAs have private keys.
  • Using the same seeds for multiple purposes without differentiation.
  • Hardcoding bump seeds instead of storing them or deriving dynamically.
Link to this question

5.Explain the `init` constraint in Anchor. What does it do and what are its requirements?

Core

What a strong answer covers

  • `init` creates a new account and assigns it to the program's owner.
  • It requires the account to be a PDA (derived from seeds) or a signer (if not PDA).
  • The account must not already exist; Anchor checks this.
  • It automatically sets the account's owner to the program ID and allocates space based on the account struct.
  • The `payer` field specifies who pays for the rent-exemption; often the user or a fee payer.

Where people lose the point

  • Using `init` on an account that already exists (causes error).
  • Forgetting to specify `payer` or `space` when needed.
  • Assuming `init` works for non-PDA accounts without a signer.
Link to this question

6.What is the role of the mint authority in the SPL Token program? How can you make a token have a fixed supply?

Core

What a strong answer covers

  • The mint authority is the only account that can mint new tokens to any token account.
  • It can also be used to set a new mint authority or freeze authority.
  • To make a token fixed supply, the mint authority is set to None (revoked) after initial minting.
  • Revoking the mint authority is a one-way operation; tokens cannot be minted afterward.
  • This is commonly done by setting the authority to a PDA that cannot sign, or by using a multisig.

Where people lose the point

  • Thinking the mint authority can be changed after being set to None.
  • Confusing mint authority with freeze authority.
  • Not revoking the mint authority when a fixed supply is desired.
Link to this question

7.What is an Associated Token Account (ATA) and why is it the recommended way to hold SPL tokens?

Warm-up

What a strong answer covers

  • An ATA is a deterministic token account address derived from a wallet address and a token mint using the ATA program.
  • It ensures each wallet has at most one token account per mint, simplifying token management.
  • ATAs are created on demand via the `createAssociatedTokenAccount` instruction.
  • They are owned by the SPL Token program and controlled by the wallet owner.
  • Using ATAs avoids the need to manage multiple token account addresses manually.

Where people lose the point

  • Assuming ATAs are the only way to hold tokens (token accounts can be created manually).
  • Thinking ATAs are owned by the user's wallet program.
  • Forgetting to create an ATA before transferring tokens to a new wallet.
Link to this question

8.How does Sealevel enable parallel transaction execution in Solana?

Hard

What a strong answer covers

  • Sealevel is Solana's parallel smart contract runtime that identifies non-overlapping accounts.
  • Transactions that touch disjoint sets of accounts can be executed concurrently.
  • The runtime uses a transaction's account list to determine dependencies.
  • PoH provides a global ordering, allowing the leader to schedule transactions in parallel.
  • This design significantly increases throughput compared to sequential execution models like Ethereum.

Where people lose the point

  • Claiming all transactions are executed in parallel (only those with non-overlapping accounts).
  • Confusing Sealevel with sharding.
  • Assuming parallel execution eliminates the need for atomic composability.
Link to this question

9.Explain Tower BFT consensus. How does it leverage Proof-of-History?

Hard

What a strong answer covers

  • Tower BFT is a variant of Practical Byzantine Fault Tolerance (PBFT) optimized for Solana.
  • It uses PoH as a global clock to reduce the number of messages needed for consensus.
  • Validators vote on the latest PoH hash, and votes are weighted by stake.
  • A supermajority (2/3+ of stake) is required to finalize a block.
  • PoH allows validators to know the order of votes without additional communication, improving speed.

Where people lose the point

  • Thinking Tower BFT is a separate consensus from PoH.
  • Assuming Tower BFT requires all validators to communicate with each other.
  • Confusing Tower BFT with Tendermint or HotStuff.
Link to this question

10.How can a Solana program reclaim rent from closed accounts? Provide an example using Anchor.

Core

What a strong answer covers

  • When an account is closed, its lamports (including rent-exemption) can be transferred to a destination account.
  • In Anchor, the `close` constraint on an account automatically transfers its lamports to a specified `sol_dest` account.
  • The account must be owned by the program and the instruction must be signed by the account's owner or a PDA.
  • After closing, the account data is zeroed out and the account is no longer usable.
  • Example: `#[account(mut, close = user)]` in a struct will send lamports to `user`.

Where people lose the point

  • Forgetting to specify a destination for the rent.
  • Closing an account that is still needed (data lost).
  • Assuming rent is automatically returned without explicit close logic.
Link to this question

11.What is an account confusion attack in Solana? How can Anchor prevent it?

Hard

What a strong answer covers

  • An account confusion attack occurs when a malicious user passes an account of the wrong type or ownership to a program instruction.
  • For example, passing a token account where a mint account is expected, or passing an account owned by a different program.
  • Anchor prevents this by using typed accounts (`Account<'_, MyType>`) that automatically check the account's owner and deserialize the data.
  • The `#[account(owner = ...)]` constraint can enforce ownership by a specific program.
  • Additionally, Anchor's `#[derive(Accounts)]` validates all accounts before the instruction executes.

Where people lose the point

  • Relying solely on naming conventions to distinguish accounts.
  • Not checking the owner program in manual implementations.
  • Assuming Anchor's checks are optional (they are enforced at runtime).
Link to this question

12.What are the limitations of the BPF runtime in Solana? How do they affect program development?

Hard

What a strong answer covers

  • BPF (Berkeley Packet Filter) is a restricted instruction set; programs cannot use floating-point arithmetic, dynamic memory allocation (except via a syscall), or certain system calls.
  • Programs have a limited stack size (4KB) and heap (32KB) per instruction.
  • All memory must be pre-allocated; no dynamic data structures like `Vec` without careful management.
  • The runtime enforces a compute budget (max CU per instruction) to prevent infinite loops.
  • Developers must optimize for low compute unit consumption and avoid expensive operations like large loops.

Where people lose the point

  • Using floating-point numbers in program logic.
  • Assuming dynamic memory allocation is available.
  • Writing unbounded loops that exceed the compute budget.
Link to this question

13.What are sysvars in Solana? Give examples of how they are used in programs.

Warm-up

What a strong answer covers

  • Sysvars are system accounts that provide information about the current state of the blockchain, such as clock, rent, and epoch schedule.
  • They are read-only and can be accessed by passing their well-known addresses to instructions.
  • Common sysvars: `Clock` (slot, epoch, unix timestamp), `Rent` (rent parameters), `EpochSchedule` (epoch boundaries).
  • In Anchor, sysvars are accessed via `Sysvar<'_, Clock>` or using the `clock` helper.
  • Example: using `Clock::get()` to get the current slot for time-based logic.

Where people lose the point

  • Trying to modify a sysvar account.
  • Hardcoding sysvar addresses instead of using Anchor's typed access.
  • Assuming sysvars are available on all clusters (they are).
Link to this question

14.What are compute units (CU) in Solana? How can a developer optimize a program to stay within the CU budget?

Core

What a strong answer covers

  • Compute units measure the computational cost of an instruction; each instruction has a maximum CU budget (default 200k, can be increased via `ComputeBudget`).
  • Operations like hashing, account deserialization, and CPI calls consume CU.
  • Optimization strategies: minimize account reads/writes, use efficient data structures, avoid unnecessary CPI, and batch operations.
  • Use `msg!` sparingly as it consumes CU; prefer logging only in development.
  • Profile CU usage with `solana-validator` or test frameworks.

Where people lose the point

  • Assuming CU budget is unlimited.
  • Writing loops that iterate over large arrays without batching.
  • Forgetting to set a higher compute budget via `ComputeBudgetProgram` when needed.
Link to this question

15.How does Anchor handle errors? How can you define custom errors in an Anchor program?

Warm-up

What a strong answer covers

  • Anchor provides the `#[error_code]` attribute to define custom error enums that implement `Error`.
  • Errors can be returned using `Err(MyError::Variant.into())` or the `require!` macro.
  • The `require!` macro checks a condition and returns an error if false, improving readability.
  • Anchor also maps common runtime errors (e.g., account not found) to user-friendly messages.
  • Custom errors are serialized as u32 codes and can be caught on the client side.

Where people lose the point

  • Using `panic!` instead of returning errors (panics consume CU and are not recoverable).
  • Not using `require!` for simple condition checks.
  • Defining errors without the `#[error_code]` attribute.
Link to this question

16.How can you implement a multisig wallet on Solana? What are the key considerations?

Hard

What a strong answer covers

  • A multisig wallet requires multiple signers to approve a transaction before execution.
  • Implementation: store a list of owners and a threshold in a PDA account.
  • Proposals are created as separate accounts containing the instruction data and approval count.
  • Each owner signs a transaction to approve the proposal; when threshold is met, the proposal can be executed via CPI.
  • Key considerations: replay protection (use a nonce), owner management (add/remove owners), and secure execution (verify all approvals).

Where people lose the point

  • Not checking that the same owner cannot approve twice.
  • Allowing execution before threshold is reached.
  • Storing sensitive data like private keys on-chain.
Link to this question
No account needed

Answer one real Solana Development question now

A question a Solana Development panel actually asks, answered out loud, scored on what you said and how you said it. Under two minutes, and nothing to sign up for.

How does Proof-of-History differ from traditional blockchain consensus mechanisms like Proof-of-Work or Proof-of-Stake?

We never store the audio. Your answer is deleted within 24 hours unless you save the result.

How Solana Development answers get judged

The weights a Solana Development interviewer is holding, whether or not they say so out loud. Round Zero scores your practice answers against exactly these, and quotes your own words back as the evidence for each.

Correctness

35%

The answer is technically accurate and addresses the question directly without factual errors.

Conceptual Depth

30%

Demonstrates understanding of underlying principles (e.g., PoH, account model) beyond surface-level facts.

Practical Application

20%

Provides concrete examples, code snippets, or references to real-world patterns (e.g., Anchor, SPL).

Communication

15%

Answer is well-structured, clear, and concise; uses appropriate terminology.

Related Emerging Tech skills

All skills →

Now say them out loud

You have read what strong Solana Development answers contain. The next thing that moves the needle is producing one under time, out loud, and finding out where it falls apart.

  • These questions asked back, with follow-ups
  • Flashcards for the ones you keep missing
  • A scored mock that quotes your own answers

Browse every skill

Practising Solana Development: common questions

What Solana Development interview questions should I practice?
Start with the core areas Solana Development interviewers probe: How does Proof-of-History differ from traditional blockchain consensus mechanisms like Proof-of-Work or Proof-of-Stake; Explain the rent mechanism in Solana. What does it mean for an account to be rent-exempt; What is Cross-Program Invocation (CPI) and how does it work in Solana. This page outlines strong answers and common mistakes, and the scored path drills each one with follow-ups.
Is the Solana Development practice free?
Yes. The Solana Development path runs free inside Round Zero: lessons, practice questions and flashcards. Drills are unlimited on every plan, free included. So is the full scorecard. Free also covers 3 complete scored interviews, no card.
How is this different from a Solana Development question list?
A static list gives you questions with no feedback. Round Zero runs a live scored practice that probes your actual answers, rotates difficulty, and tells you exactly what to fix, grounded in a Solana Development rubric.
How should I prepare for a Solana Development interview?
Learn the concepts, drill the questions until answers come fast, then prove it in a scored mock. Round Zero sequences all three so you know you are ready, not just that you read about Solana Development.
How is a Solana Development answer scored?
Solana Development answers are scored on correctness, conceptual depth, practical application, communication, with evidence quoted from what you actually said, so feedback is specific instead of generic praise.