When I started #100DaysOfSolana, I didn’t even know what a keypair was. On Day 1 I ran a script, got a random address, and thought “this is my wallet?” It felt too bare. No password, no email, just a string. Then I learned that sending SOL means creating a transaction, and that’s where things got real.
A Solana transaction isn’t like a normal API call. In Web2 you hit an endpoint, the server does stuff, and maybe you get a 200 OK. Here, a transaction is a signed bundle of instructions that changes state on a public ledger that thousands of computers agree on. Every transaction needs a recent blockhash (like a freshness stamp that expires in about a minute), a list of all the accounts it will touch, and at least one signature from the person who pays the fee. If any instruction fails, the whole thing rolls back. Atomic, just like a database transaction, except everyone can see it, and you pay a tiny fee even if it fails.
The first time I sent SOL from my terminal, I was nervous. I double checked the address, ran the command, and waited. It felt like hitting “send” on a bank transfer, but there’s no bank. The confirmation came back in under a second, and I could immediately look it up on Solana Explorer. Seeing my little 0.001 SOL transfer sitting on chain, with a block time and a fee, made the whole “public ledger” idea click.
Over the next few days I broke things on purpose. I tried sending more than my balance (the CLI yelled at me), sent to a brand new address without the right flag (rejected), and inspected raw transaction data with solana confirm -v SIGNATURE. That’s when I noticed the 1,232 byte size limit baked into every transaction. Coming from a world of unlimited JSON payloads, that was a shock. Now I understand why complex apps need stuff like Address Lookup Tables.
The biggest jump was building my own little transfer tool with Node.js. Instead of typing solana transfer every time, I wrote a script that loads my keypair, checks my balance, asks for confirmation, and prints a clickable Explorer link. Later I added progress tracking so I can see the status move from “processed” to “confirmed” to “finalized.” That felt like I’d turned a black box into something I actually understood.
If you’re just starting out, my advice is to send lots of tiny transfers on devnet. Break things. Read the error messages. Use the Explorer like a detective. The transaction model starts to feel natural quicker than you think, and then you realise you’ve grown from copying code to actually knowing what your code is asking the network to do.



Top comments (0)