<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aborisade Ayomiposi </title>
    <description>The latest articles on DEV Community by Aborisade Ayomiposi  (@boblee24).</description>
    <link>https://dev.to/boblee24</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3914777%2F0263bd4f-8f23-4671-9afc-4e5a3490d382.jpeg</url>
      <title>DEV Community: Aborisade Ayomiposi </title>
      <link>https://dev.to/boblee24</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/boblee24"/>
    <language>en</language>
    <item>
      <title>Solana Transactions Are Not What I Expected (Coming From EVM)</title>
      <dc:creator>Aborisade Ayomiposi </dc:creator>
      <pubDate>Thu, 28 May 2026 00:10:54 +0000</pubDate>
      <link>https://dev.to/boblee24/solana-transactions-are-not-what-i-expected-coming-from-evm-16gk</link>
      <guid>https://dev.to/boblee24/solana-transactions-are-not-what-i-expected-coming-from-evm-16gk</guid>
      <description>&lt;p&gt;I've been building on EVM chains for a while Base, Ethereum, the usual.&lt;br&gt;
I thought picking up Solana would be a lateral move. Same concept, different syntax.&lt;/p&gt;

&lt;p&gt;I was wrong, and the transactions are where that became obvious.&lt;/p&gt;


&lt;h2&gt;
  
  
  What I thought I knew
&lt;/h2&gt;

&lt;p&gt;On EVM chains, a transaction is mostly a wrapper. You have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;code&gt;to&lt;/code&gt; address&lt;/li&gt;
&lt;li&gt;Some &lt;code&gt;value&lt;/code&gt; (ETH)&lt;/li&gt;
&lt;li&gt;Optional &lt;code&gt;data&lt;/code&gt; (the encoded function call)&lt;/li&gt;
&lt;li&gt;A signature from your wallet&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The RPC figures out what to do with it. You don't think too hard about the&lt;br&gt;
structure. ethers.js handles most of it.&lt;/p&gt;

&lt;p&gt;Solana transactions look structurally similar at first glance. You sign something,&lt;br&gt;
you broadcast it. But once you actually build one from scratch, the differences&lt;br&gt;
become hard to ignore.&lt;/p&gt;


&lt;h2&gt;
  
  
  The anatomy is more explicit
&lt;/h2&gt;

&lt;p&gt;A Solana transaction is made of &lt;strong&gt;instructions&lt;/strong&gt;, and each instruction spells&lt;br&gt;
out exactly which accounts it touches and whether each account is a signer,&lt;br&gt;
writable, or read-only.&lt;/p&gt;

&lt;p&gt;You don't just call a function and let the runtime figure out state. You declare&lt;br&gt;
upfront: "This instruction reads from account A and writes to account B."&lt;/p&gt;

&lt;p&gt;Here's what building a simple transfer looked like when I did it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;transaction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Transaction&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;SystemProgram&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;transfer&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;fromPubkey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;publicKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;toPubkey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;recipient&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;lamports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;LAMPORTS_PER_SOL&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.001&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;transaction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;recentBlockhash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getLatestBlockhash&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;blockhash&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;transaction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;feePayer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;publicKey&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three things you set manually that ethers.js would've handled for you:&lt;br&gt;
the instruction, the blockhash, and the fee payer. On Solana, you're closer&lt;br&gt;
to the metal.&lt;/p&gt;




&lt;h2&gt;
  
  
  The blockhash thing caught me off guard
&lt;/h2&gt;

&lt;p&gt;Every Solana transaction includes a &lt;code&gt;recentBlockhash&lt;/code&gt;. It's not optional.&lt;br&gt;
It's what ties your transaction to a specific point in time, and it expires.&lt;/p&gt;

&lt;p&gt;If your transaction doesn't land within roughly 60 to 90 seconds, it's dead.&lt;br&gt;
You have to rebuild it with a fresh blockhash and try again.&lt;/p&gt;

&lt;p&gt;On EVM chains, you deal with nonces and gas price wars. Transactions can sit&lt;br&gt;
in the mempool for minutes. Solana's model is different: it's intentionally&lt;br&gt;
short-lived. Either your transaction lands fast, or it doesn't land at all.&lt;/p&gt;

&lt;p&gt;I actually triggered this on devnet by fetching a blockhash, waiting too long,&lt;br&gt;
and then trying to send. The transaction came back invalid. Once I understood&lt;br&gt;
&lt;em&gt;why&lt;/em&gt;, it made sense, Solana is optimizing for speed and finality, not&lt;br&gt;
for letting transactions queue.&lt;/p&gt;




&lt;h2&gt;
  
  
  Breaking transactions taught me more than building them
&lt;/h2&gt;

&lt;p&gt;The task I was working through asked me to intentionally break transactions&lt;br&gt;
to understand the failure modes. That turned out to be the most useful part.&lt;/p&gt;

&lt;p&gt;Some things I broke on purpose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sending without enough SOL for rent-exempt balance&lt;/li&gt;
&lt;li&gt;Exceeding the compute budget (Solana allocates compute units per transaction,
similar to gas but more explicit)&lt;/li&gt;
&lt;li&gt;Including too many instructions in one transaction, Solana has a hard 1,232-byte
size limit on transactions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last one doesn't have a direct EVM equivalent. On Ethereum, you can&lt;br&gt;
pack a lot into calldata. On Solana, 1,232 bytes is the ceiling, full stop.&lt;br&gt;
It shapes how you design programs. If you need to do a lot, you batch across&lt;br&gt;
multiple transactions or restructure your logic.&lt;/p&gt;

&lt;p&gt;The failed transactions show up on Solana Explorer with a clear error log.&lt;br&gt;
That's actually better than what I'm used to on EVM, where a reverted&lt;br&gt;
transaction sometimes just says "execution reverted" with nothing useful attached.&lt;/p&gt;




&lt;h2&gt;
  
  
  The mental model that finally clicked
&lt;/h2&gt;

&lt;p&gt;On EVM, I think of a transaction as &lt;em&gt;sending a message&lt;/em&gt; to a contract.&lt;/p&gt;

&lt;p&gt;On Solana, it's closer to &lt;em&gt;submitting a batch of state changes&lt;/em&gt; that either&lt;br&gt;
all succeed or all fail. The accounts are the state. The instructions are the&lt;br&gt;
operations. The transaction is the atomic unit that wraps them.&lt;/p&gt;

&lt;p&gt;That's not a huge conceptual leap, but the way you &lt;em&gt;build&lt;/em&gt; for it is different.&lt;br&gt;
You think about accounts before you think about logic. You declare intent upfront&lt;br&gt;
instead of letting the runtime discover it.&lt;/p&gt;

&lt;p&gt;I'm still early in this. Day 20 of 100. But transactions are the part where&lt;br&gt;
Solana stopped feeling like "Ethereum but faster" and started feeling like&lt;br&gt;
its own thing.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Building through the 100 Days of Solana challenge. If you're doing the same,&lt;br&gt;
feel free to connect.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>web3</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>Reading the Chain, Querying Data, and Understanding Solana's Storage Model</title>
      <dc:creator>Aborisade Ayomiposi </dc:creator>
      <pubDate>Tue, 19 May 2026 23:14:18 +0000</pubDate>
      <link>https://dev.to/boblee24/reading-the-chain-querying-data-and-understanding-solanas-storage-model-o81</link>
      <guid>https://dev.to/boblee24/reading-the-chain-querying-data-and-understanding-solanas-storage-model-o81</guid>
      <description>&lt;h2&gt;
  
  
  Day 8 : Reading On-Chain Data with RPC Calls
&lt;/h2&gt;

&lt;p&gt;This is where things got real. Instead of just generating wallets and checking balances manually, I started making actual RPC calls to read data from the Solana network programmatically.&lt;br&gt;
The one that clicked immediately was getBalance, you pass in a public key, and the network hands you back the wallet's balance in Lamports. Simple, but it made the connection between "wallet" and "on-chain account" feel concrete for the first time.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const rpc = createSolanaRpc(devnet("https://api.devnet.solana.com"));

const { value: balanceInLamports } = await rpc
  .getBalance(targetAddress)
  .send();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;RPC calls are basically how you talk to the Solana network. No SQL, no REST endpoints you design yourself just a set of predefined functions the network exposes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 9: Querying Recent Transactions
&lt;/h2&gt;

&lt;p&gt;Next I queried transaction history using getSignaturesForAddress. The interesting part was adding a limit, without it, you'd potentially pull back thousands of transactions for an active wallet.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const signatures = await rpc
  .getSignaturesForAddress(targetAddress, { limit: 5 })
  .send();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What impressed me:&lt;/strong&gt; transactions on Solana are identified by signatures, not IDs like in a traditional database. Every signed transaction leaves a permanent, public record on-chain. You can't hide it, you can't delete it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 10: Building a Dashboard to Visualize It All
&lt;/h2&gt;

&lt;p&gt;After two days of reading raw data from the terminal, I built a simple browser dashboard to visualize everything, wallet balance, recent transactions, the works.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2hks3700xd0ac9ig86f4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2hks3700xd0ac9ig86f4.png" alt="Visualizing the data fetched through the rpc" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
This was the most satisfying day so far. Taking raw RPC responses and turning them into something a non-developer could actually read, that's the frontend instinct kicking in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 11: Solana Accounts vs Traditional Databases
&lt;/h2&gt;

&lt;p&gt;This one reshaped how I think about on-chain storage. Coming from Web2, I instinctively think of data as rows in a table, managed by a database I control. Solana flips that entirely.&lt;br&gt;
Here's the comparison that made it click:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu37xqtkn0zworjcwbjmx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu37xqtkn0zworjcwbjmx.png" alt="differences between traditional database and solana accounts" width="800" height="429"&gt;&lt;/a&gt;&lt;br&gt;
Two things that stood out most: storage costs a refundable deposit on Solana, you get it back when you close an account. And everything is public by default. In Web2 you design for privacy. In Web3 you design assuming everyone can see everything.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 12: Devnet vs Mainnet
&lt;/h2&gt;

&lt;p&gt;Short but important. I'd been using devnet the whole time without fully understanding what I was opting into.&lt;br&gt;
&lt;strong&gt;Devnet&lt;/strong&gt; is your staging environment. Free SOL via airdrop, transactions that don't cost real money, a sandbox to break things without consequences.&lt;br&gt;
&lt;strong&gt;Mainnet&lt;/strong&gt; is production. Real tokens, real money, real consequences. What you deploy here lives on the blockchain permanently.&lt;br&gt;
The mental model that helped: &lt;strong&gt;devnet is like localhost&lt;/strong&gt;. You'd never ship straight to mainnet without testing on devnet first, just like you wouldn't push untested code straight to production.&lt;/p&gt;

&lt;p&gt;Five days of going deeper into how Solana actually stores and exposes data. The dashboard on day 10 brought it all together visually, but day 11 was the one that genuinely changed how I think about data storage.&lt;/p&gt;

&lt;p&gt;Next up: on-chain programs.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>100daysofsolana</category>
      <category>web3</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>From Web2 Dev to Solana: My First 5 Days</title>
      <dc:creator>Aborisade Ayomiposi </dc:creator>
      <pubDate>Thu, 14 May 2026 16:43:55 +0000</pubDate>
      <link>https://dev.to/boblee24/from-web2-dev-to-solana-my-first-5-days-4e53</link>
      <guid>https://dev.to/boblee24/from-web2-dev-to-solana-my-first-5-days-4e53</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Day 1 was Understanding Keypairs (The Web3 Identity Shift)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The first thing that clicked for me on day one was how identity works differently in Web3.&lt;br&gt;
&lt;strong&gt;In Web2&lt;/strong&gt;, your identity lives in someone else's database. You create a password, a server stores it, and you prove who you are by matching that password. The platform controls your access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In Web3&lt;/strong&gt;, you generate your own keypair two halves that work together. The public key is your identity, like a username anyone can see. The private key is your proof, it signs transactions to confirm you're really you. Nobody generates it for you, nobody stores it for you. That shift from &lt;strong&gt;"the platform holds your identity"&lt;/strong&gt; to &lt;strong&gt;"you generate and own it&lt;/strong&gt; "is the real bridge from Web2 to Web3.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Day 2: Creating a Wallet and Checking Balance&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I set up my first Solana wallet programmatically. I used Solana Kit and the generateKeypair function to create a wallet, then checked its address on Solana.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;wallet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;generateKeyPairSigner&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Seeing an actual wallet address generated from code that made it real.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Day 3: SOL and Lamports&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Quick but important one. SOL isn't the smallest unit you work with on-chain, Lamports are.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1 SOL = 1,000,000,000 Lamports (10^9)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Think of it like how $1 = 100 cents. When you're reading balances or sending transactions in code, you're almost always working in Lamports. Keep that in mind so you don't accidentally send 1 SOL when you meant 1 Lamport.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Day 4: Connecting a Browser Wallet&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This one had a setup detour. I'm on Windows, so before I could install the Solana CLI, I had to set up WSL (Windows Subsystem for Linux) and install Ubuntu. The Solana docs pointed me there once I figured that out it was straightforward.&lt;br&gt;
For the browser wallet connection, I already had Phantom installed as an extension. The key thing I learned: detecting a wallet in the browser isn't enough, you also have to verify it actually supports Solana, since some multi-chain wallets don't.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;isSolanaWallet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;wallet&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;wallet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chains&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nf"&gt;some&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;chain&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;chain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startsWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;solana:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;// this function checks if the available wallet are solana compatible&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I also learned the difference between Devnet (your development/test environment, free SOL via airdrop) and &lt;br&gt;
Mainnet (production, real money). &lt;strong&gt;Always build on devnet first&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Day 5 Wallets: A Real Comparison + The Different Types&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Before diving into wallet categories, I compared the three wallets I'd actually used so far and the security differences were eye-opening.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;CLI Wallet&lt;/strong&gt;: the private key is stored in a plain file on your machine. Anyone with access to your file system can find it. Least secure for real use, but fine for dev work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Browser Extension (e.g. Phantom)&lt;/strong&gt;: the app manages your private key and locks it behind a password. More convenient, but you're limited to password protection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile Wallet&lt;/strong&gt;: this one surprised me. Mobile wallets can leverage your phone's hardware fingerprint, Face ID, biometrics. The OS-level security adds a layer that browser extensions simply can't match. For everyday use, mobile is arguably the most secure of the three.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;The pattern is obvious: the more the app controls key management and hardware integration, the more secure it gets. CLI gives you raw access but also raw exposure.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not all wallets are the same. Here's what I mapped out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hot Wallet&lt;/strong&gt;: private key lives on a device connected to the internet. Convenient but more exposed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cold Wallet&lt;/strong&gt;: private key is kept completely offline. More secure, less convenient.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custodial&lt;/strong&gt;: someone else (usually an exchange) holds your private key. You trust them with your access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Non-Custodial&lt;/strong&gt;: you hold your own keys. True ownership, but full responsibility.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hardware Wallet&lt;/strong&gt;: a physical device (like a Ledger) that stores your private key separately from your computer. Best of both worlds for security.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Signature Wallet&lt;/strong&gt;: requires multiple signatures to approve a transaction. Great for t
eam funds or added security.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>100daysofsolana</category>
      <category>web3</category>
      <category>blockchain</category>
      <category>solana</category>
    </item>
  </channel>
</rss>
