<?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: Aniket Misra</title>
    <description>The latest articles on DEV Community by Aniket Misra (@aniket_misra_e47d1564ab7b).</description>
    <link>https://dev.to/aniket_misra_e47d1564ab7b</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%2F3898086%2F9a9ac2ea-daea-42ff-8ba1-17ae767ab2f6.png</url>
      <title>DEV Community: Aniket Misra</title>
      <link>https://dev.to/aniket_misra_e47d1564ab7b</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aniket_misra_e47d1564ab7b"/>
    <language>en</language>
    <item>
      <title>From Packet Filter to High-Performance Execution Layer: How Solana Re-Engineered BPF</title>
      <dc:creator>Aniket Misra</dc:creator>
      <pubDate>Sat, 06 Jun 2026 06:14:33 +0000</pubDate>
      <link>https://dev.to/aniket_misra_e47d1564ab7b/from-packet-filter-to-high-performance-execution-layer-how-solana-re-engineered-bpf-214i</link>
      <guid>https://dev.to/aniket_misra_e47d1564ab7b/from-packet-filter-to-high-performance-execution-layer-how-solana-re-engineered-bpf-214i</guid>
      <description>&lt;p&gt;To understand why Solana can process tens of thousands of transactions per second while maintaining sub-second finality, you have to look past the marketing buzzwords like "Proof of History." The real workhorse of Solana's throughput is its execution layer: the &lt;strong&gt;Solana Virtual Machine (SVM)&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Unlike Ethereum, which designed a custom, interpreted virtual machine from scratch (the EVM), Solana did something radically practical: they grabbed an existing, heavily optimized Linux kernel technology called &lt;strong&gt;BPF (Berkeley Packet Filter)&lt;/strong&gt; and turned it into an efficient runtime smart contract engine.&lt;/p&gt;

&lt;p&gt;Here is how a technology designed to filter network packets in the 1990s became the backbone of a high-performance monolithic blockchain.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. What is BPF and Why Did Solana Choose It?
&lt;/h2&gt;

&lt;p&gt;Originally introduced in 1992, BPF was designed to analyze and filter network packets directly inside the Linux kernel without copying data across the user-kernel boundary. It evolved into &lt;strong&gt;eBPF (Extended BPF)&lt;/strong&gt;, turning the kernel into a programmable environment where developers could run sandboxed bytecode safely at near-native speeds.&lt;/p&gt;

&lt;p&gt;When Solana's architects were designing the network, they looked at the landscape of virtual machines and noticed a fatal flaw in traditional blockchain runtimes: they were too high-level, interpreted, and detached from the underlying CPU hardware.&lt;/p&gt;

&lt;p&gt;Solana chose a variation of eBPF (termed &lt;strong&gt;Solana Bytecode Format or SBF&lt;/strong&gt;) for three core architectural reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hardware-Friendly Architecture:&lt;/strong&gt; BPF’s instruction set maps directly to modern x86-64 and ARM64 CPU instructions. Running a BPF instruction often translates to a single native CPU instruction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic Sandboxing:&lt;/strong&gt; BPF was built from day one to be strictly constrained. It guarantees that code cannot access arbitrary memory or crash the host system—vital for a validator running untrusted untrusted smart contract code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A Ready-Made LLVM Compiler Toolchain:&lt;/strong&gt; Instead of inventing a new programming language and building a compiler from scratch, Solana could leverage the massive LLVM infrastructure. This allowed developers to write smart contracts in standard &lt;strong&gt;Rust&lt;/strong&gt; or C and compile them directly down to BPF bytecode.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Turning a Packet Filter into a VM: The SVM Modifications
&lt;/h2&gt;

&lt;p&gt;You cannot just drop a standard Linux kernel packet filter onto a global ledger and call it a blockchain runtime. Solana had to modify and extend BPF into &lt;strong&gt;SBF (Solana Bytecode Format)&lt;/strong&gt; to handle the unique demands of state mutation and consensus.&lt;/p&gt;

&lt;h3&gt;
  
  
  A. Striking Out the In-Kernel Verifier Restrictions
&lt;/h3&gt;

&lt;p&gt;In the Linux kernel, the eBPF verifier is notoriously strict: loops are highly restricted, and programs must statically prove they will terminate quickly to prevent freezing the operating system kernel. &lt;/p&gt;

&lt;p&gt;Solana stripped these rigid static analysis constraints. Instead of forcing the compiler to prove a program will terminate before running, Solana introduced a &lt;strong&gt;Compute Budget&lt;/strong&gt; (gas). The VM counts instructions dynamically at runtime. If a contract loops endlessly, it simply runs out of compute units and halts.&lt;/p&gt;

&lt;h3&gt;
  
  
  B. Serialization and Zero-Copy Memory Access
&lt;/h3&gt;

&lt;p&gt;In standard BPF, data packets are passed into the program via a sequential memory buffer. In a blockchain, a smart contract needs to read and write to global state accounts. &lt;/p&gt;

&lt;p&gt;Initially, Solana used a naive serialization mechanism: when a transaction hit a contract, the runtime copied all required account data into a single, contiguous byte array, passed it to the BPF program, and copied the modified data back out to state storage. This serialization overhead was a massive performance bottleneck.&lt;/p&gt;

&lt;p&gt;To achieve true performance, the SVM utilizes &lt;strong&gt;Zero-Copy Serialization&lt;/strong&gt;. Using direct memory alignment, the SVM maps the account data layout directly into the BPF virtual machine's memory space. The Rust contract references the data directly in memory via pointers, completely avoiding expensive allocation and copying steps during execution.&lt;/p&gt;

&lt;h3&gt;
  
  
  C. JIT vs. AOT Compilation
&lt;/h3&gt;

&lt;p&gt;Interpreted virtual machines are slow because every bytecode instruction must be evaluated by software at runtime. &lt;/p&gt;

&lt;p&gt;To bypass this, Solana utilizes &lt;strong&gt;Ahead-of-Time (AOT) Compilation&lt;/strong&gt;. When a program is deployed to the cluster, validators compile the BPF bytecode directly into &lt;strong&gt;native x86 machine code&lt;/strong&gt; before it ever executes in a live block. When a transaction calls that program, the validator CPU runs native assembly instructions directly on the bare metal.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. The Ultimate Superpower: Parallel Execution via Sealevel
&lt;/h2&gt;

&lt;p&gt;The EVM is single-threaded. Because Ethereum transactions do not declare which state storage slots they will touch, the EVM must execute every transaction sequentially to avoid race conditions.&lt;/p&gt;

&lt;p&gt;Because Solana's VM is based on a low-level memory model, it requires transactions to explicitly declare a structured list of every account they intend to read or write to &lt;em&gt;before&lt;/em&gt; execution begins. This architecture is called &lt;strong&gt;Sealevel&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If Transaction A wants to transfer funds from Account 1 to Account 2, and Transaction B wants to swap tokens between Account 3 and Account 4, the Sealevel runtime looks at the accounts, recognizes there is zero overlap, and dispatches them to separate physical CPU cores simultaneously.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ Incoming Transactions ] 
         │
         ▼
[ Sealevel Static Analysis Engine ]
         │
         ├───► Tx 1 (Accounts A, B) ───► CPU Core 0 (Native BPF Execution)
         │
         └───► Tx 2 (Accounts C, D) ───► CPU Core 1 (Native BPF Execution)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By combining native BPF execution speeds with parallel CPU scheduling, Solana turns the validator's hardware into a highly parallel processing machine.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Solana's performance isn't magic; it is pragmatic systems engineering. By repurposing Linux BPF, the architects of Solana bypassed the need to optimize a custom VM interpreter and inherited decades of hardware-level optimization. &lt;/p&gt;

&lt;p&gt;As I dive further into Solana and Rust-based development, understanding how the code maps down to this low-level SBF runtime is essential for maximizing compute efficiency and writing highly optimized smart contracts. In my upcoming posts, I'll be breaking down specific Rust optimization patterns to minimize compute unit consumption within the SVM. Stay tuned.&lt;/p&gt;

</description>
      <category>solana</category>
      <category>rust</category>
      <category>blockchain</category>
      <category>bpf</category>
    </item>
    <item>
      <title>Architecting Web3 Frontends: Client State vs. Blockchain Server State</title>
      <dc:creator>Aniket Misra</dc:creator>
      <pubDate>Sun, 31 May 2026 17:41:34 +0000</pubDate>
      <link>https://dev.to/aniket_misra_e47d1564ab7b/architecting-web3-frontends-client-state-vs-blockchain-server-state-4dj</link>
      <guid>https://dev.to/aniket_misra_e47d1564ab7b/architecting-web3-frontends-client-state-vs-blockchain-server-state-4dj</guid>
      <description>&lt;p&gt;In traditional Web2 development, the line between client state and server state is well-defined. You fetch data from a REST or GraphQL API, cache it locally using tools like TanStack Query or Redux Toolkit, and push mutations back to a centralized database. &lt;/p&gt;

&lt;p&gt;In Web3, this paradigm breaks down completely. The blockchain is a global, asynchronous, distributed state machine with high latency, probabilistic finality, and variable gas costs. To make matters more complex, your app doesn't just talk to a server; it interacts with a local wallet extension (the client signer), individual RPC nodes, and decentralized indexers.&lt;/p&gt;

&lt;p&gt;If you don't cleanly decouple your &lt;strong&gt;Client State&lt;/strong&gt; from your &lt;strong&gt;Server (Chain) State&lt;/strong&gt;, your frontend will suffer from race conditions, out-of-sync UIs, and terrible user experiences. Here is how to architect the split.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Client State: Local UI and Wallet Context
&lt;/h2&gt;

&lt;p&gt;Client state is data that lives entirely within the browser memory or local storage. It is synchronous, ephemeral, and changes instantly based on user interaction. &lt;/p&gt;

&lt;p&gt;In a Web3 application, client state includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;UI Toggles:&lt;/strong&gt; Modals, themes, sidebar states, active tabs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Form Inputs:&lt;/strong&gt; Unsubmitted transaction parameters, raw token amounts entered by the user.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wallet Connection Context:&lt;/strong&gt; Is the user connected? What is their current address? What chain ID is their wallet currently set to?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Pitfall: Treating Wallet State as Immutable
&lt;/h3&gt;

&lt;p&gt;A common mistake is storing the user's wallet address in a global Redux or Zustand store and assuming it remains static. Wallets are external actors; a user can change accounts or switch networks directly within their MetaMask or Phantom extension without interacting with your dapp UI. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Architectural Rule:&lt;/strong&gt; Always treat wallet connection state as an externally managed stream of data. Use reactive hooks (like those provided by &lt;code&gt;wagmi&lt;/code&gt; or &lt;code&gt;@solana/wallet-adapter-react&lt;/code&gt;) to listen to account changes directly rather than trying to sync them manually into your local state managers.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Server State: The Blockchain and Indexers
&lt;/h2&gt;

&lt;p&gt;Server state in Web3 is the global state of the ledger. Unlike a Web2 database, you do not own it, it is not instantaneous, and reading data requires navigating distinct architectural layers.&lt;/p&gt;

&lt;p&gt;Web3 server state is split into two categories:&lt;/p&gt;

&lt;h3&gt;
  
  
  A. Core On-Chain State (The RPC Layer)
&lt;/h3&gt;

&lt;p&gt;This is raw data sitting inside smart contract storage slots (e.g., token balances, protocol parameters, AMM pool liquidity). &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Reality:&lt;/strong&gt; You fetch this via JSON-RPC calls (&lt;code&gt;eth_call&lt;/code&gt;). &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Problem:&lt;/strong&gt; It is pull-based and discrete. You only get the state at the specific block number you queried. To keep it accurate, you must constantly poll or subscribe to new block events (&lt;code&gt;eth_blockNumber&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  B. Indexer State (The Graph / Custom Indexers)
&lt;/h3&gt;

&lt;p&gt;Raw blockchain storage is optimized for execution, not querying. If you need to show a user their historical transaction logs, portfolio performance over time, or filtered NFT metadata, querying an RPC node directly is functionally impossible.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Reality:&lt;/strong&gt; You query indexed databases (GraphQL entities via The Graph, or proprietary APIs like Goldsky or Envio).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Problem:&lt;/strong&gt; Indexers introduce &lt;strong&gt;propagation lag&lt;/strong&gt;. A transaction might be confirmed on-chain in block $N$, but the indexer might not process that block until seconds later. &lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. The Synchronization Gap: Handling Async Mutations
&lt;/h2&gt;

&lt;p&gt;The true engineering challenge lies in the delta between sending a transaction (mutating server state) and the frontend reflecting that change.&lt;/p&gt;

&lt;p&gt;When a user executes a smart contract write operation, the state transitions through four distinct phases:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ 1. Client Signed ] ──► [ 2. Broadcasted (Mempool) ] ──► [ 3. Included in Block ] ──► [ 4. Indexed ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your frontend relies solely on reading on-chain state to update the UI, the user will experience a jarring delay after signing a transaction, leading them to believe the app is frozen or the action failed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architectural Strategies to Bridge the Gap
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Decouple Transaction Tracking from State Fetching
&lt;/h4&gt;

&lt;p&gt;Do not block your UI thread waiting for the transaction receipt to fetch new balances. Use explicit transaction notification systems (e.g., toast alerts tracking the transaction hash life cycle) while allowing your data-fetching hooks to handle cache invalidation independently.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Optimistic Updates
&lt;/h4&gt;

&lt;p&gt;For low-stakes interactions or fast L2s/L3s, modify the client state immediately to &lt;em&gt;assume&lt;/em&gt; success before the transaction is finalized on-chain. If the transaction reverts, roll back the client state to the previous server state snapshot.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Smart Cache Invalidation (TanStack Query + Wagmi)
&lt;/h4&gt;

&lt;p&gt;Leverage declarative queries where the query key is tied directly to the current block number or the user’s address. When a transaction succeeds, programmatically invalidate the specific cache keys to force an immediate RPC refetch.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Example pattern using wagmi &amp;amp; tanstack query&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;writeContractAsync&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useWriteContract&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;queryClient&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useQueryClient&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handleSwap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;txHash&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;writeContractAsync&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="c1"&gt;// Wait for block inclusion&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;waitForTransactionReceipt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;txHash&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="c1"&gt;// Invalidate the exact server state cache key to trigger an explicit reload&lt;/span&gt;
  &lt;span class="nx"&gt;queryClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;invalidateQueries&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;queryKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;balance&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;userAddress&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Building clean Web3 frontends requires recognizing that you do not own the backend database. Your client state must remain lean, highly reactive, and decoupled from the slow asynchronous reality of the blockchain. The server state must be treated as a delayed, eventually consistent cache that requires explicit invalidation strategies.&lt;/p&gt;

&lt;p&gt;I will be expanding on these frontend architecture choices as I document the progress of my protocol-level builds. Up next, I'll be looking into performance optimizations when managing high-frequency RPC polling vs. WebSocket subscriptions. Stay tuned.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>react</category>
      <category>architecture</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Architecting Account Abstraction: EOA vs. ERC-4337 vs. zkSync Native AA</title>
      <dc:creator>Aniket Misra</dc:creator>
      <pubDate>Sun, 24 May 2026 18:27:11 +0000</pubDate>
      <link>https://dev.to/aniket_misra_e47d1564ab7b/architecting-account-abstraction-eoa-vs-erc-4337-vs-zksync-native-aa-1m08</link>
      <guid>https://dev.to/aniket_misra_e47d1564ab7b/architecting-account-abstraction-eoa-vs-erc-4337-vs-zksync-native-aa-1m08</guid>
      <description>&lt;p&gt;The default Ethereum account model is fundamentally flawed for mass adoption. If you want to interact with a decentralized system, you are forced into a rigid cryptographic box: the Externally Owned Account (EOA). &lt;/p&gt;

&lt;p&gt;As we move toward protocol-level scaling, Account Abstraction (AA) has become the standard solution. But "Account Abstraction" is an umbrella term. The way it is architected on a standard EVM rollup like Arbitrum (via ERC-4337) is drastically different from how it is implemented on a ZK-rollup like zkSync Era (Native AA).&lt;/p&gt;

&lt;p&gt;Here is a technical breakdown of the architectural leap from EOAs to Smart Accounts, and why protocol-level enshrinement matters.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. The Legacy Architecture: EOAs
&lt;/h2&gt;

&lt;p&gt;An Externally Owned Account (EOA) is simple, but structurally limited. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Key is the Account:&lt;/strong&gt; An EOA is strictly bound to a single ECDSA secp256k1 public-private key pair. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execution:&lt;/strong&gt; EOAs cannot contain code. They are passive entities that can only initiate transactions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gas:&lt;/strong&gt; EOAs must hold the native network token (e.g., ETH) to pay for gas. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Flow:&lt;/strong&gt;&lt;br&gt;
When an EOA sends a transaction, the protocol natively checks the ECDSA signature, verifies the nonce, deducts the gas fee from the balance, and executes the call. The logic is hardcoded into the EVM consensus layer. If you lose your private key, you lose the account. There is no programmability.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. The Application-Layer Hack: ERC-4337 (EVM / Arbitrum)
&lt;/h2&gt;

&lt;p&gt;Because changing the Ethereum base layer is notoriously difficult, the community rallied behind &lt;strong&gt;ERC-4337&lt;/strong&gt;. This standard brings Account Abstraction to EVM-compatible chains (like Mainnet, Arbitrum, or Optimism) &lt;em&gt;without&lt;/em&gt; altering the consensus protocol.&lt;/p&gt;

&lt;p&gt;Instead of changing the EVM, ERC-4337 shifts the abstraction to a higher-level smart contract infrastructure. &lt;/p&gt;

&lt;h3&gt;
  
  
  The ERC-4337 Architecture
&lt;/h3&gt;

&lt;p&gt;In this model, your account is a Smart Contract, not an EOA. But since smart contracts cannot initiate their own transactions, the architecture introduces several new off-chain and on-chain actors:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;UserOperations (UserOps):&lt;/strong&gt; Instead of standard transactions, users sign &lt;code&gt;UserOperations&lt;/code&gt;—structs containing the execution instructions, signatures, and custom logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alternative Mempool:&lt;/strong&gt; UserOps do not go into the standard Ethereum mempool. They sit in a separate, specialized UserOp mempool.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bundlers:&lt;/strong&gt; Specialized nodes (Bundlers) listen to this mempool, pack multiple UserOps into a single standard Ethereum transaction, and submit them on-chain. The Bundler pays the ETH gas fee upfront.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The EntryPoint Contract:&lt;/strong&gt; The Bundler sends the batch to a singleton &lt;code&gt;EntryPoint&lt;/code&gt; smart contract. The EntryPoint is the global orchestrator; it verifies signatures, charges the Smart Accounts for the gas (refunding the Bundler), and routes the execution calls to the respective Smart Account contracts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paymasters (Optional):&lt;/strong&gt; Third-party contracts that can sponsor gas fees for users or allow users to pay in ERC-20 tokens.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;The Trade-off:&lt;/strong&gt; ERC-4337 is highly flexible, but because it is an application-layer standard, it relies on a parallel mempool and introduces significant gas overhead due to the massive &lt;code&gt;EntryPoint&lt;/code&gt; contract routing.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Protocol-Level Enshrinement: zkSync Native AA
&lt;/h2&gt;

&lt;p&gt;Unlike Arbitrum or Ethereum Mainnet, &lt;strong&gt;zkSync Era&lt;/strong&gt; was built with Native Account Abstraction enshrined directly into the protocol layer. &lt;/p&gt;

&lt;p&gt;In zkSync, there is no distinction between an EOA and a Smart Contract at the architectural level. All accounts are treated as smart contracts. &lt;/p&gt;

&lt;h3&gt;
  
  
  The zkSync Architecture
&lt;/h3&gt;

&lt;p&gt;Because AA is natively supported, zkSync eliminates the need for the clunky off-chain infrastructure required by ERC-4337.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Unified Mempool:&lt;/strong&gt; There is no separate UserOp mempool. Smart contract transactions and traditional EOA transactions live in the exact same mempool.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Bundlers:&lt;/strong&gt; Because the protocol natively understands smart contract initiated transactions, there is no need for third-party Bundlers to wrap and submit them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Bootloader (The System EntryPoint):&lt;/strong&gt; Instead of an application-layer &lt;code&gt;EntryPoint&lt;/code&gt; contract, zkSync uses the &lt;code&gt;Bootloader&lt;/code&gt;. The Bootloader is a system-level smart contract that handles block construction, transaction validation, and fee processing natively. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enshrined Paymasters:&lt;/strong&gt; Paymaster logic is built directly into the transaction processing flow, making gas sponsorship native and highly efficient.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When an EOA is used on zkSync, the protocol under the hood maps it to a default smart contract implementation that validates ECDSA signatures. If you upgrade to a custom Smart Account, the protocol simply points to your custom validation logic.&lt;/p&gt;




&lt;h2&gt;
  
  
  Architectural Comparison: ERC-4337 vs. zkSync Native AA
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;EVM / Arbitrum (ERC-4337)&lt;/th&gt;
&lt;th&gt;zkSync Era (Native AA)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Protocol Integration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Application layer (Smart Contracts)&lt;/td&gt;
&lt;td&gt;Enshrined at the Protocol level&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mempool&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Requires an alternative UserOp mempool&lt;/td&gt;
&lt;td&gt;Single, unified mempool&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Transaction Initiation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Requires third-party &lt;strong&gt;Bundlers&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Handled natively by the protocol&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gas Overhead&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High (Routing via &lt;code&gt;EntryPoint&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Low (Handled by the system &lt;code&gt;Bootloader&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;EOA Treatment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;EOAs and Smart Accounts are entirely separate&lt;/td&gt;
&lt;td&gt;EOAs are just default Smart Accounts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Building at the Protocol Level
&lt;/h2&gt;

&lt;p&gt;Understanding the difference between application-layer workarounds (ERC-4337) and protocol-layer enshrinement (zkSync) is critical when designing low-level blockchain infrastructure. Native AA offers a glimpse into what the future of Ethereum must look like to achieve true mainstream viability without sacrificing decentralization or UX.&lt;/p&gt;

&lt;p&gt;As I continue to dive deeper into protocol engineering and ZKP implementations, analyzing these architectural trade-offs is step one. I’ll be sharing more code-level deep dives into building custom validators and Paymasters soon.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>blockchain</category>
      <category>ethereum</category>
      <category>web3</category>
    </item>
    <item>
      <title>The End of Blind Signing: Deep Diving into ERC-7730, ERC-8213, and Clear Signing</title>
      <dc:creator>Aniket Misra</dc:creator>
      <pubDate>Tue, 19 May 2026 18:16:51 +0000</pubDate>
      <link>https://dev.to/aniket_misra_e47d1564ab7b/the-end-of-blind-signing-deep-diving-into-erc-7730-erc-8213-and-clear-signing-2af0</link>
      <guid>https://dev.to/aniket_misra_e47d1564ab7b/the-end-of-blind-signing-deep-diving-into-erc-7730-erc-8213-and-clear-signing-2af0</guid>
      <description>&lt;p&gt;For years, the status quo of interacting with Ethereum protocols has been a security nightmare masquerading as a routine task. You open a frontend, click "Swap" or "Stake," and your hardware wallet prompts you to sign a blob of unreadable hexadecimal data. &lt;/p&gt;

&lt;p&gt;You are blind signing. You are trusting that the frontend hasn't been compromised, that the RPC URL hasn't been poisoned, and that a malicious actor hasn't swapped out the destination address or function arguments. When the Lazarus Group drained $1.4 billion from Bybit, they didn't break cryptography; they exploited this exact UI gap. They tricked users into blind signing data that did something entirely different from what was shown on the screen.&lt;/p&gt;

&lt;p&gt;The Ethereum Foundation, alongside an industry working group (including Ledger, Cyfrin, MetaMask, and Trezor), launched &lt;strong&gt;Clear Signing&lt;/strong&gt;—a unified security standard designed to enforce the principle of &lt;strong&gt;"What You See Is What You Sign" (WYSIWYS)&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;This deep dive breaks down the technical layer of this release: &lt;strong&gt;ERC-7730&lt;/strong&gt;, &lt;strong&gt;ERC-8213&lt;/strong&gt;, and how they work together to eliminate blind signing without forcing on-chain breaking changes.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. ERC-7730: The Clear Signing Metadata Standard
&lt;/h2&gt;

&lt;p&gt;Originally proposed by Ledger and now under the stewardship of the Ethereum Foundation’s &lt;em&gt;Trillion Dollar Security Initiative&lt;/em&gt;, &lt;strong&gt;ERC-7730&lt;/strong&gt; establishes a standardized, machine-readable JSON format that describes exactly what a smart contract’s function calls and EIP-712 typed messages mean in plain text.&lt;/p&gt;

&lt;p&gt;Because this metadata lives entirely off-chain, &lt;strong&gt;it requires zero changes to existing smart contracts.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How It Works Under the Hood
&lt;/h3&gt;

&lt;p&gt;Wallets and hardware devices cannot natively store the ABIs and translation logic for millions of deployed contracts. ERC-7730 solves this by creating a highly structured schema that maps raw calldata bytes to human-readable display formats.&lt;/p&gt;

&lt;p&gt;An ERC-7730 file is broken down into three core blocks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Context:&lt;/strong&gt; Binds the descriptor to specific contract deployments across multiple EVM chain IDs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metadata:&lt;/strong&gt; Contains high-level project data (e.g., protocol name, official legal entity, canonical URLs).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Display:&lt;/strong&gt; The execution mapping logic. It dictates how function selectors and specific parameters are parsed and rendered on a wallet UI.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here is a simplified architectural look at how a descriptor file (&lt;code&gt;calldata-SwapRouter.json&lt;/code&gt;) maps execution data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"$schema"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"[https://eips.ethereum.org/assets/eip-7730/erc7730-v2.schema.json](https://eips.ethereum.org/assets/eip-7730/erc7730-v2.schema.json)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"context"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"$id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uniswap-v3-router"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"contract"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"deployments"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"chainId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"address"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0xE592427A0AEce92De3Edee1F18E0157C05861564"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"metadata"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"owner"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Uniswap Labs"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"info"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"[https://uniswap.org](https://uniswap.org)"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"contractName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SwapRouter"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"display"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"formats"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"0x415565b0"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Swap Exact Tokens for Tokens"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Swaps {amountIn} of {tokenIn} for at least {amountOutMin} of {tokenOut} via route {path}."&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The Neutral Registry and Attestation (ERC-8176)
&lt;/h3&gt;

&lt;p&gt;Metadata files are a security asset in their own right. If a malicious actor submits a fraudulent ERC-7730 file that translates a &lt;code&gt;transferFrom(all_your_tokens)&lt;/code&gt; call into a display message that says &lt;em&gt;"Claim Free Airdrop"&lt;/em&gt;, the system breaks.&lt;/p&gt;

&lt;p&gt;To prevent this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Ethereum Foundation hosts a central, open-source registry at &lt;strong&gt;Clearsigning.org&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ERC-8176&lt;/strong&gt; introduces an attestation framework built on top of the &lt;strong&gt;Ethereum Attestation Service (EAS)&lt;/strong&gt;. Independent security firms and auditors review these JSON files against verified on-chain code and cryptographically attest to their validity. Wallets can then choose which independent auditors they trust before displaying the translation to the user.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. ERC-8213: The Bytes-Level Fallback
&lt;/h2&gt;

&lt;p&gt;ERC-7730 works perfectly when a contract is known, indexed, and audited. But what happens when you are interacting with an immutable, freshly deployed contract, a highly custom gas-optimized protocol using packed encodings, or an air-gapped system where the wallet cannot fetch the latest JSON descriptor?&lt;/p&gt;

&lt;p&gt;If ERC-7730 cannot resolve the metadata, the wallet falls back to &lt;strong&gt;ERC-8213&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Authored by Cyfrin, ERC-8213 addresses a physical human vulnerability: &lt;strong&gt;eyeballing raw hex data fails.&lt;/strong&gt; Humans cannot effectively verify 500 bytes of calldata on a small hardware wallet screen without missing an altered character.&lt;/p&gt;

&lt;p&gt;Instead of displaying the entire unreadable byte string, ERC-8213 enforces that wallets calculate and display short, reproducible cryptographic fingerprints called &lt;strong&gt;Digests&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Calldata Digest Formula
&lt;/h3&gt;

&lt;p&gt;For standard transactions containing calldata, ERC-8213 specifies a strict, length-prefixed hash calculation:&lt;/p&gt;

&lt;p&gt;$$\text{calldataDigest} = \text{keccak256}(\text{uint256}(\text{len}(\text{calldata})) \mathbin{\Vert} \text{calldata})$$&lt;/p&gt;

&lt;p&gt;By prefixing the raw calldata bytes with their explicit 32-byte length representation before hashing, it eliminates length-extension vulnerabilities and provides a deterministic snapshot of the execution vector.&lt;/p&gt;

&lt;h3&gt;
  
  
  The EIP-712 Digest
&lt;/h3&gt;

&lt;p&gt;For off-chain signatures (like those used in snapshot voting, Permit2 allowances, or Safe multi-sig tracking), ERC-8213 mandates the standard exposure of the EIP-712 structured digest:&lt;/p&gt;

&lt;p&gt;$$\text{EIP712Digest} = \text{0x1901} \mathbin{\Vert} \text{domainSeparator} \mathbin{\Vert} \text{hashStruct}(\text{message})$$&lt;/p&gt;

&lt;h3&gt;
  
  
  Why This Matters for Hardware Verification
&lt;/h3&gt;

&lt;p&gt;If a frontend gets compromised via an XSS injection, the attacker will swap out the underlying transaction parameters (e.g., modifying the recipient address in the transaction payload). &lt;/p&gt;

&lt;p&gt;Because the frontend is compromised, the user's browser extension might lie about what is happening. However, the hardware wallet calculates the &lt;strong&gt;ERC-8213 Calldata Digest&lt;/strong&gt; directly from the raw bytes sent over the USB/Bluetooth line. &lt;/p&gt;

&lt;p&gt;By comparing the digest shown on the physical screen with an independent source (like a block explorer, a separate terminal tool, or local execution), the user has deterministic proof that the data was not modified in transit.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. The Clear Signing Workflow
&lt;/h2&gt;

&lt;p&gt;When an application triggers a signing event, the execution pipeline functions as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ Frontend Action ] 
        │
        ▼
[ Raw Calldata / EIP-712 Struct Generated ]
        │
        ▼
[ Wallet Interception ]
        │
        ├───► Has ERC-7730 Metadata &amp;amp; Valid ERC-8176 Attestation?
        │           │
        │           ├───► YES: Display Human-Readable UI ("Swap 1 ETH for 3,000 USDC")
        │
        └───► NO (Fallback to ERC-8213)
                    │
                    └───► Compute deterministic Keccak256 Calldata/EIP-712 Digest
                    └───► Render concise cryptographic fingerprint on screen
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Intent to Build
&lt;/h2&gt;

&lt;p&gt;Clear signing closes one of the oldest attack surfaces in the EVM ecosystem. Moving forward, security is no longer just about writing secure Solidity or Rust circuits; it includes ensuring that the execution intent matches the user's perception at the exact millisecond they hit "Sign."&lt;/p&gt;

&lt;p&gt;As I focus on building protocol-level infrastructure, implementing ERC-7730 descriptors and ensuring ERC-8213 compatibility will be core to the development lifecycle of my applications. I will be documenting my project implementations, gas considerations, and architectural patterns here in public. Stay tuned for the engineering updates.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>ethereum</category>
      <category>security</category>
      <category>web3</category>
    </item>
    <item>
      <title>0 to 1: notes to future blockchain dev self</title>
      <dc:creator>Aniket Misra</dc:creator>
      <pubDate>Sat, 25 Apr 2026 23:29:38 +0000</pubDate>
      <link>https://dev.to/aniket_misra_e47d1564ab7b/0-to-1-notes-to-future-blockchain-dev-self-4d5e</link>
      <guid>https://dev.to/aniket_misra_e47d1564ab7b/0-to-1-notes-to-future-blockchain-dev-self-4d5e</guid>
      <description>&lt;p&gt;I’m starting this blog to document my transition into protocol-level blockchain development.&lt;/p&gt;

&lt;p&gt;My upcoming work will focus exclusively on:&lt;/p&gt;

&lt;p&gt;Solidity &amp;amp; Solana: High-performance smart contract development. Often comparative and learnings to be fossilized for self.&lt;/p&gt;

&lt;p&gt;Zero-Knowledge Proofs: Research and application of ZKP systems.&lt;/p&gt;

&lt;p&gt;This will be a space for tracking progress, detailing project roadblocks, and sharing architectural notes as I build these systems in public.&lt;/p&gt;

&lt;p&gt;Though not limited to given topics, as general and adjacent webdev intrigues keep me occupied, purpose of blogging for me is to keep grounded in the field i expect to be my profession.&lt;/p&gt;

&lt;p&gt;No polish though. Just notes out of a register.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>solidity</category>
      <category>solana</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
