<?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>Forem: obiwale ayomide</title>
    <description>The latest articles on Forem by obiwale ayomide (@obiwale_ayomide_cdcf8b961).</description>
    <link>https://forem.com/obiwale_ayomide_cdcf8b961</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%2F3654336%2Fd0c09b10-f874-4618-83e8-183aad940c78.png</url>
      <title>Forem: obiwale ayomide</title>
      <link>https://forem.com/obiwale_ayomide_cdcf8b961</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/obiwale_ayomide_cdcf8b961"/>
    <language>en</language>
    <item>
      <title>Delivery vs Payment (DvP): How CRE Solves the Hardest Problem in Finance</title>
      <dc:creator>obiwale ayomide</dc:creator>
      <pubDate>Tue, 17 Mar 2026 16:12:28 +0000</pubDate>
      <link>https://forem.com/obiwale_ayomide_cdcf8b961/delivery-vs-payment-dvp-how-cre-solves-the-hardest-problem-in-finance-5586</link>
      <guid>https://forem.com/obiwale_ayomide_cdcf8b961/delivery-vs-payment-dvp-how-cre-solves-the-hardest-problem-in-finance-5586</guid>
      <description>&lt;p&gt;Recently, I wrote about&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://dev.to/obiwale_ayomide_cdcf8b961/cre-the-missing-coordination-layer-between-traditional-banking-and-blockchain-2ecj"&gt;CRE: The Missing Coordination Layer Between Traditional Banking and Blockchain&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It's time to go deeper because coordination alone isn’t enough. The real problem has always been settlement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem: Settlement Risk&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At the core of every financial transaction is a simple requirement:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When one party delivers an asset, the other must pay.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is known as Delivery vs Payment (DvP).&lt;br&gt;
&lt;code&gt;Asset transfer ↔ Payment transfer&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Both must happen together or not at all. If they don’t, one party takes on risk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why DvP Breaks in Modern Systems&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;DvP works well inside a single system. But today’s financial world is fragmented across:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Banks&lt;/li&gt;
&lt;li&gt;Blockchains&lt;/li&gt;
&lt;li&gt;Custodians&lt;/li&gt;
&lt;li&gt;Payment networks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now consider this:&lt;br&gt;
&lt;code&gt;Asset → Exists on a blockchain  &lt;br&gt;
Payment → Exists in a bank ledger&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;Two completely different systems.&lt;/p&gt;

&lt;p&gt;The real question becomes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How do you guarantee both sides settle atomically across systems that don’t trust each other?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Before CRE: The Workarounds&lt;/strong&gt;&lt;br&gt;
The industry had previously resorted to the following before the emergence of solutions such as Chainlink Runtime Environment (CRE):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Intermediaries: Dependent on intermediaries such as clearing houses and custodians to facilitate trust between two parties&lt;/li&gt;
&lt;li&gt; Time Delays: Time periods such as T+2 reduce risks&lt;/li&gt;
&lt;li&gt; Manual Reconciliation: Systems reconcile transactions after the fact.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of these introduce:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Counterparty risk&lt;/li&gt;
&lt;li&gt;Operational complexity&lt;/li&gt;
&lt;li&gt;Capital inefficiency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why Blockchains Didn’t Fully Solve This&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Blockchains introduced atomic settlement, but only within their own environment and it works perfectly. &lt;br&gt;
&lt;code&gt;Token A ↔ Token B (same chain)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;But:&lt;br&gt;
&lt;code&gt;Token (on-chain) ↔ Cash (in a bank)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This is broken because blockchains cannot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Access bank systems&lt;/li&gt;
&lt;li&gt;Trigger external payments&lt;/li&gt;
&lt;li&gt;Guarantee off-chain execution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Enter CRE: A New Settlement Primitive&lt;/strong&gt;&lt;br&gt;
Chainlink Runtime Environment (CRE) introduces:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Programmable, verifiable workflows across on-chain and off-chain systems&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of forcing everything onto one chain, CRE connects:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Smart contracts → Chainlink Runtime Environment → External systems (banks, APIs, other chains)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This approach enables a cross-system atomic settlement&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Real Example: Cross-System DvP in Action&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Recently,&lt;br&gt;
&lt;a href="https:chain.link" rel="noopener noreferrer"&gt;Chainlink&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://www.jpmorganchase.com/" rel="noopener noreferrer"&gt;JPMorgan Chase&lt;/a&gt; (via Kinexys), and&lt;br&gt;
&lt;a href="https://ondo.finance/" rel="noopener noreferrer"&gt;Ondo Finance&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;executed a cross-chain &lt;strong&gt;Delivery vs Payment transaction&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is one of the clearest real-world examples of CRE in action.&lt;/p&gt;

&lt;p&gt;What Was Being Traded&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Asset: Tokenized U.S. Treasuries (OUSG)&lt;/li&gt;
&lt;li&gt;Payment: Bank deposit on Kinexys&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Where each part lived:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Ondo Chain → Asset layer&lt;br&gt;&lt;br&gt;
Kinexys → Bank payment layer&lt;br&gt;&lt;br&gt;
CRE → Coordination + execution layer&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Step-by-Step: How the Transaction Happened&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Step 1: The Intent&lt;br&gt;
A participant wants to buy tokenized U.S. Treasuries (OUSG).&lt;/p&gt;

&lt;p&gt;But:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The asset is on a blockchain&lt;/li&gt;
&lt;li&gt;The money is in a bank&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step 2: The Risk&lt;br&gt;
Without coordination:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Send money first → risk losing funds&lt;br&gt;&lt;br&gt;
Receive asset first → risk not getting paid &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In the absence of atomic settlement, there are many hidden but critical risks that may affect the transaction. When one side of a transaction is executed before the other, a party may have fulfilled their side of the transaction but may not receive anything in return. This is referred to as principal risk. Even if both parties are willing to settle, there may be timing risks due to changes in market conditions or system and participant behavior.&lt;/p&gt;

&lt;p&gt;Step 3: CRE Coordinates the Transaction&lt;br&gt;
Instead of trusting either side, both systems are connected through Chainlink Runtime Environment (CRE)&lt;/p&gt;

&lt;p&gt;Step 4: Conditional Logic Is Enforced&lt;br&gt;
CRE defines the rules:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;IF payment succeeds → release asset&lt;br&gt;&lt;br&gt;
IF asset transfer succeeds → finalize payment&lt;br&gt;&lt;br&gt;
ELSE → abort everything&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The transaction reverts if any of the conditions fail. This is the beauty of atomic transactions.&lt;/p&gt;

&lt;p&gt;Step 5: Parallel Execution&lt;br&gt;
Both systems are triggered simultaneously:&lt;/p&gt;

&lt;p&gt;On Ondo Chain:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Prepare transfer of OUSG tokens&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;On Kinexys:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Prepare transfer of bank deposit&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Step 6: Verification and Consensus&lt;br&gt;
CRE nodes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Monitor both sides&lt;/li&gt;
&lt;li&gt;Verify execution results&lt;/li&gt;
&lt;li&gt;Reach consensus&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step 7: Atomic Settlement&lt;/p&gt;

&lt;p&gt;Only when both sides are confirmed:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;OUSG tokens → transferred&lt;br&gt;&lt;br&gt;
USD deposit → transferred  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If anything fails:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Everything is rolled back &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is more than just a successful transaction, it introduces a new financial primitive:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Cross-System Atomicity&lt;br&gt;
DvP is no longer limited to a single ledger.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Trust-Minimized settlement as trust would only be on protocol.&lt;br&gt;
No need to trust:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The counterparty&lt;/li&gt;
&lt;li&gt;The bank&lt;/li&gt;
&lt;li&gt;The blockchain&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Real-World Asset enablement as Tokenized assets can now settle against:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bank deposits&lt;/li&gt;
&lt;li&gt;Stablecoins&lt;/li&gt;
&lt;li&gt;Future CBDCs&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For years, blockchain technology has claimed the promise of "Faster, cheaper, trustless settlement." However, until the problem of cross-system DvP is resolved, the promise is incomplete. Now, with the introduction of CRE, the settlement is not only happening on a particular blockchain but across the entire financial system.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>discuss</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>CRE: The Missing Coordination Layer Between Traditional Banking and Blockchain</title>
      <dc:creator>obiwale ayomide</dc:creator>
      <pubDate>Thu, 05 Mar 2026 00:45:03 +0000</pubDate>
      <link>https://forem.com/obiwale_ayomide_cdcf8b961/cre-the-missing-coordination-layer-between-traditional-banking-and-blockchain-2ecj</link>
      <guid>https://forem.com/obiwale_ayomide_cdcf8b961/cre-the-missing-coordination-layer-between-traditional-banking-and-blockchain-2ecj</guid>
      <description>&lt;p&gt;For years, traditional banking and blockchain have operated in parallel universes.&lt;/p&gt;

&lt;p&gt;Traditional banking runs on structured messaging systems using ISO 20022.&lt;br&gt;
Blockchain runs on smart contracts using decentralized consensus.&lt;br&gt;
Both move money.&lt;br&gt;
Both need trust.&lt;br&gt;
But neither talks to the other.&lt;/p&gt;

&lt;p&gt;CRE (Chainlink Runtime Environment) changes this balance of power.&lt;/p&gt;

&lt;p&gt;CRE is not a blockchain.&lt;br&gt;
It is not a bank.&lt;br&gt;
It is a coordination layer — a programmable execution environment powered by decentralized oracle networks that enables secure communication between off-chain financial systems and on-chain smart contracts.&lt;/p&gt;

&lt;p&gt;CRE doesn’t replace banking.&lt;br&gt;
CRE doesn’t replace blockchain.&lt;br&gt;
CRE makes it possible for the two to coordinate with each other.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Real Problem: Coordination, Not Technology
&lt;/h3&gt;

&lt;p&gt;Traditional finance is a workflow-based business.&lt;/p&gt;

&lt;p&gt;Every single financial transaction in a bank, from a wire transfer to a securities settlement, is a process that follows a specific operational flow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instruction received&lt;/li&gt;
&lt;li&gt;Compliance check&lt;/li&gt;
&lt;li&gt;Message formatted (ISO 20022)&lt;/li&gt;
&lt;li&gt;Routed to counterparties&lt;/li&gt;
&lt;li&gt;Ledger updated&lt;/li&gt;
&lt;li&gt;Audit trail created&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Blockchain is an event-based system.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smart contract executes&lt;/li&gt;
&lt;li&gt;Token is transferred&lt;/li&gt;
&lt;li&gt;Event is emitted&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, that event does not automatically trigger a set of compliance checks in a bank.&lt;br&gt;
The event does not automatically generate an ISO 20022 message.&lt;br&gt;
The event does not automatically update an institutional ledger.&lt;/p&gt;

&lt;p&gt;In traditional systems, bridging these two systems together required:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Middleware servers&lt;/li&gt;
&lt;li&gt;Reconciliation&lt;/li&gt;
&lt;li&gt;Batch processing&lt;/li&gt;
&lt;li&gt;Fragile APIs&lt;/li&gt;
&lt;li&gt;Centralized relayers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CRE brings something new to the table: workflows.&lt;/p&gt;

&lt;p&gt;Let's consider the example of an international wire transfer.&lt;/p&gt;

&lt;p&gt;From the customer's perspective:&lt;br&gt;
We enter the details, hit send, and the funds arrive.&lt;/p&gt;

&lt;p&gt;Behind the scenes:&lt;/p&gt;

&lt;p&gt;The bank authenticates the user's identity.&lt;/p&gt;

&lt;p&gt;The transaction is checked for sanctions.&lt;/p&gt;

&lt;p&gt;An ISO 20022 message is created.&lt;/p&gt;

&lt;p&gt;The correspondent banks work together to settle the transaction.&lt;/p&gt;

&lt;p&gt;The ledgers are updated.&lt;/p&gt;

&lt;p&gt;The confirmation messages are sent back.&lt;/p&gt;

&lt;p&gt;The audit trails are stored.&lt;/p&gt;

&lt;p&gt;This is not a single operation.&lt;br&gt;
This is a whole workflow, happening across different systems.&lt;/p&gt;

&lt;p&gt;Let's consider replacing one of the banks in the entire workflow with a blockchain network.&lt;/p&gt;

&lt;p&gt;Without CRE:&lt;/p&gt;

&lt;p&gt;The blockchain can't interpret the ISO 20022 messages.&lt;/p&gt;

&lt;p&gt;The bank can't interpret the smart contract events.&lt;/p&gt;

&lt;p&gt;We need to implement a custom backend to translate between the two systems.&lt;/p&gt;

&lt;p&gt;With CRE:&lt;/p&gt;

&lt;p&gt;A banking message can trigger an on-chain event.&lt;/p&gt;

&lt;p&gt;An on-chain event can trigger the automatic generation of an ISO 20022 message.&lt;/p&gt;

&lt;p&gt;Compliance can be integrated into the workflow.&lt;/p&gt;

&lt;p&gt;Reporting can happen in real-time.&lt;/p&gt;

&lt;p&gt;The user experience remains the same.&lt;br&gt;
But in the background, the blockchain has been integrated into the same workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Major Banks Are Exploring This
&lt;/h3&gt;

&lt;p&gt;Institutions like JPMorgan (through Kinexys), UBS, SWIFT collaborators, and others are not experimenting with blockchain out of curiosity.&lt;/p&gt;

&lt;p&gt;They have strategic reasons.&lt;/p&gt;

&lt;h4&gt;
  
  
  Efficiency &amp;amp; Cost Reduction
&lt;/h4&gt;

&lt;p&gt;Traditional cross-border settlements are slow and layered with intermediaries.&lt;/p&gt;

&lt;p&gt;Blockchain offers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Near-instant settlement&lt;/li&gt;
&lt;li&gt;Reduced counterparty risk&lt;/li&gt;
&lt;li&gt;Automated reconciliation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CRE enhances this by coordinating blockchain settlement with traditional reporting systems, reducing operational overhead.&lt;/p&gt;

&lt;h4&gt;
  
  
  Real-Time Reconciliation
&lt;/h4&gt;

&lt;p&gt;Today, banking systems heavily utilize batch processing and reconciliation systems.&lt;/p&gt;

&lt;p&gt;Blockchain technology allows for deterministic state changes with timestamps.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CRE facilitates this by ensuring:&lt;/li&gt;
&lt;li&gt;Integration with existing ledger systems&lt;/li&gt;
&lt;li&gt;Generation of structured financial messages&lt;/li&gt;
&lt;li&gt;Record maintenance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This removes friction from the back-end systems.&lt;/p&gt;

&lt;h4&gt;
  
  
  ISO 20022 Integration
&lt;/h4&gt;

&lt;p&gt;ISO 20022 is the global financial messaging standard.&lt;/p&gt;

&lt;p&gt;It’s the language of modern banking.&lt;/p&gt;

&lt;p&gt;But blockchains don’t natively support this language.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Translate ISO 20022 instructions into programmable blockchain actions.&lt;/li&gt;
&lt;li&gt;Generate ISO 20022 compliant outputs from on-chain state changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s important.&lt;br&gt;
It means banks don’t have to abandon their infrastructure to benefit from blockchain.&lt;/p&gt;

&lt;h3&gt;
  
  
  A More Detailed Analogy: The Bank Operations Floor
&lt;/h3&gt;

&lt;p&gt;Imagine the operations floor of a large bank.&lt;/p&gt;

&lt;p&gt;There are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Risk teams&lt;/li&gt;
&lt;li&gt;Compliance teams&lt;/li&gt;
&lt;li&gt;Settlement systems&lt;/li&gt;
&lt;li&gt;Messaging systems&lt;/li&gt;
&lt;li&gt;Ledger systems&lt;/li&gt;
&lt;li&gt;Audit systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When a major transaction happens, all these units coordinate.&lt;/p&gt;

&lt;p&gt;Now imagine a digital “conductor” that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Receives a financial instruction&lt;/li&gt;
&lt;li&gt;Automatically calls compliance checks&lt;/li&gt;
&lt;li&gt;Formats standardized financial messages&lt;/li&gt;
&lt;li&gt;Routes instructions to the right systems&lt;/li&gt;
&lt;li&gt;Updates ledgers&lt;/li&gt;
&lt;li&gt;Logs immutable records&lt;/li&gt;
&lt;li&gt;Confirms completion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CRE acts like that conductor — but across both banking systems and blockchain networks.&lt;/p&gt;

&lt;p&gt;It ensures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On-chain actions integrate with traditional workflows.&lt;/li&gt;
&lt;li&gt;Traditional banking messages can trigger programmable execution.&lt;/li&gt;
&lt;li&gt;Everything remains auditable and structured.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Deeper Shift: From Transactions to Coordinated Infrastructure
&lt;/h3&gt;

&lt;p&gt;The most significant change is this:&lt;/p&gt;

&lt;p&gt;Blockchains have been transactional.&lt;br&gt;
Banking has been procedural.&lt;br&gt;
CRE makes blockchains procedural.&lt;/p&gt;

&lt;p&gt;Instead of smart contract events, you get institutional workflows.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;br&gt;
“Something happened on chain, now go reconcile it manually.”&lt;/p&gt;

&lt;p&gt;You get:&lt;br&gt;
“Something happened, and the entire institutional workflow happened automatically.”&lt;/p&gt;

&lt;p&gt;That is synergy.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Bigger Vision
&lt;/h3&gt;

&lt;p&gt;This is not about replacing SWIFT.&lt;br&gt;
This is not about replacing banks.&lt;br&gt;
This is not about replacing traditional finance.&lt;/p&gt;

&lt;p&gt;This is about integration.&lt;/p&gt;

&lt;p&gt;CRE enables:&lt;/p&gt;

&lt;p&gt;Structured financial messaging (ISO 20022)&lt;br&gt;
Blockchain programmability&lt;br&gt;
Real-time settlement&lt;br&gt;
Compliance-aware execution&lt;br&gt;
Cross-system coordination&lt;/p&gt;

&lt;p&gt;This is about bridging decentralized execution and institutional operational standards.&lt;/p&gt;

&lt;p&gt;Invisible complexity.&lt;br&gt;
Visible reliability.&lt;/p&gt;

&lt;p&gt;This is why the biggest financial institutions are taking a look.&lt;br&gt;
This is why the conversation around blockchain is shifting from speculation to infrastructure.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>defi</category>
      <category>tradefi</category>
      <category>web3</category>
    </item>
    <item>
      <title>Reading Contract State at a Past Block Using Wagmi</title>
      <dc:creator>obiwale ayomide</dc:creator>
      <pubDate>Thu, 08 Jan 2026 16:56:35 +0000</pubDate>
      <link>https://forem.com/obiwale_ayomide_cdcf8b961/reading-contract-state-at-a-past-block-using-wagmi-chainlink-price-feeds-4k7m</link>
      <guid>https://forem.com/obiwale_ayomide_cdcf8b961/reading-contract-state-at-a-past-block-using-wagmi-chainlink-price-feeds-4k7m</guid>
      <description>&lt;p&gt;There was a moment when I needed to answer a deceptively simple question:&lt;/p&gt;

&lt;p&gt;“What was the price of this asset then, not now?”&lt;br&gt;
Not five minutes ago.&lt;br&gt;
Not the current block.&lt;br&gt;
But at a very specific point in the past.&lt;/p&gt;

&lt;p&gt;I was working on a feature that needed historical pricing for an asset. Not off-chain charts, not an indexer snapshot, but the actual on-chain value that existed at a given time. Since the asset used Chainlink price feeds, I assumed this would be straightforward.&lt;/p&gt;

&lt;p&gt;It wasn’t.&lt;/p&gt;

&lt;p&gt;At first, I kept getting the current price no matter what I tried. That’s when I realized something important: most examples show you how to read contract state, but very few show you how to read contract state at a specific block.&lt;/p&gt;

&lt;p&gt;That’s where Wagmi quietly shines.&lt;/p&gt;

&lt;p&gt;The Core Idea&lt;/p&gt;

&lt;p&gt;Ethereum (and EVM chains in general) allow you to query contract state as it existed at any historical block. If a contract method is view or pure, you can read it at a past block without any special indexing infrastructure.&lt;/p&gt;

&lt;p&gt;Wagmi exposes this directly through blockNumber.&lt;/p&gt;

&lt;p&gt;So instead of asking:&lt;br&gt;
“What does the contract return now?”&lt;/p&gt;

&lt;p&gt;You ask:&lt;br&gt;
“What did the contract return at block X?”&lt;/p&gt;

&lt;p&gt;For price feeds, this is gold.&lt;/p&gt;

&lt;p&gt;The Scenario: Chainlink Price at a Past Time&lt;/p&gt;

&lt;p&gt;Chainlink price feeds expose methods like:&lt;br&gt;
latestRoundData()&lt;br&gt;
getRoundData(roundId)&lt;/p&gt;

&lt;p&gt;If you already know the round ID, you can query it directly. But sometimes you don’t. Sometimes all you know is the time.&lt;/p&gt;

&lt;p&gt;A reliable approach is:&lt;/p&gt;

&lt;p&gt;Convert the timestamp you care about into a block number&lt;br&gt;
Read the price feed contract at that block&lt;br&gt;
Let’s focus on step 2 using Wagmi.&lt;br&gt;
Reading a Contract Method at a Specific Block&lt;br&gt;
Wagmi’s readContract (or useReadContract) accepts a blockNumber parameter.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;readContract&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@wagmi/core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;parseAbi&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;viem&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;aggregatorAbi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;parseAbi&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;function latestRoundData() view returns (uint80,int256,uint256,uint256,uint80)&lt;/span&gt;&lt;span class="dl"&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;priceFeedAddress&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0x...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;blockNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="nx"&gt;_500_000n&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&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;readContract&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;priceFeedAddress&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;abi&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;aggregatorAbi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;functionName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;latestRoundData&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;blockNumber&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;What happens here is subtle but powerful.&lt;/p&gt;

&lt;p&gt;Wagmi asks the RPC node:&lt;/p&gt;

&lt;p&gt;“Pretend the chain is at block 18,500,000. What does this function return?”&lt;/p&gt;

&lt;p&gt;The result is exactly what the Chainlink contract would have returned at that block, not today.&lt;/p&gt;

&lt;p&gt;Why This Works&lt;/p&gt;

&lt;p&gt;Ethereum nodes store historical state. When you specify a blockNumber, the node executes the call against that historical snapshot.&lt;/p&gt;

&lt;p&gt;No subgraph.&lt;br&gt;
No off-chain cache.&lt;br&gt;
No guesswork.&lt;/p&gt;

&lt;p&gt;Just deterministic blockchain state.&lt;/p&gt;

&lt;p&gt;Mapping Time to Block&lt;/p&gt;

&lt;p&gt;You usually don’t know the block number upfront. You know a timestamp.&lt;/p&gt;

&lt;p&gt;Typical approaches:&lt;/p&gt;

&lt;p&gt;Binary search blocks by timestamp using eth_getBlockByNumber&lt;/p&gt;

&lt;p&gt;Use a helper API once, then cache the mapping&lt;/p&gt;

&lt;p&gt;Use an archive node for accuracy&lt;/p&gt;

&lt;p&gt;Once you have the block number, Wagmi does the rest.&lt;/p&gt;

&lt;p&gt;Frontend Example with React&lt;/p&gt;

&lt;p&gt;If you’re using Wagmi hooks in a React app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useReadContract&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;wagmi&lt;/span&gt;&lt;span class="dl"&gt;'&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;data&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useReadContract&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;priceFeedAddress&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;abi&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;aggregatorAbi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;functionName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;latestRoundData&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;blockNumber&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="nx"&gt;_500_000n&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;This is especially useful for:&lt;/p&gt;

&lt;p&gt;Historical charts&lt;br&gt;
Auditing old positions&lt;br&gt;
Liquidation simulations&lt;br&gt;
“What-if” analytics&lt;br&gt;
Dispute resolution in DeFi&lt;/p&gt;

&lt;p&gt;Important Caveats&lt;/p&gt;

&lt;p&gt;RPC support matters&lt;br&gt;
You need an RPC that supports historical reads. Some free providers prune old state.&lt;/p&gt;

&lt;p&gt;Performance&lt;br&gt;
Historical reads are slightly heavier. Cache results when possible.&lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;br&gt;
Wagmi doesn’t make a big deal out of this feature, but once you realize you can read contract state at any point in time, a lot of problems suddenly become simpler.&lt;/p&gt;

</description>
      <category>ethereum</category>
      <category>react</category>
      <category>tutorial</category>
      <category>web3</category>
    </item>
  </channel>
</rss>
