<?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: Matthew</title>
    <description>The latest articles on DEV Community by Matthew (@andyrobert3).</description>
    <link>https://dev.to/andyrobert3</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%2F1393329%2F51be3d28-d5c4-454b-a980-da976b6a90cf.png</url>
      <title>DEV Community: Matthew</title>
      <link>https://dev.to/andyrobert3</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/andyrobert3"/>
    <language>en</language>
    <item>
      <title>Forensic Walkthrough: Decoding the ResupplyFi Attack Contract</title>
      <dc:creator>Matthew</dc:creator>
      <pubDate>Wed, 16 Jul 2025 06:55:45 +0000</pubDate>
      <link>https://dev.to/andyrobert3/forensic-walkthrough-decoding-the-resupplyfi-attack-contract-3j86</link>
      <guid>https://dev.to/andyrobert3/forensic-walkthrough-decoding-the-resupplyfi-attack-contract-3j86</guid>
      <description>&lt;h2&gt;
  
  
  Unpack every step of the $9.8 M ResupplyFi heist by turning raw EVM selectors into human-readable calls.
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt;&lt;br&gt;
On June 27, 2025, ResupplyFi’s freshly-deployed ERC-4626 vault was drained for $9.8 M in under two hours via a “donation” exchange-rate collapse attack. The attacker donated a microscopic amount of worthless shares to crash the vault’s price, then looped through collateral deposits and drains until the vault was empty.&lt;/p&gt;

&lt;p&gt;I built a tool &lt;a href="https://github.com/andyrobert3/evm-lens" rel="noopener noreferrer"&gt;evm-lens&lt;/a&gt; that allows anyone to inspect the opcodes given arbitrary bytecode. &lt;em&gt;&lt;strong&gt;evm-lens --abi&lt;/strong&gt;&lt;/em&gt; mode decodes every PUSH4 into its function signature, so you see exactly what the attacker was calling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 0: Install evm-lens&lt;/strong&gt;&lt;br&gt;
Make sure you have &lt;a href="https://crates.io/crates/evm-lens" rel="noopener noreferrer"&gt;evm-lens&lt;/a&gt; installed with cargo &lt;code&gt;cargo install evm-lens&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Annotate the Disassembly&lt;/strong&gt;&lt;br&gt;
First, insert the attacker contract address with abi selector annotations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;evm-lens \
  --address 0x151aA63dbb7C605E7b0a173Ab7375e1450E79238 \
  --abi \
  &amp;gt; attacker_disasm.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You’ll get lines like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0013 │ PUSH4  # 0x31f57072 → onMorphoFlashLoan(uint256,bytes)
01dc │ PUSH4  # 0xe0232b42 → flashLoan(address,uint256,bytes)
02e7 │ PUSH4  # 0xa9059cbb → transfer(address,uint256)
08ad │ PUSH4  # 0xa0712d68 → mint(uint256)
0a27 │ PUSH4  # 0x60c52d05 → addCollateralVault(uint256,address)
0bf9 │ PUSH4  # 0xd6bda0c0 → borrow(uint256,uint256,address)
0da9 │ PUSH4  # 0xba087652 → redeem(uint256,address,address)
0f64 │ PUSH4  # 0x128acb08 → swap(address,bool,int256,uint160,bytes)
13ff │ PUSH4  # 0x3df02124 → exchange(int128,int128,uint256,uint256)
150a │ PUSH4  # 0xa9059cbb → transfer(address,uint256)
# …plus standard ERC-20 calls like approve(), balanceOf(), etc.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2: Extract Every Resolved Selector&lt;/strong&gt;&lt;br&gt;
Pull every line with a decoded arrow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s1"&gt;'→'&lt;/span&gt; attacker_disasm.txt | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s1"&gt;'0xffffffff'&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt;

0013 │ PUSH4  &lt;span class="c"&gt;# 0x31f57072 → onMorphoFlashLoan(uint256,bytes)&lt;/span&gt;
0029 │ PUSH4  &lt;span class="c"&gt;# 0xfa461e33 → TestBrMSja(address,address,bytes)&lt;/span&gt;
00fe │ PUSH4  &lt;span class="c"&gt;# 0x095ea7b3 → approve(address,uint256)&lt;/span&gt;
01dc │ PUSH4  &lt;span class="c"&gt;# 0xe0232b42 → flashLoan(address,uint256,bytes)&lt;/span&gt;
027b │ PUSH4  &lt;span class="c"&gt;# 0x0dfe1681 → amarettoIdealist()&lt;/span&gt;
02e7 │ PUSH4  &lt;span class="c"&gt;# 0xa9059cbb → transfer(address,uint256)&lt;/span&gt;
036c │ PUSH4  &lt;span class="c"&gt;# 0xd21220a7 → detectabilityAntiauthoritarianism()&lt;/span&gt;
03d8 │ PUSH4  &lt;span class="c"&gt;# 0xa9059cbb → transfer(address,uint256)&lt;/span&gt;
047d │ PUSH4  &lt;span class="c"&gt;# 0x70a08231 → balanceOf(address)&lt;/span&gt;
05f6 │ PUSH4  &lt;span class="c"&gt;# 0x3df02124 → exchange(int128,int128,uint256,uint256)&lt;/span&gt;
0699 │ PUSH4  &lt;span class="c"&gt;# 0xf77c4791 → controller()&lt;/span&gt;
0729 │ PUSH4  &lt;span class="c"&gt;# 0xa9059cbb → transfer(address,uint256)&lt;/span&gt;
08ad │ PUSH4  &lt;span class="c"&gt;# 0xa0712d68 → mint(uint256)&lt;/span&gt;
0a27 │ PUSH4  &lt;span class="c"&gt;# 0x60c52d05 → addCollateralVault(uint256,address)&lt;/span&gt;
0ab1 │ PUSH4  &lt;span class="c"&gt;# 0x13966db5 → mintFee()&lt;/span&gt;
0b41 │ PUSH4  &lt;span class="c"&gt;# 0x93ae0df9 → totalDebtAvailable()&lt;/span&gt;
0bf9 │ PUSH4  &lt;span class="c"&gt;# 0xd6bda0c0 → borrow(uint256,uint256,address)&lt;/span&gt;
0d0e │ PUSH4  &lt;span class="c"&gt;# 0x70a08231 → balanceOf(address)&lt;/span&gt;
0da9 │ PUSH4  &lt;span class="c"&gt;# 0xba087652 → redeem(uint256,address,address)&lt;/span&gt;
0ebf │ PUSH4  &lt;span class="c"&gt;# 0x70a08231 → balanceOf(address)&lt;/span&gt;
0f64 │ PUSH4  &lt;span class="c"&gt;# 0x128acb08 → swap(address,bool,int256,uint160,bytes)&lt;/span&gt;
10ad │ PUSH4  &lt;span class="c"&gt;# 0x70a08231 → balanceOf(address)&lt;/span&gt;
1150 │ PUSH4  &lt;span class="c"&gt;# 0x2e1a7d4d → OwnerTransferV7b711143(uint256)&lt;/span&gt;
12e9 │ PUSH4  &lt;span class="c"&gt;# 0x70a08231 → balanceOf(address)&lt;/span&gt;
1363 │ PUSH4  &lt;span class="c"&gt;# 0x095ea7b3 → approve(address,uint256)&lt;/span&gt;
13ff │ PUSH4  &lt;span class="c"&gt;# 0x3df02124 → exchange(int128,int128,uint256,uint256)&lt;/span&gt;
1488 │ PUSH4  &lt;span class="c"&gt;# 0x70a08231 → balanceOf(address)&lt;/span&gt;
150a │ PUSH4  &lt;span class="c"&gt;# 0xa9059cbb → transfer(address,uint256)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That single command reveals every selector + signature the attacker invoked; no manual whitelisting needed&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Walk Through the Exploit Flow&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flash-loan &amp;amp; callback
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0013 │ PUSH4  # 0x31f57072 → onMorphoFlashLoan(uint256,bytes)
01dc │ PUSH4  # 0xe0232b42 → flashLoan(address,uint256,bytes)
# Attacker triggers a Morpho flash-loan, then enters the onMorphoFlashLoan callback.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Deposit worthless shares
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;08ad │ PUSH4  # 0xa0712d68 → mint(uint256)
0a27 │ PUSH4  # 0x60c52d05 → addCollateralVault(uint256,address)
0ab1 │ PUSH4  # 0x13966db5 → mintFee()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;They mint a tiny amount of vault shares, crashing the exchange rate, then collateralize.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Drain &amp;amp; swap assets
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;02e7 │ PUSH4  # 0xa9059cbb → transfer(address,uint256)
0da9 │ PUSH4  # 0xba087652 → redeem(uint256,address,address)
0f64 │ PUSH4  # 0x128acb08 → swap(address,bool,int256,uint160,bytes)
13ff │ PUSH4  # 0x3df02124 → exchange(int128,int128,uint256,uint256)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;They transfer out tokens, redeem more shares, then swap/exchange leftovers; looping until the vault is empty.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why This Matters&lt;/strong&gt;&lt;br&gt;
One tool, one command: full disassembly + selector decoding in a single pass.&lt;/p&gt;

&lt;p&gt;Immediate clarity: decoded calls (flashLoan, addCollateralVault, redeem, etc.) highlight dangerous operations instantly.&lt;/p&gt;

&lt;p&gt;Reproducibility: anyone can rerun this on any attacker contract and see exactly what happened.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is next?&lt;/strong&gt;&lt;br&gt;
storage-diff (v0.3) is coming: automatically derive storage layouts, detect slot collisions, and generate auditor friendly HTML reports to pair with selector decoding—catch both function and storage-level risks in one tool.&lt;/p&gt;

&lt;p&gt;With evm-lens v0.2, raw bytecode is no longer a black box—and v0.3 will make it even safer. 🚀&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggestions&lt;/strong&gt;&lt;br&gt;
If you have any suggestions feel free to comment down below, I promise to read every single comment :)&lt;/p&gt;

</description>
      <category>web3</category>
      <category>solidity</category>
      <category>security</category>
    </item>
    <item>
      <title>evm-lens: Instant, Local EVM CLI Bytecode Disassembly</title>
      <dc:creator>Matthew</dc:creator>
      <pubDate>Wed, 18 Jun 2025 17:48:57 +0000</pubDate>
      <link>https://dev.to/andyrobert3/evm-lens-instant-local-evm-cli-bytecode-disassembly-16jl</link>
      <guid>https://dev.to/andyrobert3/evm-lens-instant-local-evm-cli-bytecode-disassembly-16jl</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;“Understanding what the EVM is &lt;strong&gt;actually&lt;/strong&gt; doing is the first step toward optimizing your gas usage.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’m thrilled to announce &lt;strong&gt;evm-lens v0.1.1&lt;/strong&gt;, a lean, lightning-fast CLI and library that transforms raw EVM bytecode into a readable, color-coded opcode listing—all on your machine, in milliseconds.&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%2F74ilpl33j6vzxpn1igaf.gif" 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%2F74ilpl33j6vzxpn1igaf.gif" alt="Demo" width="800" height="593"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;v0.1.1&lt;/strong&gt; adds:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;STDIN loader&lt;/strong&gt; (&lt;code&gt;--stdin&lt;/code&gt;) – pipe in hex from any source
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On-chain loader&lt;/strong&gt; (&lt;code&gt;--address&lt;/code&gt;) – fetch code via &lt;code&gt;eth_getCode&lt;/code&gt; &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Works with &lt;code&gt;.bin&lt;/code&gt; files, raw hex, or live contracts
&lt;/li&gt;

&lt;li&gt;Pure Rust, zero external dependencies beyond &lt;a href="https://crates.io/crates/revm" rel="noopener noreferrer"&gt;&lt;code&gt;revm&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;

&lt;li&gt;✅ Fully tested, CI-friendly, no SaaS lock-in
&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cargo &lt;span class="nb"&gt;install &lt;/span&gt;evm-lens
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔍 The Pain Point
&lt;/h2&gt;

&lt;p&gt;Smart-contract auditors, MEV researchers, and tooling engineers spend too much time:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Copy-pasting hex into online disassemblers (often rate-limited or incomplete)
&lt;/li&gt;
&lt;li&gt;Writing brittle scripts (&lt;code&gt;curl | jq | sed&lt;/code&gt;) to fetch on-chain code
&lt;/li&gt;
&lt;li&gt;Context-switching between terminal, browser, and local files
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By the time you’ve wrangled inputs, the actual opcode analysis feels like an afterthought.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔧 How evm-lens Helps
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Instant, Local Disassembly
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;evm-lens &lt;span class="nt"&gt;--file&lt;/span&gt; MyToken.bin | less &lt;span class="nt"&gt;-R&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In under 10 ms, you get a &lt;strong&gt;line-numbered, color-coded&lt;/strong&gt; opcode dump—no network round-trips, no web UI.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Flexible Input Sources
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Direct Hex&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  evm-lens 60FF61ABCD00
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;File&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  evm-lens &lt;span class="nt"&gt;--file&lt;/span&gt; path/to/Token.bin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Standard Input&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"0x60FF61ABCD00"&lt;/span&gt; | evm-lens &lt;span class="nt"&gt;--stdin&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Blockchain Input&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  evm-lens &lt;span class="nt"&gt;--address&lt;/span&gt; 0xAbC… &lt;span class="nt"&gt;--rpc&lt;/span&gt; https://eth.llamarpc.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  👥 Who Should Care
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Security Auditors &amp;amp; Researchers&lt;/strong&gt;
Integrate evm-lens into your CI pipeline for reliable, local bytecode snapshots.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gas Optimizers&lt;/strong&gt;
Track opcode counts and static gas to measure PR impact instantly.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tooling Authors&lt;/strong&gt;
Import &lt;a href="https://github.com/andyrobert3/evm-lens/tree/main/evm-lens-core" rel="noopener noreferrer"&gt;&lt;code&gt;evm-lens-core&lt;/code&gt;&lt;/a&gt; into your Rust projects and build on a battle-tested foundation.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔮 What’s Next
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Release&lt;/th&gt;
&lt;th&gt;Highlight&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;v0.2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;--abi&lt;/code&gt; flag: resolve 4byte selectors &amp;amp; annotate &lt;code&gt;CALL&lt;/code&gt; opcodes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;v0.3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;storage-diff&lt;/code&gt; subcommand: slot layouts, collision grading, HTML&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;v0.4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;gas-flame&lt;/strong&gt;: offline SVG/CSV flamegraphs for gas hot-spot analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;v0.5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;tracing&lt;/strong&gt;: trace live blockchain transactions locally - similar to Tenderly&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  📥 Get Started
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install or upgrade&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   cargo &lt;span class="nb"&gt;install &lt;/span&gt;evm-lens
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Run the CLI&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="c"&gt;# Direct hex input&lt;/span&gt;
   evm-lens 60FF61ABCD00

   &lt;span class="c"&gt;# From file&lt;/span&gt;
   evm-lens &lt;span class="nt"&gt;--file&lt;/span&gt; path/to/Token.bin

   &lt;span class="c"&gt;# From stdin&lt;/span&gt;
   &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"0x60FF61ABCD00"&lt;/span&gt; | evm-lens &lt;span class="nt"&gt;--stdin&lt;/span&gt;

   &lt;span class="c"&gt;# On-chain&lt;/span&gt;
   evm-lens &lt;span class="nt"&gt;--address&lt;/span&gt; 0xAbC… &lt;span class="nt"&gt;--rpc&lt;/span&gt; https://eth.llamarpc.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Explore the library&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;   &lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;lens_core&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;disassemble&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;bytecode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"60FF61ABCD00"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;ops&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;disassemble&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;bytecode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;position&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;opcode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;ops&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{:04x}: {:?}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;position&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;opcode&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;p&gt;Find the repo, file issues, and leave a star:&lt;br&gt;&lt;br&gt;
👉 &lt;a href="https://github.com/andyrobert3/evm-lens" rel="noopener noreferrer"&gt;https://github.com/andyrobert3/evm-lens&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Thanks for reading! Your feedback drives this project—drop issues, PRs, or comments in Discussions. Let’s make EVM bytecode transparent and accessible to everyone.&lt;/p&gt;

</description>
      <category>evm</category>
      <category>rust</category>
      <category>cli</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
