Devnet Investigation Challenge
Use your Solana foundations toolkit to inspect real accounts, send a real transfer on devnet, and write down what changed before and after the transaction.
A bad beginner challenge asks you to reverse-engineer a random devnet program before you can even explain a normal transfer cleanly.
That is not a good foundations test.
A good foundations challenge asks a simpler question:
Can you observe one real transaction, inspect the accounts around it, and explain what changed without hand-waving?
That is what this challenge is for.
Use the toolkit from the previous lesson. Do not build a new client from scratch here. The point is to use your tools to investigate the chain, not to start another project.
What You Need To Prove
By the end of this challenge, you should be able to show all of these clearly:
- the sender account before the transfer
- the recipient account before the transfer
- the transaction signature that was produced
- the sender account after the transfer
- the recipient account after the transfer
- a short explanation of who signed, who received funds, and why the balances changed the way they did
If you can do that without guessing, this section is working.
The Challenge Setup
Use the same two wallets from the earlier lessons:
wallet1.jsonas the senderwallet2.jsonas the recipient
And use the toolkit commands you already built:
balance.tsinspect.tssend.ts
If your toolkit lives in kit-toolkit/, all the examples below assume you are inside that directory.
The Real Goal
This challenge is not really about sending another 0.01 SOL transfer.
It is about learning to observe a state change properly.
A lot of new developers can send a transaction. Far fewer can answer these basic questions cleanly afterward:
- which account authorized the change
- which account received value
- why the sender lost slightly more than the recipient gained
- what the account output looked like before and after
- where the transaction can be verified independently
That is the skill you are testing here.
Step-by-Step Challenge
Step 1: Record the Starting State
Fetch the starting balances for both wallets.
pnpm tsx scripts/balance.ts $(solana address -k wallet1.json)
pnpm tsx scripts/balance.ts $(solana address -k wallet2.json)Then inspect both accounts more deeply:
pnpm tsx scripts/inspect.ts $(solana address -k wallet1.json)
pnpm tsx scripts/inspect.ts $(solana address -k wallet2.json)Write down what you see.
You do not need every field. The important ones are:
- address
- lamports
- owner
- executable
- data length
Step 2: Send One Real Transfer
Now send a small transfer from wallet1 to wallet2.
pnpm tsx scripts/send.ts wallet1.json $(solana address -k wallet2.json) 0.01Your script should print a transaction signature.
Save that signature.
It is the public receipt for what just happened on-chain.
Step 3: Record the Ending State
Run the same balance and inspect commands again.
pnpm tsx scripts/balance.ts $(solana address -k wallet1.json)
pnpm tsx scripts/balance.ts $(solana address -k wallet2.json)
pnpm tsx scripts/inspect.ts $(solana address -k wallet1.json)
pnpm tsx scripts/inspect.ts $(solana address -k wallet2.json)Now compare before and after.
You should be able to explain:
- why
wallet2increased - why
wallet1decreased by the transfer amount plus a fee - why both accounts are still normal wallet accounts owned by the System Program
Step 4: Verify the Transaction in an Explorer
Take the signature from Step 2 and open it in Solana Explorer on devnet.
https://explorer.solana.com/tx/<SIGNATURE>?cluster=devnetCheck these details:
- the transaction landed on
devnet - the sender matches
wallet1 - the recipient matches
wallet2 - the System Program handled the instruction
- the transaction shows a fee being charged
This matters because your script output is not the only source of truth. A good investigation always checks an independent public view too.
Step 5: Write a Short Report
Create a short note in plain English with this structure:
# Devnet Investigation Report
## Accounts
- Sender: <wallet1 address>
- Recipient: <wallet2 address>
## Before
- Sender balance:
- Recipient balance:
## Transaction
- Signature:
- Program used:
- Who signed:
- Who paid the fee:
## After
- Sender balance:
- Recipient balance:
## What Changed
- Explain the balance movement in 3-5 sentences.
- Explain why the sender lost slightly more than the recipient gained.
- Explain why the recipient did not need to sign to receive funds.Keep it short.
The point is clarity, not volume.
What a Good Answer Looks Like
A strong report does not just say “the transaction worked.”
It says something closer to this:
wallet1signed and paid the feewallet2received0.01 SOL- the transfer used the System Program
- the sender balance dropped by the transfer amount plus a network fee
- the recipient account remained a normal system-owned wallet account
That is the level of precision you want.
Optional Stretch Task
If you finish the main challenge comfortably, add one small improvement to your toolkit:
- print both the signature and Explorer URL directly from
send.ts
That is useful because it closes the loop between your script output and public verification.
Common Mistakes
Only checking that the command did not crash
A successful process exit is not the same thing as understanding the result. Always inspect balances and account output before and after.
Ignoring the fee
If you compare only the transfer amount, your math will look wrong. The sender pays a transaction fee in addition to the amount sent.
Treating Explorer like decoration
Explorer is part of the investigation. It gives you an external confirmation that the signature, accounts, and program line up with what your script reported.
Writing a vague report
If your report says “the blockchain updated” or “the transaction happened,” it is too vague. Name the signer, the recipient, the fee payer, and the observable balance changes.
Summary
This challenge tests whether you can do more than run commands.
You used your toolkit to:
- inspect real accounts
- send a real devnet transaction
- verify the result in more than one place
- explain the state change in precise language
That is a real beginner milestone.
It means you are no longer just copying Solana commands. You are starting to reason about what the network actually did.