<?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: Jerome Barton</title>
    <description>The latest articles on DEV Community by Jerome Barton (@jerome_barton).</description>
    <link>https://dev.to/jerome_barton</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%2F4098893%2F5f9c2c3f-7f74-471a-8330-6f04bce4241c.png</url>
      <title>DEV Community: Jerome Barton</title>
      <link>https://dev.to/jerome_barton</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jerome_barton"/>
    <language>en</language>
    <item>
      <title>How Block Explorers Reconstruct Transaction Histories</title>
      <dc:creator>Jerome Barton</dc:creator>
      <pubDate>Wed, 09 Sep 2026 15:12:28 +0000</pubDate>
      <link>https://dev.to/jerome_barton/how-block-explorers-reconstruct-transaction-histories-947</link>
      <guid>https://dev.to/jerome_barton/how-block-explorers-reconstruct-transaction-histories-947</guid>
      <description>&lt;p&gt;Block explorers reconstruct transaction histories by indexing blocks, receipts, logs, and execution traces, then decoding those records into address- and protocol-level events.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a transaction history has to be rebuilt
&lt;/h2&gt;

&lt;p&gt;An Ethereum Network node can answer questions about a transaction hash, block, receipt, or log filter, but it does not provide a canonical “show me every transaction involving this address” query. An explorer therefore walks through blocks, stores the results in searchable tables, and adds meaning afterward.&lt;/p&gt;

&lt;p&gt;The transaction supplies the sender, recipient, calldata, value, nonce, and position. Its receipt supplies the execution status, gas used, block placement, and logs that survived execution. A history page is an indexed interpretation of those pieces, not a record stored on-chain as a ready-made timeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Way one: index transactions and event logs
&lt;/h2&gt;

&lt;p&gt;The efficient method is to scan ordinary transactions and receipts, then use emitted events as the explorer’s main evidence.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Store each block, transaction, and receipt with its block hash and transaction index.&lt;/li&gt;
&lt;li&gt;Read receipt logs in execution order and filter them by contract address and topics.&lt;/li&gt;
&lt;li&gt;Decode calldata and event data with the relevant contract ABI, turning hexadecimal values into token transfers, approvals, swaps, or governance actions.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This works especially well for ERC-20 activity. A &lt;em&gt;Transfer&lt;/em&gt; event identifies the token contract, sender, recipient, and amount; indexed parameters become searchable topics, while the remaining values sit in ABI-encoded data. The explorer can then attach token symbols and decimals from contract metadata.&lt;/p&gt;

&lt;p&gt;The limitation is equally important: a log records what a contract deliberately emitted, not every operation the EVM performed. A native ETH transfer may produce no event. A non-standard token may omit the expected event. Logs created inside a reverted call disappear with that call. A router transaction can therefore contain a useful sequence of token movements while still hiding the exact call path that produced them.&lt;/p&gt;

&lt;p&gt;That is why a Frax Swap transaction can appear as several token movements rather than one simple “swap” row.&lt;/p&gt;

&lt;p&gt;The same decoding pattern applies when examining &lt;a href="https://note.com/crypto_explore/n/n57461da43bcf" rel="noopener noreferrer"&gt;Frax Swap&lt;/a&gt; activity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Way two: trace the execution
&lt;/h2&gt;

&lt;p&gt;Tracing reconstructs the call tree by replaying a transaction through an execution client. Instead of relying only on emitted events, the explorer asks which contract called which other contract, with what value, gas, calldata, and result.&lt;/p&gt;

&lt;p&gt;A trace can expose a router calling a pool, the pool calling a token contract, and a nested call failing before the outer transaction reports failure. It can also reveal native-value transfers that have no ERC-20-style event. This makes traces valuable for internal transactions, contract creation, proxy routing, and debugging an apparent mismatch between balances and logs.&lt;/p&gt;

&lt;p&gt;Tracing costs more than log indexing. It requires tracing support from the node and, for old transactions, access to the historical state needed to replay them. Providers may prune that state, restrict trace methods, or return different shapes depending on client and configuration. Trace output is reconstructed execution data; the block, transaction, receipt, and logs remain the primary consensus records.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where the line falls
&lt;/h3&gt;

&lt;p&gt;Use logs when the question is “which assets or protocol events were recorded?” Use traces when the question is “what call sequence caused this result?”&lt;/p&gt;

&lt;p&gt;For an Automated Market Maker, logs usually give the cleanest user-facing answer: tokens in, tokens out, pool address, and amounts. A Balancer Protocol transaction, for example, may pass through a Vault and several pool balances; the logs can summarize those movements, while a trace explains the nested route and any intermediate calls.&lt;/p&gt;

&lt;p&gt;The two methods are complementary, but they are not interchangeable. A log-only explorer is fast and scalable, yet can miss silent native transfers and unusual contracts. A trace-first explorer is richer, yet slower, more expensive, and dependent on historical replay.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to build on
&lt;/h2&gt;

&lt;p&gt;A reliable indexer keeps both layers. Use transactions, receipts, and logs for the canonical searchable history; add traces when the event record cannot answer the user’s question. Key records by chain ID, block hash, transaction index, and log index rather than timestamp alone. Decode with the ABI valid for that contract at that block, and rescan a small range when a chain reorganization replaces blocks.&lt;/p&gt;

&lt;p&gt;The practical verdict is simple: logs tell you what contracts announced, while traces tell you how execution got there. A block explorer reconstructs trustworthy histories by knowing which of those two answers the application actually needs.&amp;lt;/&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>crypto</category>
      <category>ethereum</category>
    </item>
    <item>
      <title>How Wallets Display Assets From Other Networks</title>
      <dc:creator>Jerome Barton</dc:creator>
      <pubDate>Tue, 08 Sep 2026 12:26:06 +0000</pubDate>
      <link>https://dev.to/jerome_barton/how-wallets-display-assets-from-other-networks-1m6n</link>
      <guid>https://dev.to/jerome_barton/how-wallets-display-assets-from-other-networks-1m6n</guid>
      <description>&lt;p&gt;A wallet displays assets from another network by querying that network’s blockchain and matching the result to token metadata; it does not move the assets into the wallet’s current network.&lt;/p&gt;

&lt;p&gt;That distinction matters as soon as a bridge transaction finishes on one side but the new token is missing from the screen. The asset may already exist on the destination chain while the wallet is still looking at the source chain, an unsupported RPC endpoint, or the wrong token contract.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the wallet is actually reading
&lt;/h2&gt;

&lt;p&gt;On EVM networks, an account is usually represented by the same hexadecimal address on several chains, but each chain keeps separate balances and contract state. The balance at an address on Ethereum is not the balance at that address on Arbitrum One. A wallet has to ask each network independently.&lt;/p&gt;

&lt;p&gt;It does this through an RPC endpoint. For a native coin, the wallet can request the address balance directly. For an ERC-20 token, it calls the token contract’s &lt;em&gt;balanceOf&lt;/em&gt; function for that address. It may then call functions such as &lt;em&gt;symbol&lt;/em&gt;, &lt;em&gt;name&lt;/em&gt;, and &lt;em&gt;decimals&lt;/em&gt;, or obtain that information from a token registry. NFT balances are often supplied through an indexing service because checking every token contract one by one would be too slow for a normal portfolio screen.&lt;/p&gt;

&lt;p&gt;The wallet therefore needs three pieces to show an asset correctly: the network, the contract address, and readable metadata. The ticker symbol is not enough. “USDC” on one network can be a different contract from “USDC” on another, and a malicious token can copy a well-known name and logo. The contract address, tied to the chain ID, is the useful identity.&lt;/p&gt;

&lt;p&gt;Many modern wallets query several supported networks in the background and combine the results into a portfolio view. Others show only the currently selected network. The network selector is a filter on the data being read, not a switch that transfers ownership or consolidates balances.&lt;/p&gt;

&lt;p&gt;Outside the EVM world, the same idea becomes less interchangeable. A Solana account and an EVM account use different address formats, transaction models, and token standards. A wallet can present them in one app, but it still uses chain-specific account information and RPC methods underneath. WalletConnect Protocol also keeps chains explicit: a dapp connection approves particular namespaces, accounts, methods, and chains. Connecting a wallet does not give the dapp a universal view of every balance or authorize transactions on every network.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a bridged asset can seem to disappear
&lt;/h2&gt;

&lt;p&gt;A bridge normally involves two separate state changes. On the source network, tokens may be locked in a bridge contract or burned. A message, proof, or validator decision then allows the destination side to release or mint a representation of those tokens. The wallet cannot display the destination balance until the destination transaction has executed and the wallet’s RPC or indexer can see it.&lt;/p&gt;

&lt;p&gt;This creates several ordinary waiting points. The source transaction may be confirmed while the bridge message is still being processed. The destination transaction may be complete while the portfolio indexer has not refreshed. Or the wallet may be showing Ethereum when the newly minted representation is on Arbitrum One.&lt;/p&gt;

&lt;p&gt;Before assuming that funds are lost, check the transaction on the relevant explorers and verify the destination chain. If the destination transaction succeeded but the token is absent, importing the token by its verified contract address can make it visible. Importing a token changes the wallet’s display list; it does not create a balance, alter the contract, or recover funds sent to another address.&lt;/p&gt;

&lt;p&gt;An EVM address can also receive tokens on a network the wallet does not currently support. The private key may still control that address, but the app has no approved network configuration or reliable data source with which to show it. Adding an arbitrary RPC can make the balance readable, but it also means trusting that RPC and checking that the chain ID and token contract are correct.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Network:&lt;/strong&gt; confirm the chain name and chain ID, not just the wallet account.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contract:&lt;/strong&gt; compare the token address with the bridge’s official destination contract.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transaction:&lt;/strong&gt; distinguish source confirmation from destination execution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gas:&lt;/strong&gt; keep some of the destination network’s native asset for later transfers or approvals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Representation:&lt;/strong&gt; check whether the token is canonical, wrapped, or a bridge-issued version.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Display is not the same as usability
&lt;/h2&gt;

&lt;p&gt;A visible balance proves that the wallet can read a token on a particular chain. It does not prove that a dapp supports that chain, that the token has usable liquidity, or that the asset can be sent without paying destination gas. A bridge-issued token can be perfectly real and still trade poorly if few pools or market makers support it.&lt;/p&gt;

&lt;p&gt;This is where the cost of a bridge becomes practical rather than theoretical. The user may pay source gas, a bridge fee, destination gas, and sometimes a swap fee. The larger cost is often attention: selecting the correct chain, checking the contract, waiting for finality, and approving a token contract before a later transaction can use it.&lt;/p&gt;

&lt;p&gt;Before multi-network portfolio views, the routine was more manual: open a block explorer for each chain, switch the wallet network, paste the token contract into the import dialog, and keep separate notes about which representation was held where. Aggregated wallet screens remove much of that friction, but they can also hide the chain boundary that still governs every transaction.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do after the asset appears
&lt;/h2&gt;

&lt;p&gt;Once the destination balance is visible, decide whether the next action is a transfer, a swap, or another bridge. A swap changes the token; a bridge changes the network on which the token is represented. Some products combine both operations, but the transaction still has distinct source and destination details.&lt;/p&gt;

&lt;p&gt;Uniswap Protocol, for example, can provide liquidity and routing on a supported chain, but a swap there is not automatically a bridge to another network. A quote from Paraswap is useful only when its source chain, destination chain, token contracts, amount, and required gas asset match what the wallet is displaying.&lt;/p&gt;

&lt;p&gt;For the actual swap, use &lt;a href="https://paragraph.com/@brugmanmandie@gmail.com/how-paraswap-uses-liquidity-pools-across-chains" rel="noopener noreferrer"&gt;Paraswap for the transaction&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
