<?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: Erick Carvajal</title>
    <description>The latest articles on DEV Community by Erick Carvajal (@neocarvajal).</description>
    <link>https://dev.to/neocarvajal</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F455550%2Fa7a1d7cb-d724-4526-aea1-de81c9f2ae04.png</url>
      <title>DEV Community: Erick Carvajal</title>
      <link>https://dev.to/neocarvajal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/neocarvajal"/>
    <language>en</language>
    <item>
      <title>What I Learned Building NFTs on Solana with Token Extensions</title>
      <dc:creator>Erick Carvajal</dc:creator>
      <pubDate>Tue, 09 Jun 2026 00:20:47 +0000</pubDate>
      <link>https://dev.to/neocarvajal/what-i-learned-building-nfts-on-solana-with-token-extensions-ehn</link>
      <guid>https://dev.to/neocarvajal/what-i-learned-building-nfts-on-solana-with-token-extensions-ehn</guid>
      <description>&lt;p&gt;Before this week, &lt;strong&gt;NFTs&lt;/strong&gt; on &lt;strong&gt;Solana&lt;/strong&gt; weren't new to me. I've previously worked with Programmable NFTs (&lt;strong&gt;pNFTs&lt;/strong&gt;) and even built projects that integrate them. However, most of my experience was centered around the &lt;strong&gt;Metaplex&lt;/strong&gt; ecosystem, so I tended to think about &lt;strong&gt;NFTs&lt;/strong&gt; through that lens.&lt;/p&gt;

&lt;p&gt;What surprised me during this learning arc was discovering how much can be built directly with Token Extensions. By creating &lt;strong&gt;NFTs&lt;/strong&gt; from the token level upward, I gained a much deeper understanding of the underlying primitives that make digital assets work on Solana.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Mental Model: What Is an NFT on Solana?
&lt;/h2&gt;

&lt;p&gt;As developers, we often interact with &lt;strong&gt;NFTs&lt;/strong&gt; through &lt;strong&gt;SDKs&lt;/strong&gt;, &lt;strong&gt;frameworks&lt;/strong&gt;, and &lt;strong&gt;marketplace&lt;/strong&gt; tooling. Those abstractions are useful, but they can hide what's actually happening on-chain.&lt;/p&gt;

&lt;p&gt;This week helped me simplify the model:&lt;/p&gt;

&lt;p&gt;An *&lt;em&gt;NFT *&lt;/em&gt; is fundamentally a token mint configured with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A supply of one&lt;/li&gt;
&lt;li&gt;Zero decimals&lt;/li&gt;
&lt;li&gt;Metadata describing the asset&lt;/li&gt;
&lt;li&gt;Optional relationships to collections or groups&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using Token Extensions, many of these capabilities can be attached directly to the token itself rather than relying on additional programs or infrastructure.&lt;/p&gt;

&lt;p&gt;That shift in perspective was one of the biggest takeaways from this challenge.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Over the course of this arc, I created an &lt;strong&gt;NFT&lt;/strong&gt; on &lt;strong&gt;Solana Devnet&lt;/strong&gt; using Token Extensions and explored several capabilities that I had never implemented directly before.&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%2Fnsyw38nn8lw1ceuslyyy.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%2Fnsyw38nn8lw1ceuslyyy.png" alt="NFT" width="799" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The process included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating a mint configured as an NFT&lt;/li&gt;
&lt;li&gt;Adding metadata using the Metadata Extension&lt;/li&gt;
&lt;li&gt;Minting a single token&lt;/li&gt;
&lt;li&gt;Creating a collection using the Group Extension&lt;/li&gt;
&lt;li&gt;Associating the NFT with the collection through the Member Extension&lt;/li&gt;
&lt;li&gt;Auditing the account structure and extension data on-chain&lt;/li&gt;
&lt;li&gt;Updating metadata after the NFT had already been created&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of the most valuable parts of the exercise was inspecting the accounts directly instead of relying solely on SDK abstractions.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;spl-token initialize-metadata &lt;span class="se"&gt;\&lt;/span&gt;
&amp;lt;NFT_MINT&amp;gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="s2"&gt;"My First NFT"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="s2"&gt;"MNFT"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
https://example.com/metadata.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Seeing how the metadata is stored and referenced at the token level gave me a much clearer understanding of how Token Extensions work behind the scenes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Surprising Part
&lt;/h2&gt;

&lt;p&gt;The most surprising discovery was how self-contained the Token Extensions approach feels.&lt;/p&gt;

&lt;p&gt;Coming from &lt;strong&gt;pNFT&lt;/strong&gt; development, I was already familiar with advanced &lt;strong&gt;NFT&lt;/strong&gt; functionality. What I didn't fully appreciate was how many &lt;strong&gt;NFT&lt;/strong&gt; features can now be represented directly through token extensions.&lt;/p&gt;

&lt;p&gt;The Group and Member Extensions were especially interesting because they model collection relationships as native on-chain structures rather than purely application-level concepts.&lt;/p&gt;

&lt;p&gt;Another surprise was how easy it became to inspect and verify everything. By auditing the mint accounts and extension data directly, I could see exactly how the &lt;strong&gt;NFT&lt;/strong&gt; was composed and how each extension contributed to its behavior.&lt;/p&gt;

&lt;p&gt;That level of transparency made the architecture much easier to understand.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Would Build Next
&lt;/h2&gt;

&lt;p&gt;Now that I've explored &lt;strong&gt;NFT&lt;/strong&gt; construction with Token Extensions, I'd like to experiment with more dynamic asset models.&lt;/p&gt;

&lt;p&gt;Some ideas include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Achievement NFTs that evolve based on user actions&lt;/li&gt;
&lt;li&gt;On-chain certificates with updateable attributes&lt;/li&gt;
&lt;li&gt;Membership assets with configurable permissions&lt;/li&gt;
&lt;li&gt;Hybrid systems that combine Token Extensions with pNFT functionality&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Understanding both approaches gives developers more flexibility when deciding which NFT architecture best fits a particular use case.&lt;/p&gt;

&lt;p&gt;Even with previous experience building &lt;strong&gt;NFT&lt;/strong&gt; applications on &lt;strong&gt;Solana&lt;/strong&gt;, this challenge helped me understand the ecosystem at a deeper level.&lt;/p&gt;

&lt;p&gt;Instead of viewing &lt;strong&gt;NFTs&lt;/strong&gt; only through higher-level frameworks, I now have a much clearer picture of the token primitives that power them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Token Extensions&lt;/strong&gt;, &lt;strong&gt;Metadata&lt;/strong&gt;, &lt;strong&gt;Group&lt;/strong&gt;, and &lt;strong&gt;Member Extensions&lt;/strong&gt; demonstrate that &lt;strong&gt;NFTs&lt;/strong&gt; on **Solana **are more than collectibles. They're programmable digital assets built from composable on-chain components.&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>solana</category>
      <category>blockchain</category>
      <category>nft</category>
    </item>
    <item>
      <title>Token Extensions on Solana: Building Tokens That Do More Than Store Value</title>
      <dc:creator>Erick Carvajal</dc:creator>
      <pubDate>Fri, 05 Jun 2026 16:34:18 +0000</pubDate>
      <link>https://dev.to/neocarvajal/token-extensions-on-solana-building-tokens-that-do-more-than-store-value-4lk4</link>
      <guid>https://dev.to/neocarvajal/token-extensions-on-solana-building-tokens-that-do-more-than-store-value-4lk4</guid>
      <description>&lt;h2&gt;
  
  
  From Simple Tokens to Programmable Assets
&lt;/h2&gt;

&lt;p&gt;When most developers think about tokens, they think about balances and transfers.&lt;/p&gt;

&lt;p&gt;A user owns tokens, sends them to another account, and that's it.&lt;/p&gt;

&lt;p&gt;But many real-world assets need additional rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A gift card that charges a fee when transferred&lt;/li&gt;
&lt;li&gt;A membership badge that cannot be sold&lt;/li&gt;
&lt;li&gt;A regulated asset that can be frozen&lt;/li&gt;
&lt;li&gt;A credential that an issuer can revoke&lt;/li&gt;
&lt;li&gt;A loyalty program with rich metadata attached&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In traditional systems, these rules are usually implemented in backend services and databases.&lt;/p&gt;

&lt;p&gt;With Solana's &lt;strong&gt;Token-2022 program&lt;/strong&gt;, many of these behaviors can be embedded directly into the token itself through Token Extensions.&lt;/p&gt;

&lt;p&gt;Over the past week as part of the &lt;strong&gt;#100DaysOfSolana&lt;/strong&gt; challenge, I explored several Token Extensions and experimented with combining them to create different token behaviors.&lt;/p&gt;

&lt;p&gt;This article summarizes what I learned and how these extensions can be used in practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Are Token Extensions?
&lt;/h2&gt;

&lt;p&gt;Token Extensions are optional features that can be attached to a mint or token account when using the &lt;strong&gt;Token-2022 program&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of deploying a custom smart contract for every use case, developers can activate predefined extensions that add functionality directly to the token.&lt;/p&gt;

&lt;p&gt;Some examples include:&lt;/p&gt;

&lt;p&gt;Extension           Purpose&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transfer Fee          Charges a fee on token transfers&lt;/li&gt;
&lt;li&gt;Metadata Pointer  Links metadata directly to the mint&lt;/li&gt;
&lt;li&gt;Default Account State New accounts start frozen&lt;/li&gt;
&lt;li&gt;Non-Transferable  Prevents tokens from being transferred&lt;/li&gt;
&lt;li&gt;Permanent Delegate    Grants permanent authority over token accounts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The interesting part is that these extensions can be combined to create entirely different asset models.&lt;/p&gt;




&lt;h3&gt;
  
  
  Combination Nº1: Transfer Fees + Metadata
&lt;/h3&gt;

&lt;p&gt;This was the first combination I experimented with.&lt;/p&gt;

&lt;p&gt;The idea is simple:&lt;/p&gt;

&lt;p&gt;Every transfer pays a fee&lt;br&gt;
The token includes rich metadata&lt;/p&gt;

&lt;p&gt;This could be useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Loyalty points&lt;/li&gt;
&lt;li&gt;Community currencies&lt;/li&gt;
&lt;li&gt;Revenue-sharing systems&lt;/li&gt;
&lt;li&gt;In-app economies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The metadata makes the asset easier to identify in wallets and explorers, while transfer fees introduce economic rules directly at the protocol level.&lt;/p&gt;


&lt;h3&gt;
  
  
  Combination Nº2: Default Frozen Accounts + Permanent Delegate
&lt;/h3&gt;

&lt;p&gt;This combination felt much closer to traditional compliance systems.&lt;/p&gt;

&lt;p&gt;Every newly created token account starts in a frozen state.&lt;/p&gt;

&lt;p&gt;A designated authority can then decide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who receives access&lt;/li&gt;
&lt;li&gt;When accounts become active&lt;/li&gt;
&lt;li&gt;When access should be revoked&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This pattern could be useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enterprise assets&lt;/li&gt;
&lt;li&gt;Compliance-gated tokens&lt;/li&gt;
&lt;li&gt;Educational certificates&lt;/li&gt;
&lt;li&gt;Membership programs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What surprised me most was how little custom logic is needed.&lt;/p&gt;

&lt;p&gt;Many behaviors that would normally require an additional smart contract already exist as built-in extensions.&lt;/p&gt;


&lt;h3&gt;
  
  
  Combination Nº3: Non-Transferable + Permanent Delegate
&lt;/h3&gt;

&lt;p&gt;This was probably the most interesting experiment.&lt;/p&gt;

&lt;p&gt;A non-transferable token behaves similarly to a soulbound credential.&lt;/p&gt;

&lt;p&gt;Once issued, the holder cannot transfer it to another account.&lt;/p&gt;

&lt;p&gt;Adding a Permanent Delegate introduces administrative control that can be useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Certifications&lt;/li&gt;
&lt;li&gt;Event attendance badges&lt;/li&gt;
&lt;li&gt;Academic credentials&lt;/li&gt;
&lt;li&gt;Identity systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The token becomes a credential rather than a tradable asset.&lt;/p&gt;

&lt;p&gt;This shift in thinking was one of the biggest lessons from exploring Token Extensions.&lt;/p&gt;

&lt;p&gt;Not every token needs to represent money.&lt;/p&gt;

&lt;p&gt;Sometimes a token represents reputation, access, or proof.&lt;/p&gt;
&lt;h2&gt;
  
  
  Reading a Mint and Inspecting Extensions
&lt;/h2&gt;

&lt;p&gt;One of the most valuable exercises was inspecting existing Token-2022 mints and reading their configuration accounts.&lt;/p&gt;

&lt;p&gt;Instead of only creating tokens, I started asking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which extensions are enabled?&lt;/li&gt;
&lt;li&gt;What authorities exist?&lt;/li&gt;
&lt;li&gt;How are fees configured?&lt;/li&gt;
&lt;li&gt;Is metadata stored on-chain?&lt;/li&gt;
&lt;li&gt;Are transfers restricted?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This helped me understand how other developers design token systems and how different extension combinations affect behavior.&lt;/p&gt;
&lt;h3&gt;
  
  
  Example: Creating a Transfer Fee Token
&lt;/h3&gt;

&lt;p&gt;One of the commands I used during my experiments was creating a mint with transfer fees enabled.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;spl-token create-token &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--transfer-fee-basis-points&lt;/span&gt; 250 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--transfer-fee-maximum-fee&lt;/span&gt; 1000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What this configuration does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creates a Token-2022 mint&lt;/li&gt;
&lt;li&gt;Applies a 2.5% transfer fee&lt;/li&gt;
&lt;li&gt;Caps the maximum fee at 1000 tokens&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From that point forward, transfers automatically follow the rules defined by the extension.&lt;/p&gt;

&lt;p&gt;No additional smart contract logic is required.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Confused Me
&lt;/h2&gt;

&lt;p&gt;Initially, I assumed Token Extensions were simply extra metadata fields. They're much more powerful than that.&lt;/p&gt;

&lt;p&gt;The biggest mental shift was understanding that extensions modify token behavior itself. The token is no longer just a balance. It becomes a programmable asset with built-in rules.&lt;/p&gt;

&lt;p&gt;Another challenge was understanding which extensions make sense together.&lt;/p&gt;

&lt;p&gt;Some combinations complement each other naturally, while others introduce restrictions that may not fit the intended use case.&lt;/p&gt;

&lt;p&gt;Designing token behavior becomes an architecture exercise.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Clicked
&lt;/h2&gt;

&lt;p&gt;The idea that clicked for me was this:&lt;/p&gt;

&lt;p&gt;Token Extensions move business rules closer to the asset itself.&lt;/p&gt;

&lt;p&gt;Instead of relying entirely on backend infrastructure, many common requirements can be enforced directly by the token program.&lt;/p&gt;

&lt;p&gt;That opens interesting possibilities for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Digital credentials&lt;/li&gt;
&lt;li&gt;Loyalty systems&lt;/li&gt;
&lt;li&gt;Compliance-focused assets&lt;/li&gt;
&lt;li&gt;Membership tokens&lt;/li&gt;
&lt;li&gt;On-chain identity&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Before exploring &lt;strong&gt;Token-2022&lt;/strong&gt;, I mostly thought about tokens as transferable balances.&lt;/p&gt;

&lt;p&gt;After working with Token Extensions, I started thinking about tokens as configurable digital objects.&lt;/p&gt;

&lt;p&gt;A token can represent money.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A credential.&lt;/li&gt;
&lt;li&gt;A membership.&lt;/li&gt;
&lt;li&gt;A permission.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Or something entirely different.&lt;/p&gt;

&lt;p&gt;The extension model gives developers a toolkit for defining those behaviors without building everything from scratch.&lt;/p&gt;

&lt;p&gt;If you're learning &lt;strong&gt;Solana&lt;/strong&gt; and haven't explored Token Extensions yet, I highly recommend experimenting with them.&lt;/p&gt;

&lt;p&gt;They completely change what a token can be.&lt;/p&gt;

&lt;p&gt;For deeper technical details, check out the official Token-2022 Extensions documentation and implementation guides from the Solana ecosystem.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.solana-program.com/docs/token-2022/extensions" rel="noopener noreferrer"&gt;https://www.solana-program.com/docs/token-2022/extensions&lt;/a&gt;&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>solana</category>
      <category>web3</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>How Token-2022 Changes Token Logic: A Hands-On Experiment with Minting, Transfers, and Burning on Solana</title>
      <dc:creator>Erick Carvajal</dc:creator>
      <pubDate>Thu, 04 Jun 2026 01:10:45 +0000</pubDate>
      <link>https://dev.to/neocarvajal/how-token-2022-changes-token-logic-a-hands-on-experiment-with-minting-transfers-and-burning-on-3gj8</link>
      <guid>https://dev.to/neocarvajal/how-token-2022-changes-token-logic-a-hands-on-experiment-with-minting-transfers-and-burning-on-3gj8</guid>
      <description>&lt;p&gt;In &lt;strong&gt;Web2&lt;/strong&gt;, asset distribution is controlled by backend services, databases, and business logic.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Solana&lt;/strong&gt;, those rules can live directly inside the token itself.&lt;/p&gt;

&lt;p&gt;In this experiment, I explored how far &lt;strong&gt;Token-2022 Program&lt;/strong&gt; can go by combining:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Non-transferable tokens&lt;/li&gt;
&lt;li&gt;Token accounts across multiple wallets&lt;/li&gt;
&lt;li&gt;Transfers with protocol-level enforcement&lt;/li&gt;
&lt;li&gt;Token burning&lt;/li&gt;
&lt;li&gt;On-chain state inspection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was not just to create tokens, but to understand how &lt;strong&gt;Token-2022&lt;/strong&gt; changes the mental model of token design.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧭 Context: Why Token-2022 matters
&lt;/h2&gt;

&lt;p&gt;Traditional &lt;strong&gt;SPL tokens&lt;/strong&gt; rely on application-level logic. That means rules like restrictions, permissions, or behavior are often enforced off-chain.&lt;/p&gt;

&lt;p&gt;With &lt;strong&gt;Token-2022&lt;/strong&gt;, those rules move into the protocol layer.&lt;/p&gt;

&lt;p&gt;Official references:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://solana.com/docs/tokens" rel="noopener noreferrer"&gt;https://solana.com/docs/tokens&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://spl.solana.com/token-2022" rel="noopener noreferrer"&gt;https://spl.solana.com/token-2022&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://spl.solana.com/token" rel="noopener noreferrer"&gt;https://spl.solana.com/token&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This changes the mental model completely:&lt;/p&gt;

&lt;p&gt;Tokens are no longer just balances. They become programmable state machines with built-in economic rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  🪙 1. Creating a non-transferable token mint
&lt;/h2&gt;

&lt;p&gt;The first step was creating a mint using the Non-Transferable extension.&lt;/p&gt;

&lt;p&gt;I used this because I wanted to test how &lt;strong&gt;Token-2022&lt;/strong&gt; can enforce identity-like behavior directly at the protocol level.&lt;/p&gt;

&lt;p&gt;spl-token create-token \&lt;br&gt;
  --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb \&lt;br&gt;
  --enable-non-transferable&lt;/p&gt;

&lt;p&gt;Result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Address:  BdjdjoR9bS1bei3Gn5crn4jqYAtsxgm7q9B7NAubj42k
Decimals:  9

Signature: 52FfGLA8UHYskSZuwzdWTMnMZnjh8sjAGmM8WT7rjjSgL5jFt6HhkvA5saowDx2cAkwvEhT4PVC9Pw1BorSxU45i
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F1z14ysl75tnonupo66oi.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%2F1z14ysl75tnonupo66oi.png" alt="Explorer Non Transferable" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 Why this matters
&lt;/h2&gt;

&lt;p&gt;Non-transferable tokens cannot be moved between wallets.&lt;/p&gt;

&lt;p&gt;This makes them useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;credentials&lt;/li&gt;
&lt;li&gt;identity systems&lt;/li&gt;
&lt;li&gt;achievements&lt;/li&gt;
&lt;li&gt;access control mechanisms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of enforcing rules in an application layer, the restriction is enforced by the protocol itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  👛 2. Creating a token account and minting
&lt;/h2&gt;

&lt;p&gt;Next, I created a token account and initialized the mint flow.&lt;/p&gt;

&lt;p&gt;spl-token create-account BdjdjoR9bS1bei3Gn5crn4jqYAtsxgm7q9B7NAubj42k \&lt;br&gt;
  --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb&lt;/p&gt;

&lt;p&gt;Result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Creating account P2H8JGKs7TGNmrv1TP9HRCQK7wwLFRSzC8MsgE5DiUQ
Signature: 5t6y36E2UQxeV3Sr6eBVUbJAEoVGtZTVheETash9f3G6eSkeMhC2Shk88XnCRAjNZT5fKYTEQskJzhqKE3Wze6J5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;💡 Why this matters&lt;/p&gt;

&lt;p&gt;Each token account represents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ownership&lt;/li&gt;
&lt;li&gt;balance&lt;/li&gt;
&lt;li&gt;and state tied to mint rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even with extensions, the account model remains the foundation of Solana’s token system.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔁 3. Creating an ATA for a second wallet
&lt;/h2&gt;

&lt;p&gt;To simulate multi-user behavior, I created a second wallet account:&lt;/p&gt;

&lt;p&gt;spl-token create-account BdjdjoR9bS1bei3Gn5crn4jqYAtsxgm7q9B7NAubj42k \&lt;br&gt;
  --owner ~/.config/solana/id_back.json \&lt;br&gt;
  --fee-payer ~/.config/solana/id.json \&lt;br&gt;
  --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb&lt;/p&gt;

&lt;p&gt;Result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Creating account 9z325AvvFhnb6AqsVCGLWtccTSdxuNZafurZqnmE7UMD
Signature: 28b5K5o9xhPmNwgUHDwHmHRXq1GwLYQpawdYH2N27PEuadDD4BLxGmJFSdVM94md1hqB1MB13uFHyD8Ycj4xuEyE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;💡 Why this matters&lt;/p&gt;

&lt;p&gt;This step represents real-world multi-user distribution systems.&lt;/p&gt;

&lt;p&gt;However, Token-2022 extensions allow rules to be enforced at protocol level instead of relying on backend logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  💸 4. Attempting a transfer
&lt;/h2&gt;

&lt;p&gt;I attempted a token transfer between accounts:&lt;/p&gt;

&lt;p&gt;spl-token transfer BdjdjoR9bS1bei3Gn5crn4jqYAtsxgm7q9B7NAubj42k 5 \&lt;br&gt;
  $(solana-keygen pubkey ~/.config/solana/id_back.json) \&lt;br&gt;
  --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb \&lt;br&gt;
  --allow-unfunded-recipient&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%2Fa8vce6rwc4vpeukbhftu.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%2Fa8vce6rwc4vpeukbhftu.png" alt="Error" width="800" height="171"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;💡 Why this matters&lt;/p&gt;

&lt;p&gt;This is where &lt;strong&gt;Token-2022&lt;/strong&gt; shows its flexibility.&lt;/p&gt;

&lt;p&gt;Depending on enabled extensions, transfers can be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fully allowed&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;restricted&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;or modified at protocol level&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This reduces the need for custom validation logic in traditional applications.&lt;/p&gt;
&lt;h2&gt;
  
  
  🔥 5. Burning tokens
&lt;/h2&gt;

&lt;p&gt;To test supply control, I burned tokens:&lt;/p&gt;

&lt;p&gt;spl-token burn P2H8JGKs7TGNmrv1TP9HRCQK7wwLFRSzC8MsgE5DiUQ 3 \&lt;br&gt;
  --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb&lt;/p&gt;

&lt;p&gt;Result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Burn 3 tokens
Source: P2H8JGKs7TGNmrv1TP9HRCQK7wwLFRSzC8MsgE5DiUQ

Signature: 33uX4vtabxexV5teve7VCUbTZRcs3D3Kha3kzNz2zbJpsswRXGmdVptViDsYFFfpkLwwZCbKjb3s4dFxM3yiYT7a
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;💡 Why this matters&lt;/p&gt;

&lt;p&gt;Burning tokens is not just destruction.&lt;/p&gt;

&lt;p&gt;It represents a deterministic state change on-chain, reducing total supply at the protocol level.&lt;/p&gt;

&lt;h2&gt;
  
  
  📉 6. End-to-end lifecycle observation
&lt;/h2&gt;

&lt;p&gt;After running the full flow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mint was created successfully&lt;/li&gt;
&lt;li&gt;Token accounts were initialized&lt;/li&gt;
&lt;li&gt;Transfers were executed under protocol rules&lt;/li&gt;
&lt;li&gt;Tokens were burned&lt;/li&gt;
&lt;li&gt;State changes were visible across explorers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This highlights a key difference from &lt;strong&gt;Web2&lt;/strong&gt; systems:&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Web2&lt;/strong&gt;, state lives in databases.&lt;br&gt;
In &lt;strong&gt;Solana&lt;/strong&gt;, state is deterministic, replicated, and enforced by the protocol.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠 What surprised me
&lt;/h2&gt;

&lt;p&gt;The biggest shift was conceptual:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tokens are not just balances&lt;/li&gt;
&lt;li&gt;They are programmable state machines&lt;/li&gt;
&lt;li&gt;Ownership rules live at mint level&lt;/li&gt;
&lt;li&gt;Behavior is enforced at the protocol layer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This becomes even more powerful when combined with extensions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;transfer fees&lt;/li&gt;
&lt;li&gt;metadata binding&lt;/li&gt;
&lt;li&gt;identity-based tokens&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 What’s next
&lt;/h2&gt;

&lt;p&gt;Next steps in this exploration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transfer fee extensions and fee withdrawal mechanisms&lt;/li&gt;
&lt;li&gt;Metadata-driven token systems&lt;/li&gt;
&lt;li&gt;Token-gated applications&lt;/li&gt;
&lt;li&gt;More advanced Token-2022 behaviors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because &lt;strong&gt;Token-2022&lt;/strong&gt; is not just a token standard.&lt;/p&gt;

&lt;p&gt;It is a framework for building economic logic directly into blockchain primitives.&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>solana</category>
      <category>blockchain</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Auditing a Real Solana Transaction: Creating a USDC Account on Devnet</title>
      <dc:creator>Erick Carvajal</dc:creator>
      <pubDate>Tue, 02 Jun 2026 19:14:49 +0000</pubDate>
      <link>https://dev.to/neocarvajal/auditing-a-real-solana-transaction-creating-a-usdc-account-on-devnet-330g</link>
      <guid>https://dev.to/neocarvajal/auditing-a-real-solana-transaction-creating-a-usdc-account-on-devnet-330g</guid>
      <description>&lt;p&gt;Today I decided to go one step deeper into &lt;strong&gt;Solana&lt;/strong&gt; by not just reading transactions, but actually auditing one I created myself using &lt;strong&gt;Solana Explorer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To generate the transaction, I created an &lt;strong&gt;Associated Token Account (ATA)&lt;/strong&gt; for &lt;strong&gt;USDC&lt;/strong&gt; on devnet using the SPL Token &lt;strong&gt;CLI&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;spl-token create-account 4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F0ub40etom59x779u2yoz.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%2F0ub40etom59x779u2yoz.png" alt="ATA" width="800" height="248"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Transaction Details:&lt;/strong&gt; &lt;a href="https://explorer.solana.com/tx/2Xa2DAWDooLy99p1ch4dFpVdEKZWCegxahQj1xLRiFvy4oo8FsW1CumPmH558UgmnwWNSKk7Gw3QQzFQDiMzdnN1?cluster=devnet" rel="noopener noreferrer"&gt;https://explorer.solana.com/tx/2Xa2DAWDooLy99p1ch4dFpVdEKZWCegxahQj1xLRiFvy4oo8FsW1CumPmH558UgmnwWNSKk7Gw3QQzFQDiMzdnN1?cluster=devnet&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This triggered a transaction that looked simple at first glance, but once inspected in &lt;strong&gt;Solana Explorer&lt;/strong&gt;, it revealed how many moving parts are involved just to initialize a token account.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠 What I was looking at
&lt;/h2&gt;

&lt;p&gt;The transaction created an &lt;strong&gt;Associated Token Account&lt;/strong&gt; for the &lt;strong&gt;USDC&lt;/strong&gt; mint on devnet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This account is where &lt;strong&gt;USDC&lt;/strong&gt; would be stored for my wallet.&lt;/p&gt;

&lt;p&gt;But what stood out is that this is not a single operation. It is a coordinated execution across multiple programs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Associated Token Program&lt;/em&gt; (creates the ATA)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;System Program&lt;/em&gt; (allocates space + funds rent)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Token Program&lt;/em&gt; (initializes account state)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Compute Budget Program&lt;/em&gt; (controls execution limits)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ⚙️ What happens under the hood
&lt;/h2&gt;

&lt;p&gt;To create a simple token account, Solana must:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Derive the Associated Token Address (&lt;strong&gt;ATA&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Allocate 165 bytes of account storage&lt;/li&gt;
&lt;li&gt;Fund the account with ~0.002 &lt;strong&gt;SOL&lt;/strong&gt; for rent exemption&lt;/li&gt;
&lt;li&gt;Assign ownership to the &lt;strong&gt;Token Program&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Initialize the account for the &lt;strong&gt;USDC&lt;/strong&gt; mint&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of this happens atomically — either everything succeeds or nothing does.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔗 What I learned
&lt;/h2&gt;

&lt;p&gt;The most interesting realization is how explicit everything is in &lt;strong&gt;Solana&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Even something as simple as “having a &lt;strong&gt;USDC&lt;/strong&gt; account” requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A program to create it&lt;/li&gt;
&lt;li&gt;A system-level allocation of space&lt;/li&gt;
&lt;li&gt;A rent-exempt balance&lt;/li&gt;
&lt;li&gt;A deterministic address derived from wallet + mint&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nothing is hidden. Everything is visible in the Explorer.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧩 Final thought
&lt;/h2&gt;

&lt;p&gt;This exercise helped me understand something fundamental:&lt;/p&gt;

&lt;p&gt;On &lt;strong&gt;Solana&lt;/strong&gt;, state is not assumed — it is constructed step by step through programs and accounts.&lt;/p&gt;

&lt;p&gt;And tools like &lt;strong&gt;Solana Explorer&lt;/strong&gt; make that entire process transparent and auditable in real time.&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%2Faa7eo9k9ondzdz7xrzpv.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%2Faa7eo9k9ondzdz7xrzpv.png" alt="Solana explorer" width="800" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>solana</category>
      <category>blockchain</category>
      <category>devnet</category>
    </item>
    <item>
      <title>Solana's Account Model Explained for Web2 Developers</title>
      <dc:creator>Erick Carvajal</dc:creator>
      <pubDate>Tue, 02 Jun 2026 18:28:27 +0000</pubDate>
      <link>https://dev.to/neocarvajal/solanas-account-model-explained-for-web2-developers-31df</link>
      <guid>https://dev.to/neocarvajal/solanas-account-model-explained-for-web2-developers-31df</guid>
      <description>&lt;p&gt;When I first started learning &lt;strong&gt;Solana&lt;/strong&gt;, the account model was probably the most confusing concept.&lt;/p&gt;

&lt;p&gt;Coming from &lt;strong&gt;Web2 development&lt;/strong&gt;, I was used to thinking in terms of applications, databases, users, and servers. Then I opened &lt;strong&gt;Solana Explorer&lt;/strong&gt; and suddenly everything seemed to be an account.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wallets are accounts.&lt;/li&gt;
&lt;li&gt;Programs are accounts.&lt;/li&gt;
&lt;li&gt;Token balances are accounts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even data storage is handled through accounts.&lt;/p&gt;

&lt;p&gt;At first, it felt strange. After spending time building on &lt;strong&gt;Solana&lt;/strong&gt;, I realized the account model is actually one of the network's most elegant design choices.&lt;/p&gt;

&lt;h2&gt;
  
  
  Think of Solana Like a Filesystem
&lt;/h2&gt;

&lt;p&gt;The easiest way to understand Solana is to imagine an operating system filesystem.&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%2Fksz6cahhldz7g2wfazou.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%2Fksz6cahhldz7g2wfazou.png" alt="Solana and Filesystem" width="799" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every file has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An address or location&lt;/li&gt;
&lt;li&gt;Metadata&lt;/li&gt;
&lt;li&gt;Content&lt;/li&gt;
&lt;li&gt;Permissions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Solana accounts work in a very similar way.&lt;/p&gt;

&lt;p&gt;Every account lives in a giant key-value store.&lt;/p&gt;

&lt;p&gt;The key is a 32-byte public address.&lt;/p&gt;

&lt;p&gt;The value is the account itself.&lt;/p&gt;

&lt;p&gt;Instead of thinking about wallets and smart contracts as separate objects, think of everything as files stored in the same global filesystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Five Fields Every Account Has
&lt;/h2&gt;

&lt;p&gt;Every account on Solana contains the same structure:&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%2F00fal6ccm3zycmij8szn.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%2F00fal6ccm3zycmij8szn.png" alt="Solana Account" width="799" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Lamports
&lt;/h3&gt;

&lt;p&gt;Lamports are the smallest unit of SOL.&lt;/p&gt;

&lt;p&gt;Just like 1 dollar contains 100 cents:&lt;/p&gt;

&lt;p&gt;1 SOL = 1,000,000,000 lamports.&lt;/p&gt;

&lt;p&gt;This field stores the account's SOL balance.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data
&lt;/h3&gt;

&lt;p&gt;This is where an account stores information.&lt;/p&gt;

&lt;p&gt;A wallet account might store little or no data.&lt;/p&gt;

&lt;p&gt;A token account stores token balances.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;DeFi protocol&lt;/strong&gt; might store liquidity pool information, positions, or user state.&lt;/p&gt;

&lt;p&gt;The data field is simply a byte array that programs can interpret however they want.&lt;/p&gt;

&lt;h3&gt;
  
  
  Owner
&lt;/h3&gt;

&lt;p&gt;This is one of the most important fields.&lt;/p&gt;

&lt;p&gt;The owner is the program that has permission to modify the account's data.&lt;/p&gt;

&lt;p&gt;Think of it like file ownership in Linux.&lt;/p&gt;

&lt;p&gt;If a program doesn't own an account, it cannot arbitrarily change its contents.&lt;/p&gt;

&lt;h3&gt;
  
  
  Executable
&lt;/h3&gt;

&lt;p&gt;This field indicates whether the account contains executable code.&lt;/p&gt;

&lt;p&gt;If executable is true, the account is a program.&lt;/p&gt;

&lt;p&gt;If executable is false, the account is simply storing data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rent Epoch
&lt;/h3&gt;

&lt;p&gt;Historically this field was used for rent collection.&lt;/p&gt;

&lt;p&gt;Today it is deprecated and typically set to a maximum value.&lt;/p&gt;

&lt;p&gt;You will still see it when inspecting account data, but modern applications rarely need to interact with it directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ownership Is Solana's Security Model
&lt;/h2&gt;

&lt;p&gt;One rule explains most of Solana's security model:&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%2F71ko2yi65tyv1dlqln9y.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%2F71ko2yi65tyv1dlqln9y.png" alt="Ownership Is Solana's" width="799" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Only the owner program can modify an account's data or remove lamports from it.&lt;/p&gt;

&lt;p&gt;Interestingly, anyone can send lamports to a writable account.&lt;/p&gt;

&lt;p&gt;This means ownership is not about who can deposit funds.&lt;/p&gt;

&lt;p&gt;Ownership determines who can modify state.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;Web2 developers&lt;/strong&gt;, this feels similar to database permissions.&lt;/p&gt;

&lt;p&gt;You may have read access to a table, but only specific services can modify certain records.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Concept That Surprised Me Most
&lt;/h2&gt;

&lt;p&gt;The biggest surprise for me was learning that programs do not store their own state.&lt;/p&gt;

&lt;p&gt;In many systems we think of an application and its data as being tightly connected.&lt;/p&gt;

&lt;p&gt;On Solana they are separated.&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%2Ffwjl1tm8rholw3tdodjy.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%2Ffwjl1tm8rholw3tdodjy.png" alt="Solana State" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A program account contains executable code.&lt;/p&gt;

&lt;p&gt;Data accounts contain state.&lt;/p&gt;

&lt;p&gt;The program reads and writes data from those accounts when processing instructions.&lt;/p&gt;

&lt;p&gt;A useful analogy is a web application.&lt;/p&gt;

&lt;p&gt;Imagine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The program is your backend server.&lt;/li&gt;
&lt;li&gt;Data accounts are your database tables.&lt;/li&gt;
&lt;li&gt;Transactions are API requests.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The backend doesn't keep all data inside its source code.&lt;/p&gt;

&lt;p&gt;It reads and writes information to a database.&lt;/p&gt;

&lt;p&gt;Solana works in a very similar way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Rent Exemption Exists
&lt;/h2&gt;

&lt;p&gt;Since storing data on-chain consumes network resources, accounts must maintain a minimum balance.&lt;/p&gt;

&lt;p&gt;This is known as rent exemption.&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%2Fm58yjo8wi037qwokem78.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%2Fm58yjo8wi037qwokem78.png" alt="Solana Rent" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The larger the account's data size, the more lamports it must hold.&lt;/p&gt;

&lt;p&gt;For a basic account, the amount is relatively small, but larger accounts require more SOL.&lt;/p&gt;

&lt;p&gt;This mechanism prevents the blockchain from being flooded with free, permanent storage.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Real Example
&lt;/h2&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%2Fwe1wg2lbcgzjd7v8gd6e.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%2Fwe1wg2lbcgzjd7v8gd6e.png" alt="Wallet Swap Result" width="400" height="646"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When I explored my own DeFi swap transaction in Solana Explorer, I expected to see a simple token exchange.&lt;/p&gt;

&lt;p&gt;Instead, I found dozens of accounts interacting together.&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%2Fzi4116zv1p7h18b2smdv.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%2Fzi4116zv1p7h18b2smdv.png" alt="Swap in Explorer" width="758" height="631"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Transaction: &lt;a href="https://explorer.solana.com/tx/3DW1LgsjDg2cbgZnsPE4UkR4WqnZoZpwn5tufuRgKaAtV3FuujkCoHxQ4Lx3PfN6zRjL9tDoShJR8HsBR6DQ42rV" rel="noopener noreferrer"&gt;https://explorer.solana.com/tx/3DW1LgsjDg2cbgZnsPE4UkR4WqnZoZpwn5tufuRgKaAtV3FuujkCoHxQ4Lx3PfN6zRjL9tDoShJR8HsBR6DQ42rV&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Some accounts held token balances.&lt;/p&gt;

&lt;p&gt;Some belonged to liquidity pools.&lt;/p&gt;

&lt;p&gt;Some were temporary accounts created during execution.&lt;/p&gt;

&lt;p&gt;Others belonged to programs like Jupiter and the Token Program.&lt;/p&gt;

&lt;p&gt;Understanding the account model suddenly made the transaction much easier to follow.&lt;/p&gt;

&lt;p&gt;Everything was just accounts interacting under a set of ownership rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;If you're coming from Web2, the Solana account model can initially feel unfamiliar.&lt;/p&gt;

&lt;p&gt;But once you stop thinking in terms of wallets versus smart contracts and start thinking in terms of accounts, programs, and ownership, many parts of Solana begin to make sense.&lt;/p&gt;

&lt;p&gt;Accounts are the foundation of everything on the network.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tokens&lt;/strong&gt;, &lt;strong&gt;NFTs&lt;/strong&gt;, &lt;strong&gt;DeFi protocols&lt;/strong&gt;, governance systems, and wallets all build on the same simple idea:&lt;/p&gt;

&lt;p&gt;Everything is an account.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>blockchain</category>
      <category>web3</category>
      <category>100daysofsolana</category>
    </item>
    <item>
      <title>Anatomy of a Solana Transaction: Following Every Step from Creation to Finalization</title>
      <dc:creator>Erick Carvajal</dc:creator>
      <pubDate>Mon, 01 Jun 2026 19:26:39 +0000</pubDate>
      <link>https://dev.to/neocarvajal/anatomy-of-a-solana-transaction-following-every-step-from-creation-to-finalization-4dl</link>
      <guid>https://dev.to/neocarvajal/anatomy-of-a-solana-transaction-following-every-step-from-creation-to-finalization-4dl</guid>
      <description>&lt;p&gt;Over the past few days, I've been learning &lt;strong&gt;Solana transactions&lt;/strong&gt; by doing what every developer eventually does: building things, breaking them, and trying to understand what happens under the hood.&lt;/p&gt;

&lt;p&gt;At first, I thought a transaction was just a blockchain version of an API request.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create it.&lt;/li&gt;
&lt;li&gt;Send it.&lt;/li&gt;
&lt;li&gt;Wait for a response.&lt;/li&gt;
&lt;li&gt;Done.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But &lt;strong&gt;Solana transactions&lt;/strong&gt; are much more than that.&lt;/p&gt;

&lt;p&gt;A transaction is a cryptographically signed package containing instructions, accounts, metadata, and execution rules that validators process atomically.&lt;/p&gt;

&lt;p&gt;To better understand the process, I built a small script that transfers SOL on Devnet while exposing every major component of the transaction before it reaches the network.&lt;/p&gt;

&lt;p&gt;Let's follow that transaction from creation to finalization.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Transaction Lifecycle
&lt;/h2&gt;

&lt;p&gt;Before writing any code, it helps to visualize what actually happens.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create Transaction&lt;/strong&gt;&lt;br&gt;
        │&lt;br&gt;
        ▼&lt;br&gt;
&lt;strong&gt;Add Instructions&lt;/strong&gt;&lt;br&gt;
        │&lt;br&gt;
        ▼&lt;br&gt;
&lt;strong&gt;Attach Recent Blockhash&lt;/strong&gt;&lt;br&gt;
        │&lt;br&gt;
        ▼&lt;br&gt;
&lt;strong&gt;Sign Transaction&lt;/strong&gt;&lt;br&gt;
        │&lt;br&gt;
        ▼&lt;br&gt;
&lt;strong&gt;Send To Network&lt;/strong&gt;&lt;br&gt;
        │&lt;br&gt;
        ▼&lt;br&gt;
&lt;strong&gt;Processed&lt;/strong&gt;&lt;br&gt;
        │&lt;br&gt;
        ▼&lt;br&gt;
&lt;strong&gt;Confirmed&lt;/strong&gt;&lt;br&gt;
        │&lt;br&gt;
        ▼&lt;br&gt;
&lt;strong&gt;Finalized&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every transaction on &lt;strong&gt;Solana&lt;/strong&gt; follows a similar path.&lt;/p&gt;

&lt;p&gt;The transfer itself is just one instruction inside a larger structure.&lt;/p&gt;




&lt;h2&gt;
  
  
  Visit the complete script
&lt;/h2&gt;

&lt;p&gt;✅ &lt;a href="https://github.com/neocarvajal/100-days-of-solana/blob/main/day-20/anatomy-of-a-transaction.mjs" rel="noopener noreferrer"&gt;anatomy of a transaction script&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Loading the Signer
&lt;/h2&gt;

&lt;p&gt;The first thing my script does is load the wallet generated by Solana CLI.&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%2Fv49ugmzd6jx0mt16fmoa.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%2Fv49ugmzd6jx0mt16fmoa.png" alt="loadKeypair" width="671" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This signer is more than just an address.&lt;/p&gt;

&lt;p&gt;It contains the cryptographic key pair required to authorize changes on-chain.&lt;/p&gt;

&lt;p&gt;Without a valid signature, validators will reject the transaction immediately.&lt;/p&gt;

&lt;p&gt;When the script starts, it prints information about the wallet and current balance:&lt;/p&gt;

&lt;p&gt;Wallet: 8xY...&lt;br&gt;
Balance: 4.82 SOL&lt;/p&gt;

&lt;p&gt;This account will also become the fee payer for the transaction.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: Fetching a Recent Blockhash
&lt;/h2&gt;

&lt;p&gt;Before a transaction can be submitted, it needs a recent blockhash.&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%2Flmkdn7x7myjyqv8vs1ho.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%2Flmkdn7x7myjyqv8vs1ho.png" alt="Recent Blockhash" width="623" height="151"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A common misconception among new developers is that transactions remain valid forever.&lt;/p&gt;

&lt;p&gt;They don't.&lt;/p&gt;

&lt;p&gt;The recent blockhash acts as an expiration mechanism.&lt;/p&gt;

&lt;p&gt;If too much time passes before the transaction reaches the network, validators will reject it.&lt;/p&gt;

&lt;p&gt;This design helps prevent replay attacks and ensures transactions are processed within a limited time window.&lt;/p&gt;

&lt;p&gt;My script prints:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Blockhash&lt;/strong&gt;: 7P7...&lt;br&gt;
&lt;strong&gt;Last Valid Block Height&lt;/strong&gt;: 412345678&lt;/p&gt;

&lt;p&gt;This information defines the lifetime of the transaction.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Creating an Instruction
&lt;/h2&gt;

&lt;p&gt;Transactions don't perform actions by themselves.&lt;/p&gt;

&lt;p&gt;Instructions define what should happen.&lt;/p&gt;

&lt;p&gt;For this example, the instruction is a simple &lt;strong&gt;SOL transfer&lt;/strong&gt;.&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%2Fh9vmprggr8n7hxajx0t2.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%2Fh9vmprggr8n7hxajx0t2.png" alt="Transfer Instruction" width="656" height="243"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This tells Solana's &lt;strong&gt;System Program&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&amp;gt; Transfer a specific amount of SOL from one account to another.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The script outputs:&lt;/p&gt;

&lt;p&gt;Type: System Program Transfer&lt;br&gt;
From: 8xY...&lt;br&gt;
To: FdQ...&lt;br&gt;
Amount: 0.01 SOL&lt;/p&gt;

&lt;p&gt;Although this example contains a single instruction, a transaction may include multiple instructions that execute together.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4: Building the Transaction
&lt;/h2&gt;

&lt;p&gt;Now we assemble all the pieces.&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%2Fbzv3309elnxrtmh7g8xr.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%2Fbzv3309elnxrtmh7g8xr.png" alt="Building the Transaction" width="633" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is where the transaction anatomy becomes visible.&lt;/p&gt;

&lt;p&gt;The transaction now contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A fee payer&lt;/li&gt;
&lt;li&gt;A recent blockhash&lt;/li&gt;
&lt;li&gt;One instruction&lt;/li&gt;
&lt;li&gt;Required account metadata&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At this point the transaction is fully constructed but still cannot be executed.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because it hasn't been signed.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5: Signing the Transaction
&lt;/h2&gt;

&lt;p&gt;Signing proves authorization.&lt;/p&gt;

&lt;p&gt;The resulting signature becomes the unique identifier for the transaction.&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%2Fyipfjwig0iwcqxxhiiqr.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%2Fyipfjwig0iwcqxxhiiqr.png" alt="Signing the Transaction" width="714" height="158"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Output:&lt;/p&gt;

&lt;p&gt;Signature:&lt;br&gt;
5q8mD7...&lt;/p&gt;

&lt;p&gt;One important detail is that changing any part of the transaction after signing invalidates the signature.&lt;/p&gt;

&lt;p&gt;Validators verify this before execution.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 6: Broadcasting to the Network
&lt;/h2&gt;

&lt;p&gt;Once signed, the transaction is serialized and sent.&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%2Fsokbcqtjmano0h5oo5rd.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%2Fsokbcqtjmano0h5oo5rd.png" alt="Broadcasting" width="633" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At this stage the transaction leaves my machine and enters the validator network.&lt;/p&gt;

&lt;p&gt;This is where many developers expect the process to be finished.&lt;/p&gt;

&lt;p&gt;In reality, it's only beginning.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 7: Understanding Commitment Levels
&lt;/h2&gt;

&lt;p&gt;One of the most interesting concepts I encountered while learning Solana was transaction commitment.&lt;/p&gt;

&lt;p&gt;A transaction doesn't instantly become final.&lt;/p&gt;

&lt;p&gt;Instead, it moves through several states.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Processed&lt;/strong&gt;&lt;br&gt;
✓ Processed&lt;/p&gt;

&lt;p&gt;The transaction has been included in a block and executed.&lt;/p&gt;

&lt;p&gt;However, the network has not yet fully agreed on its permanence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Confirmed&lt;/strong&gt;&lt;br&gt;
✓ Confirmed&lt;/p&gt;

&lt;p&gt;A supermajority of validators has voted on the block.&lt;/p&gt;

&lt;p&gt;Confidence is significantly higher.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Finalized&lt;/strong&gt;&lt;br&gt;
✓ Finalized&lt;/p&gt;

&lt;p&gt;The block is considered irreversible.&lt;/p&gt;

&lt;p&gt;For applications that require maximum certainty, this is usually the status that matters most.&lt;/p&gt;

&lt;p&gt;My script waits for all three stages and prints each one as it occurs.&lt;/p&gt;

&lt;p&gt;Watching the transaction progress through these levels helped me understand that blockchain state isn't updated in a single instant.&lt;/p&gt;

&lt;p&gt;Consensus is a process.&lt;/p&gt;




&lt;h2&gt;
  
  
  Viewing the Transaction On-Chain
&lt;/h2&gt;

&lt;p&gt;After finalization, the script prints a Solana Explorer URL.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://explorer.solana.com/tx/" rel="noopener noreferrer"&gt;https://explorer.solana.com/tx/&lt;/a&gt;?cluster=devnet&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%2Fk60rv8c0j5en8i3zj2ib.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%2Fk60rv8c0j5en8i3zj2ib.png" alt="Transaction On-Chain" width="800" height="104"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Opening that link reveals the same transaction from the network's perspective:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Signature&lt;/li&gt;
&lt;li&gt;Accounts&lt;/li&gt;
&lt;li&gt;Instructions&lt;/li&gt;
&lt;li&gt;Fee information&lt;/li&gt;
&lt;li&gt;Confirmation status&lt;/li&gt;
&lt;li&gt;Block information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is one of the best ways to connect your local code with what validators actually process.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Mental Model Shift
&lt;/h2&gt;

&lt;p&gt;The biggest lesson I learned wasn't how to transfer SOL.&lt;/p&gt;

&lt;p&gt;It was understanding what a transaction really is.&lt;/p&gt;

&lt;p&gt;As developers, we're often trained to think in terms of requests and responses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Client&lt;/strong&gt;&lt;br&gt;
  ↓&lt;br&gt;
&lt;strong&gt;Server&lt;/strong&gt;&lt;br&gt;
  ↓&lt;br&gt;
&lt;strong&gt;Database&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&amp;gt; Solana requires a different mindset.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build Transaction&lt;/strong&gt;&lt;br&gt;
  ↓&lt;br&gt;
&lt;strong&gt;Sign Transaction&lt;/strong&gt;&lt;br&gt;
  ↓&lt;br&gt;
&lt;strong&gt;Broadcast&lt;/strong&gt;&lt;br&gt;
  ↓&lt;br&gt;
&lt;strong&gt;Validators Execute&lt;/strong&gt;&lt;br&gt;
  ↓&lt;br&gt;
&lt;strong&gt;Consensus&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The transaction itself becomes the unit of state change.&lt;/p&gt;

&lt;p&gt;Once that mental model clicked, concepts like signatures, blockhashes, instructions, and confirmation levels became much easier to understand.&lt;/p&gt;

&lt;p&gt;A simple transfer may look trivial on the surface, but it contains nearly every foundational concept needed to build applications on Solana.&lt;/p&gt;

&lt;p&gt;And that's what makes it such a powerful learning exercise.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I'm Exploring Next
&lt;/h2&gt;

&lt;p&gt;Now that I understand the anatomy of a successful transaction, I'm interested in exploring the opposite side of the equation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Expired blockhashes&lt;/li&gt;
&lt;li&gt;Failed instructions&lt;/li&gt;
&lt;li&gt;Compute budget limits&lt;/li&gt;
&lt;li&gt;Multi-instruction transactions&lt;/li&gt;
&lt;li&gt;Program interactions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because sometimes the fastest way to understand how something works is to see how it breaks.&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>solana</category>
      <category>solanadev</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>Solana and How It Changed the Way I Think About Software</title>
      <dc:creator>Erick Carvajal</dc:creator>
      <pubDate>Fri, 29 May 2026 16:47:35 +0000</pubDate>
      <link>https://dev.to/neocarvajal/two-weeks-learning-solana-what-changed-in-the-way-i-think-about-software-57lo</link>
      <guid>https://dev.to/neocarvajal/two-weeks-learning-solana-what-changed-in-the-way-i-think-about-software-57lo</guid>
      <description>&lt;p&gt;For the past two weeks I’ve been diving deeper into Solana development as part of the &lt;strong&gt;#100DaysOfSolana&lt;/strong&gt; challenge.&lt;/p&gt;

&lt;p&gt;Even though I already had experience in software engineering and blockchain development, I realized very quickly that understanding Solana is not only about learning new tools or &lt;strong&gt;SDKs&lt;/strong&gt; — it’s about changing the way you think about applications, state, and ownership.&lt;/p&gt;

&lt;p&gt;What surprised me the most&lt;/p&gt;

&lt;p&gt;Coming from a traditional Web2 background, I expected blockchain data to feel similar to working with a distributed database.&lt;/p&gt;

&lt;p&gt;But Solana’s account model feels very different once you start interacting with it directly.&lt;/p&gt;

&lt;p&gt;At first, hearing “everything is an account” sounded simple.&lt;/p&gt;

&lt;p&gt;Then I started inspecting accounts through the &lt;strong&gt;CLI&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;&amp;gt; solana account $(solana address)&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That was one of the first moments where things started to click.&lt;/p&gt;

&lt;p&gt;A wallet is not just an address. It is actual on-chain state:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;balance&lt;/li&gt;
&lt;li&gt;ownership&lt;/li&gt;
&lt;li&gt;permissions&lt;/li&gt;
&lt;li&gt;executable flags&lt;/li&gt;
&lt;li&gt;raw data storage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And unlike traditional databases, every validator in the network maintains that state collectively.&lt;/p&gt;

&lt;p&gt;That changes your perspective completely.&lt;/p&gt;

&lt;p&gt;The “public database” idea finally became real&lt;/p&gt;

&lt;p&gt;One of the biggest mindset shifts for me was understanding that Solana is not trying to replace databases.&lt;/p&gt;

&lt;p&gt;Instead, it solves a different problem:&lt;br&gt;
how to coordinate state in a trustless environment where no single company owns the infrastructure.&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%2Fcfu1tu90nf2zgghk4p5j.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%2Fcfu1tu90nf2zgghk4p5j.png" alt=" " width="799" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Web2&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;your backend owns the database&lt;/li&gt;
&lt;li&gt;your server controls access&lt;/li&gt;
&lt;li&gt;users trust your application&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In &lt;strong&gt;Solana&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;users own accounts&lt;/li&gt;
&lt;li&gt;programs define rules&lt;/li&gt;
&lt;li&gt;validators enforce execution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That distinction became much clearer after comparing traditional databases with Solana accounts side by side.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RPC&lt;/strong&gt; calls felt very different from &lt;strong&gt;APIs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Another interesting realization was how different reading blockchain data feels compared to traditional APIs.&lt;/p&gt;

&lt;p&gt;Normally in &lt;strong&gt;Web2&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you call an &lt;strong&gt;API&lt;/strong&gt; endpoint&lt;/li&gt;
&lt;li&gt;the backend queries a database&lt;/li&gt;
&lt;li&gt;the server returns processed data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In &lt;strong&gt;Solana&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you read raw account state through &lt;strong&gt;RPC&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;there are no &lt;strong&gt;SQL joins&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;no relational queries&lt;/li&gt;
&lt;li&gt;no backend magically assembling your data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You start understanding very quickly why indexing layers and infrastructure providers are so important in &lt;strong&gt;Web3&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The first time I used methods like:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;&amp;gt; connection.getAccountInfo(publicKey)&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I realized:&lt;br&gt;
this is much closer to reading low-level state than consuming a normal &lt;strong&gt;REST API&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;What still feels confusing&lt;/p&gt;

&lt;p&gt;One thing I’m still trying to better understand is how large-scale Solana applications organize and index massive amounts of account data efficiently.&lt;/p&gt;

&lt;p&gt;The account model makes sense conceptually, but designing scalable architectures around:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PDAs&lt;/li&gt;
&lt;li&gt;indexing&lt;/li&gt;
&lt;li&gt;account relationships&lt;/li&gt;
&lt;li&gt;pagination&lt;/li&gt;
&lt;li&gt;caching&lt;/li&gt;
&lt;li&gt;transaction limits&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;feels very different from designing traditional backend systems.&lt;/p&gt;

&lt;p&gt;I’m also interested in learning more about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sealevel parallel execution&lt;/li&gt;
&lt;li&gt;account compression&lt;/li&gt;
&lt;li&gt;advanced Anchor patterns&lt;/li&gt;
&lt;li&gt;Solana runtime internals&lt;/li&gt;
&lt;li&gt;validator architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These two weeks reinforced something important for me:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Web2&lt;/strong&gt; knowledge still matters a lot in &lt;strong&gt;Web3&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Concepts like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;data modeling&lt;/li&gt;
&lt;li&gt;architecture&lt;/li&gt;
&lt;li&gt;security&lt;/li&gt;
&lt;li&gt;scalability&lt;/li&gt;
&lt;li&gt;developer experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;all still apply.&lt;/p&gt;

&lt;p&gt;But Solana forces you to rethink where state lives, who owns it, and how applications interact with it.&lt;/p&gt;

&lt;p&gt;And honestly, that’s what makes learning it so interesting.&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>solana</category>
      <category>blockchain</category>
      <category>web3</category>
    </item>
    <item>
      <title>Comparing Databases vs Solana Accounts ⚡</title>
      <dc:creator>Erick Carvajal</dc:creator>
      <pubDate>Fri, 29 May 2026 16:23:56 +0000</pubDate>
      <link>https://dev.to/neocarvajal/comparing-databases-vs-solana-accounts-2le7</link>
      <guid>https://dev.to/neocarvajal/comparing-databases-vs-solana-accounts-2le7</guid>
      <description>&lt;p&gt;As a developer coming from Web2 and traditional backend systems, one of the biggest mindset shifts while learning Solana is understanding the account model.&lt;/p&gt;

&lt;p&gt;At first, accounts sound simple:&lt;br&gt;
“everything is an account.”&lt;/p&gt;

&lt;p&gt;But after exploring it deeper, I realized Solana is not trying to replace databases; it’s solving a completely different problem: how to manage state in a decentralized environment where no single entity owns the system.&lt;/p&gt;

&lt;p&gt;Today I compared traditional databases with Solana accounts using the Solana CLI and Devnet.&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%2Ftap16mjh6q4r23audqn7.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%2Ftap16mjh6q4r23audqn7.png" alt=" " width="800" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠 Traditional Database vs Solana Accounts
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Concept&lt;/th&gt;
&lt;th&gt;Traditional Database&lt;/th&gt;
&lt;th&gt;Solana Accounts&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Data location&lt;/td&gt;
&lt;td&gt;Rows in tables on a centralized server&lt;/td&gt;
&lt;td&gt;Accounts on a distributed ledger across validators&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Schema&lt;/td&gt;
&lt;td&gt;Defined by the database (SQL DDL, document schema)&lt;/td&gt;
&lt;td&gt;Defined by the owning program; stored as raw bytes in the account’s data field&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access control&lt;/td&gt;
&lt;td&gt;Application-level auth (SQL roles, app middleware)&lt;/td&gt;
&lt;td&gt;Enforced by the runtime: only the owning program can modify an account, and only with the required signer(s)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost of storage&lt;/td&gt;
&lt;td&gt;Server/cloud hosting fees, pay for disk space&lt;/td&gt;
&lt;td&gt;Rent-exempt deposit proportional to data size; refundable when the account is closed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identity/keys&lt;/td&gt;
&lt;td&gt;Auto-increment IDs, UUIDs&lt;/td&gt;
&lt;td&gt;32-byte public keys or Program Derived Addresses (PDAs)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reads&lt;/td&gt;
&lt;td&gt;SQL queries, document lookups&lt;/td&gt;
&lt;td&gt;RPC calls (&lt;code&gt;getAccountInfo&lt;/code&gt;, &lt;code&gt;getProgramAccounts&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Writes&lt;/td&gt;
&lt;td&gt;INSERT/UPDATE via application code&lt;/td&gt;
&lt;td&gt;Transactions with instructions, signed by authorized keys&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code vs data&lt;/td&gt;
&lt;td&gt;Application code and database are separate systems&lt;/td&gt;
&lt;td&gt;Both are accounts; programs and data accounts coexist in the same model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deletion&lt;/td&gt;
&lt;td&gt;DELETE query removes the row&lt;/td&gt;
&lt;td&gt;Close the account and recover lamports&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visibility&lt;/td&gt;
&lt;td&gt;Private by default; controlled by the server owner&lt;/td&gt;
&lt;td&gt;Public by default; anyone can read account data&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  🔥 Biggest Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;In Solana, users own their accounts, not your application.&lt;/li&gt;
&lt;li&gt;Programs are stateless and receive accounts as inputs during execution.&lt;/li&gt;
&lt;li&gt;There are no SQL joins or server-side queries on-chain.&lt;/li&gt;
&lt;li&gt;Storage costs are explicit through rent-exemption.&lt;/li&gt;
&lt;li&gt;Transparency is the default.&lt;/li&gt;
&lt;li&gt;Wallet signatures replace traditional authentication systems.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of the most interesting realizations was understanding that:&lt;/p&gt;

&lt;p&gt;Programs do not search for accounts.&lt;br&gt;
Accounts are explicitly passed into instructions during transactions.&lt;/p&gt;

&lt;p&gt;That changes everything about how you design software in Web3.&lt;/p&gt;

&lt;p&gt;Web2 knowledge still matters&lt;br&gt;
But the execution model is fundamentally different&lt;/p&gt;

&lt;p&gt;⚡ Backend server → Validator network&lt;br&gt;
⚡ Database row → Account&lt;br&gt;
⚡ API endpoint → Program instruction&lt;br&gt;
⚡ Authentication middleware → Wallet signatures + runtime validation&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>solana</category>
      <category>accounts</category>
      <category>database</category>
    </item>
    <item>
      <title>Revisiting Solana Identity Through Vanity Addresses</title>
      <dc:creator>Erick Carvajal</dc:creator>
      <pubDate>Fri, 29 May 2026 02:18:33 +0000</pubDate>
      <link>https://dev.to/neocarvajal/revisiting-solana-identity-through-vanity-addresses-2ann</link>
      <guid>https://dev.to/neocarvajal/revisiting-solana-identity-through-vanity-addresses-2ann</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Sometimes revisiting fundamentals teaches you more than learning something new.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&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%2Fimages.unsplash.com%2Fphoto-1639762681485-074b7f938ba0%3Fq%3D80%26w%3D1600%26auto%3Dformat%26fit%3Dcrop" 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%2Fimages.unsplash.com%2Fphoto-1639762681485-074b7f938ba0%3Fq%3D80%26w%3D1600%26auto%3Dformat%26fit%3Dcrop" alt="Solana Banner" width="1600" height="900"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’m not new to Solana.&lt;/p&gt;

&lt;p&gt;I’ve already worked with wallets, transactions, dApps, and on-chain interactions before joining this challenge. But one thing I’ve enjoyed about revisiting the fundamentals is realizing how many concepts we eventually normalize as developers.&lt;/p&gt;

&lt;p&gt;One of those moments happened while creating a vanity address.&lt;/p&gt;

&lt;p&gt;At surface level, vanity addresses seem cosmetic:&lt;br&gt;
a personalized public key with a recognizable prefix.&lt;/p&gt;

&lt;p&gt;Something like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;neo...&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dev...&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sol...&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But while generating one, I found myself thinking less about customization and more about identity.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧠 We Normalize Cryptographic Identity Very Quickly
&lt;/h2&gt;

&lt;p&gt;In Web2, identity usually depends on platforms.&lt;/p&gt;

&lt;p&gt;Your GitHub account exists because GitHub says it exists.&lt;br&gt;
Your email exists because a provider manages it.&lt;br&gt;
Your access can be revoked, recovered, or modified through centralized systems.&lt;/p&gt;

&lt;p&gt;In Solana, identity starts with a keypair.&lt;/p&gt;

&lt;p&gt;That concept sounds simple, but its implications are massive.&lt;/p&gt;

&lt;p&gt;Your public key becomes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;👛 your wallet&lt;/li&gt;
&lt;li&gt;🧾 your account&lt;/li&gt;
&lt;li&gt;🏆 your reputation&lt;/li&gt;
&lt;li&gt;🔐 your ownership layer&lt;/li&gt;
&lt;li&gt;⚡ your authentication method&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All without asking permission from a platform.&lt;/p&gt;

&lt;p&gt;As developers, we eventually stop thinking about how radical that actually is.&lt;/p&gt;

&lt;p&gt;Generating a vanity address made me revisit that idea from a different angle.&lt;/p&gt;


&lt;h2&gt;
  
  
  ✨ Creating My Vanity Address
&lt;/h2&gt;

&lt;p&gt;I decided to generate a vanity address starting with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;neo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using the Solana CLI, the process was surprisingly simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;solana-keygen grind &lt;span class="nt"&gt;--starts-with&lt;/span&gt; neo:1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Foq1nta5xkmzvkvsu9t3j.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%2Foq1nta5xkmzvkvsu9t3j.png" alt="Image" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔍 What does this command do?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Part&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;solana-keygen&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Solana CLI key generation tool&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;grind&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Continuously generates keypairs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--starts-with&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Searches for a matching prefix&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;neo:1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Look for addresses starting with &lt;code&gt;neo&lt;/code&gt; and stop after finding 1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The CLI continuously generates valid cryptographic keypairs until one naturally matches the pattern.&lt;/p&gt;

&lt;p&gt;That means the resulting wallet is still:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Cryptographically secure&lt;/li&gt;
&lt;li&gt;✅ Fully decentralized&lt;/li&gt;
&lt;li&gt;✅ Controlled only by the private key owner&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The tool is &lt;strong&gt;not editing&lt;/strong&gt; an address.&lt;/p&gt;

&lt;p&gt;It’s brute-forcing mathematically valid combinations until one matches the requested pattern.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 You Can Customize the Beginning &lt;em&gt;or&lt;/em&gt; the End
&lt;/h2&gt;

&lt;p&gt;One thing I found interesting is that Solana vanity addresses are not limited to prefixes.&lt;/p&gt;

&lt;p&gt;You can generate addresses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;starting with specific characters&lt;/li&gt;
&lt;li&gt;ending with specific characters&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Starts with
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;solana-keygen grind &lt;span class="nt"&gt;--starts-with&lt;/span&gt; neo:1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Ends with
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;solana-keygen grind &lt;span class="nt"&gt;--ends-with&lt;/span&gt; neo:1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can even combine patterns depending on how much time and computational power you are willing to spend.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ The more characters you add, the longer the process takes because the search space grows exponentially.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🖥️ Watching the CLI Search Felt Weirdly Satisfying
&lt;/h2&gt;

&lt;p&gt;Seeing the terminal continuously generate millions of keypairs made something click for me:&lt;/p&gt;

&lt;p&gt;Blockchain identity is mathematical.&lt;/p&gt;

&lt;p&gt;Not platform-based.&lt;/p&gt;

&lt;p&gt;No company approves your identity.&lt;br&gt;
No database stores your username.&lt;br&gt;
No admin grants access.&lt;/p&gt;

&lt;p&gt;Your identity is literally tied to cryptographic ownership.&lt;/p&gt;

&lt;p&gt;And somehow, adding a simple &lt;code&gt;neo&lt;/code&gt; prefix made the address feel more human.&lt;/p&gt;




&lt;h2&gt;
  
  
  👛 Wallets Are Not Just Wallets
&lt;/h2&gt;

&lt;p&gt;One thing this challenge reinforced for me is how misleading the word &lt;strong&gt;wallet&lt;/strong&gt; can be for newcomers.&lt;/p&gt;

&lt;p&gt;People imagine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;storage,&lt;/li&gt;
&lt;li&gt;balances,&lt;/li&gt;
&lt;li&gt;banking interfaces.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the wallet is really an &lt;strong&gt;identity layer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Everything on Solana connects back to the keypair:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;transactions&lt;/li&gt;
&lt;li&gt;governance&lt;/li&gt;
&lt;li&gt;token ownership&lt;/li&gt;
&lt;li&gt;program interactions&lt;/li&gt;
&lt;li&gt;reputation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The assets are not “inside” the wallet.&lt;/p&gt;

&lt;p&gt;The blockchain simply recognizes that a specific public key has authority over them.&lt;/p&gt;

&lt;p&gt;That distinction becomes clearer the more time you spend building in Web3.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Why Revisiting Fundamentals Matters
&lt;/h2&gt;

&lt;p&gt;As developers, it’s easy to rush toward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;smart contracts&lt;/li&gt;
&lt;li&gt;frameworks&lt;/li&gt;
&lt;li&gt;AI integrations&lt;/li&gt;
&lt;li&gt;scaling architectures&lt;/li&gt;
&lt;li&gt;complex protocols&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But revisiting the basics has value.&lt;/p&gt;

&lt;p&gt;Because the entire ecosystem ultimately depends on a few foundational ideas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;cryptographic ownership&lt;/li&gt;
&lt;li&gt;self-custody&lt;/li&gt;
&lt;li&gt;decentralized identity&lt;/li&gt;
&lt;li&gt;verifiable interaction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Creating a vanity address reminded me that even small experiments can expose much bigger ideas underneath.&lt;/p&gt;

&lt;p&gt;And honestly, that’s one of the reasons I’m enjoying this challenge despite already having experience with Solana.&lt;/p&gt;

&lt;p&gt;Sometimes relearning fundamentals gives you a better perspective than learning something entirely new.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧵 Final Thought
&lt;/h2&gt;

&lt;p&gt;Before this challenge, I mostly saw vanity addresses as a branding detail.&lt;/p&gt;

&lt;p&gt;Now I see them as a small but interesting expression of on-chain identity.&lt;/p&gt;

&lt;p&gt;And that’s probably one of the most fascinating parts of Web3:&lt;/p&gt;

&lt;p&gt;Your identity doesn’t belong to a platform.&lt;/p&gt;

&lt;p&gt;It belongs to your keys.&lt;/p&gt;




</description>
      <category>100daysofsolana</category>
      <category>solana</category>
    </item>
    <item>
      <title>Your Solana Wallet Is More Than a Wallet — It’s Your Identity</title>
      <dc:creator>Erick Carvajal</dc:creator>
      <pubDate>Fri, 29 May 2026 01:49:50 +0000</pubDate>
      <link>https://dev.to/neocarvajal/your-solana-wallet-is-more-than-a-wallet-its-your-identity-52pm</link>
      <guid>https://dev.to/neocarvajal/your-solana-wallet-is-more-than-a-wallet-its-your-identity-52pm</guid>
      <description>&lt;p&gt;If you come from &lt;strong&gt;Web2&lt;/strong&gt; development, you’re used to identity being fragmented across platforms.&lt;/p&gt;

&lt;p&gt;You have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a GitHub username,&lt;/li&gt;
&lt;li&gt;a Google account,&lt;/li&gt;
&lt;li&gt;an email address,&lt;/li&gt;
&lt;li&gt;maybe OAuth logins for different apps, &lt;/li&gt;
&lt;li&gt;and passwords stored in dozens of databases you don’t control.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each platform owns your identity inside its own system. Blockchain changes that model completely. On Solana, your identity starts with a cryptographic keypair.&lt;/p&gt;

&lt;p&gt;And once that clicks, many Web3 concepts suddenly make sense. From Web2 Accounts to Cryptographic Identity In Web2, accounts are usually stored in centralized databases.&lt;/p&gt;

&lt;p&gt;When you log into a service, the platform checks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;your &lt;strong&gt;email&lt;/strong&gt;,&lt;/li&gt;
&lt;li&gt;your &lt;strong&gt;password&lt;/strong&gt;,&lt;/li&gt;
&lt;li&gt;or an &lt;strong&gt;OAuth token&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The company decides whether you can access your account.&lt;/p&gt;

&lt;p&gt;They can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;suspend you,&lt;/li&gt;
&lt;li&gt;reset your password,&lt;/li&gt;
&lt;li&gt;lock your account,&lt;/li&gt;
&lt;li&gt;or even delete your access entirely.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your “identity” exists because their servers say it does. On Solana, identity works differently. There’s no central authority managing your account. Instead, identity is based on public-key cryptography.&lt;/p&gt;

&lt;p&gt;When you create a Solana wallet, you generate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a public key&lt;/li&gt;
&lt;li&gt;and a private key&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The public key becomes your address on the network.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The private key proves ownership.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No username.&lt;/li&gt;
&lt;li&gt;No email.&lt;/li&gt;
&lt;li&gt;No password reset flow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just cryptographic proof. Think About SSH Keys. The easiest way for a Web2 developer to understand this is through SSH.&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%2F44sv4ni1ttaydd9949pj.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%2F44sv4ni1ttaydd9949pj.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you use SSH:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You generate a keypair.&lt;/li&gt;
&lt;li&gt;You place the public key on a server.&lt;/li&gt;
&lt;li&gt;You prove ownership by signing with the private key.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Solana works in a very similar way. Except instead of authenticating against a single server, you authenticate against the entire network. Your wallet signs transactions using your private key. Validators verify the signature using your public key. If the signature is valid, the network accepts the action. If not, the transaction is rejected.&lt;/p&gt;

&lt;p&gt;This means your identity is portable across every Solana application. You don’t create a new account for every dApp. Your wallet is your account.&lt;/p&gt;

&lt;p&gt;Why Solana Addresses Look Weird?&lt;/p&gt;

&lt;p&gt;A Solana public key usually looks something like this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;14grJpemFaf88c8tiVb77W7TYg2W3ir6pfkKz3YjhhZ5&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That’s not random formatting.&lt;/p&gt;

&lt;p&gt;Solana uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;32-byte Ed25519 public keys&lt;/li&gt;
&lt;li&gt;encoded in Base58&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Base58 intentionally removes visually confusing characters like:&lt;/p&gt;

&lt;p&gt;0&lt;br&gt;
O&lt;br&gt;
I&lt;br&gt;
l&lt;/p&gt;

&lt;p&gt;This reduces mistakes when copying addresses.&lt;/p&gt;

&lt;p&gt;Unlike usernames in Web2 databases, these addresses are not assigned by a company. They are mathematically generated. Nobody needs permission to create one.&lt;/p&gt;

&lt;p&gt;Ownership Without Permission. This is probably the biggest mental shift for Web2 developers.&lt;/p&gt;

&lt;p&gt;In Web2:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Access is granted by a platform.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In Solana:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ownership is proven cryptographically.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you control the private key, you control the account. No support team can override that. No admin can reset it. No centralized database determines ownership.&lt;/p&gt;

&lt;p&gt;This is what people mean when they say:&lt;/p&gt;

&lt;p&gt;“Not your keys, not your crypto.”&lt;/p&gt;

&lt;p&gt;The private key is the source of authority. That also means self-custody comes with responsibility. If you lose your private key or seed phrase, there is no password recovery process. The network cannot “recover” your identity for you.&lt;/p&gt;

&lt;p&gt;Identity Is More Than Logging In. On Solana, identity is not just authentication. Your public key becomes the foundation for everything you do on-chain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;token ownership,&lt;/li&gt;
&lt;li&gt;NFT collections,&lt;/li&gt;
&lt;li&gt;governance voting,&lt;/li&gt;
&lt;li&gt;DAO participation,&lt;/li&gt;
&lt;li&gt;program interactions,&lt;/li&gt;
&lt;li&gt;reputation,&lt;/li&gt;
&lt;li&gt;transaction history.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And because the identity is standardized across the network, every application can recognize it automatically.&lt;/p&gt;

&lt;p&gt;You don’t need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;account integrations,&lt;/li&gt;
&lt;li&gt;OAuth providers,&lt;/li&gt;
&lt;li&gt;or permission between apps.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your wallet works everywhere by default. That interoperability is one of the most powerful ideas in Web3.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Before learning Solana, I thought wallets were mainly about storing crypto. But after working with keypairs and signing transactions, I realized something bigger:&lt;/p&gt;

&lt;p&gt;A wallet is really a cryptographic identity layer.&lt;/p&gt;

&lt;p&gt;In Web2, companies own the relationship between users and applications.&lt;/p&gt;

&lt;p&gt;In Solana, users own their identity directly.&lt;/p&gt;

&lt;p&gt;That changes how authentication, ownership, and interoperability work across the internet.&lt;/p&gt;

&lt;p&gt;And honestly, once you understand that, many parts of Web3 stop feeling “magical” and start feeling like a natural evolution of systems developers already know.&lt;/p&gt;

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