FREE BUILDER CASEBOOK · WORKS OFFLINE

Connect carefully. Review before signing.

A wallet connection, an Academy web login, and a Solana transaction are three different actions. Inspect the network, capability, request, cost, and result before deciding what the application should do.

FORMATIVE · UNSCORED · NOT SAVED

Inspect six browser wallet decisions

Choose the response that respects the learner’s choice and keeps the action scoped to what the evidence supports.

01

CONNECTED · NO SIGNATURE REQUESTED

The page reconnects the learner’s selected account.

Wallet state
Connected to one public account
App action
Read the learner’s public course credential status
Wallet signature
None requested
What may the app conclude?
02

WEB SIGN-IN · NO ON-CHAIN WRITE

The Academy needs proof the user controls this key.

Purpose
Authenticate this wallet to the Academy website
Required proof
Control of the selected signing key for this domain
Course state
Must not be changed by login
Which flow fits?
03

CHAIN MISMATCH · ACTION PAUSED

The app is on Devnet; the selected wallet account is on Mainnet.

RPC endpoint
Devnet
Wallet account chain
Mainnet
Pending action
Build a program transaction
What should the client do?
04

CAPABILITY NOT ADVERTISED · NO SAFE CALL

The selected account lacks the message-signing feature.

Requested action
Off-chain sign-in message
Selected account
Connected; required signing feature not available
Available fallback
No other supported account selected
What is the safe behavior?
05

MINT REQUEST · COST PREVIEW

A credential mint creates a rent-exempt account on Devnet.

Instruction
Create the learner’s non-transferable credential asset
Funding
Fee plus account creation/storage funding
Issuer policy
Learner signs and pays their own mint
What must the application explain?
06

REJECTION ≠ SUBMISSION TIMEOUT

The wallet declines in one run; RPC times out after submission in another.

Run A
Wallet explicitly rejects before signing or submission
Run B
Signed request submitted; response timed out; signature retained
Required response
Never claim confirmed success without observing it
How should the app handle these outcomes?