Interactive companion to the step-by-step tutorial. Use it two ways:
- Progress checklist — tick each box as you complete the hands-on steps.
- Knowledge quiz — answer the questions to confirm you understood why each step works, not just how.
Everything here is testnet practice mode — no real funds, nothing to lose.
Copy this into a GitHub issue/PR (or just tick along in your editor) as you go.
- Installed Rust, the
wasm32-unknown-unknowntarget, Stellar CLI, andcurl - Built the contracts with
./scripts/build.sh - Generated
admin,player1, andplayer2testnet keys - Funded all three accounts via Friendbot
- Deployed and initialized the escrow and oracle contracts
- Captured
$ESCROW_ID,$ORACLE_ID,$XLM_TOKEN,$P1_ADDR,$P2_ADDR
- Created a match as
player1 - Verified the match state is
Pending - Understood that stake amounts are in stroops (
1 XLM = 10,000,000)
- Deposited
player1's stake - Deposited
player2's stake - Confirmed the match is funded (state is now
Active) - Can explain the difference between funded status and escrow balance
- Recorded the verified result on the oracle contract
- Executed the payout via the escrow contract (called as the oracle address)
- Confirmed the match state is
Completed - Confirmed the escrow balance returned to
0
- Whole flow completed in under 15 minutes
- Read at least one "why it matters" callout per step
- Noted any confusing moment to report (see Feedback loop)
Answer each, then expand to check. No peeking first — these mirror the real points new users trip on.
Q1. After Player1 deposits but Player2 has not, what is the match state?
Show answer
StillPending. A match becomes Active only when
both players have deposited.
Q2. You stake "10 XLM". What number do you pass to the stake amount?
Show answer
100000000 — amounts are in stroops, and
1 XLM = 10,000,000 stroops.
Q3. A match is Active with both deposits in. What does the funded check
return, and what does the escrow balance return?
Show answer
Funded →true; escrow balance → 2 × stake (e.g.
200000000 for a 10 XLM stake). One reports deposit flags,
the other reports the amount held.
Q4. Who is allowed to trigger the payout on the escrow contract?
Show answer
Only the configured oracle address (the oracle contract id in the tutorial). The escrow admin cannot submit payouts directly — the call's--source and --caller must both be the oracle
address.
Q5. The match is Completed. Why does the escrow balance read 0 when the
winner just received 20 XLM?
Show answer
The escrow balance reports funds held in escrow for that match. After payout the pot has left escrow (it is in the winner's wallet), so the match's escrow balance is0.
Q6. It's a draw. What happens to the stakes?
Show answer
Each player gets their own stake back (10 XLM each), rather than one player taking the full 20 XLM pot.Q7. Which network should you use to practice, and why never mainnet?
Show answer
Use testnet (or localstandalone). Testnet XLM is
free via Friendbot and worthless, so mistakes cost nothing. Mainnet moves real
funds.
| Correct | Where to go next |
|---|---|
| 6–7 | You're ready to contribute — see the contributing guidelines |
| 4–5 | Re-skim the "why it matters" callouts in the tutorial |
| 0–3 | Re-run the hands-on steps — repetition on testnet is free and the fastest way to learn |
This tutorial improves only when new users tell us where they got stuck.
If any step confused you:
- Note which step and the exact command that didn't behave as described.
- Check the Troubleshooting common issues table in the step-by-step tutorial — your issue may already be covered.
- If not, open an issue or PR describing the confusion. Documentation gaps are treated as bugs and are great first contributions.
🙌 New contributors who run this tutorial and report friction points help us keep it accurate and under 15 minutes. Thank you!