learn.sol
Solana Foundations • Basic Exploration Challenge

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.json as the sender
  • wallet2.json as the recipient

And use the toolkit commands you already built:

  • balance.ts
  • inspect.ts
  • send.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.

terminal
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:

terminal
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.

terminal
pnpm tsx scripts/send.ts wallet1.json $(solana address -k wallet2.json) 0.01

Your 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.

terminal
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 wallet2 increased
  • why wallet1 decreased 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=devnet

Check 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:

report-template.md
# 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:

  • wallet1 signed and paid the fee
  • wallet2 received 0.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.

Solana Assistant

AI-powered documentation helper

Welcome to Solana Assistant

Ask specific questions about Solana development:

Ask specific questions for better results400px
    Devnet Investigation Challenge | learn.sol