<?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: Donny Nguyen (Donny Diamond Hands)</title>
    <description>The latest articles on DEV Community by Donny Nguyen (Donny Diamond Hands) (@donnywin85).</description>
    <link>https://dev.to/donnywin85</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%2F4014232%2F32cf1cdd-943d-4526-8fac-eeeb7eeac967.jpg</url>
      <title>DEV Community: Donny Nguyen (Donny Diamond Hands)</title>
      <link>https://dev.to/donnywin85</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/donnywin85"/>
    <language>en</language>
    <item>
      <title>We Scored the Protocols Nobody Disputes. Aave Lost Points — and That's the Point.</title>
      <dc:creator>Donny Nguyen (Donny Diamond Hands)</dc:creator>
      <pubDate>Sat, 08 Aug 2026 22:24:57 +0000</pubDate>
      <link>https://dev.to/donnywin85/we-scored-the-protocols-nobody-disputes-aave-lost-points-and-thats-the-point-11eb</link>
      <guid>https://dev.to/donnywin85/we-scored-the-protocols-nobody-disputes-aave-lost-points-and-thats-the-point-11eb</guid>
      <description>&lt;p&gt;&lt;em&gt;Proof-of-Yield Teardown #002 — the control group: Aave, Uniswap, Pendle. Findings as of 2026-08-08.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/donnywin85/we-built-a-yield-claim-scanner-the-first-protocol-we-tested-scored-28100-52hd"&gt;Teardown #001&lt;/a&gt; scored a suspect protocol at 28/100 — 24/100 on today's re-scan — and showed why. The obvious next question — the one that decides whether a score means anything — is what the same scanner does to protocols that are unambiguously real.&lt;/p&gt;

&lt;p&gt;So we ran it against three: &lt;strong&gt;Aave, Uniswap, and Pendle.&lt;/strong&gt; Not to praise them. To find out which of our checks actually carry the signal, and which ones we could delete tomorrow without losing anything.&lt;/p&gt;

&lt;p&gt;All three lost points, and two of them raised an outright red flag. Here's exactly where, and what that says about scoring DeFi risk.&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;target&lt;/th&gt;
&lt;th&gt;composite&lt;/th&gt;
&lt;th&gt;verdict&lt;/th&gt;
&lt;th&gt;red flags raised&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;nlo.finance (suspect, from #001)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;24&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;HIGH_RISK_SIGNALS&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aave (+ ethereum Pool &lt;code&gt;0x87870B…fA4E2&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;94&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;STRONG_LEGITIMACY_SIGNALS&lt;/td&gt;
&lt;td&gt;1 — &lt;code&gt;UPGRADEABLE_PROXY&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Uniswap (+ ethereum v4 PoolManager &lt;code&gt;0x0000…8A90&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;99&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;STRONG_LEGITIMACY_SIGNALS&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pendle&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;87&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;STRONG_LEGITIMACY_SIGNALS&lt;/td&gt;
&lt;td&gt;1 — &lt;code&gt;NO_AUDIT_LINKS&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Suspect 24 against the weakest control at 87 — a &lt;strong&gt;63-point gap&lt;/strong&gt;, with nothing landing in the 40–69 "mixed" band. That separation is the whole product. A scanner that can't put daylight between a bare-VPS-IP protocol and Aave is a random number generator with a UI.&lt;/p&gt;

&lt;p&gt;But the interesting part is not the gap. It's the deductions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deduction 1: Aave is an upgradeable proxy, and we say so
&lt;/h2&gt;

&lt;p&gt;Aave's Pool contract is an EIP-1967 proxy. The implementation resolves to &lt;code&gt;0x728a138a4823392c2efa55e028d434f526fe03cf&lt;/code&gt;. Our proxy check scored it &lt;strong&gt;10/20&lt;/strong&gt; and raised &lt;code&gt;UPGRADEABLE_PROXY&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That is not us calling Aave risky. It is us refusing to have a rule that says &lt;em&gt;blue chips are exempt&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;An upgradeable proxy is a real, permanent property of the contract you are approving: someone, under some governance process, can change the code your approval points at. For Aave that someone is a well-scrutinised DAO with timelocks. For a three-week-old protocol it might be one EOA on a laptop. The check reports the property; it does not pretend to read the governance.&lt;/p&gt;

&lt;p&gt;So the deduction is deliberately &lt;strong&gt;note-grade&lt;/strong&gt; — 10 of 20 points, not zero, and a single flag on a 94. Aave's proxy source is verified by all three explorers independently (Etherscan, Sourcify, Blockscout agree) and has been verified since 2023-09-12 — 1,061 days of published source at the time of writing. The compound that actually damns a contract is &lt;em&gt;unverified source **and&lt;/em&gt;* upgradeable*: code you can't read, that can be swapped for code you also can't read. Upgradeable-and-verified is Tuesday in DeFi.&lt;/p&gt;

&lt;p&gt;Aave's privilege scan, for the record: &lt;code&gt;owner:0 mint:0 upgrade:2 pause:0 blacklist:0&lt;/code&gt; — 20/20. Two upgrade selectors, exactly consistent with the proxy pattern, and no mint or blacklist machinery hiding in the implementation bytecode.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deduction 2: Pendle's flag is our bug, not Pendle's
&lt;/h2&gt;

&lt;p&gt;Pendle raised &lt;code&gt;NO_AUDIT_LINKS&lt;/code&gt; and scored 16/25 on transparency: &lt;code&gt;docs:5 audits:0 github:1 socials:3&lt;/code&gt; — five documentation links discovered from the landing page, one GitHub org, and not a single audit link.&lt;/p&gt;

&lt;p&gt;Pendle is audited. The audits are linked from the documentation, not from the landing page — and our Tier 1 discovery crawls the landing page.&lt;/p&gt;

&lt;p&gt;We are publishing that flag rather than quietly special-casing it, because a scanner's failure modes are more useful to you than its successes. &lt;strong&gt;&lt;code&gt;NO_AUDIT_LINKS&lt;/code&gt; means "not discoverable from the landing page," not "unaudited."&lt;/strong&gt; On Pendle that's a false positive and a known limitation of landing-page-only discovery. On nlo.finance the same flag appeared alongside &lt;code&gt;docs:0 github:0&lt;/code&gt; and zero DeFiLlama presence — 20 outbound links on the page, all social. Same flag, opposite meaning, and only the surrounding evidence tells you which one you're holding.&lt;/p&gt;

&lt;p&gt;Any tool that outputs a single number owes you the per-check breakdown. That's why ours returns one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deduction 3: even the 99 isn't a 100
&lt;/h2&gt;

&lt;p&gt;Uniswap's v4 PoolManager raised zero red flags and still didn't score perfect. Its privilege scan came back &lt;code&gt;owner:2 mint:0 upgrade:0 pause:0 blacklist:0&lt;/code&gt; — 17/20. Two owner-related selectors in a non-upgradeable, three-source-verified contract, which is about as benign as a privilege finding gets, and we still deduct for it and still show you the selectors.&lt;/p&gt;

&lt;p&gt;There is no ceiling reserved for protocols we like. A 99 means the instrument found two things worth mentioning and judged both minor — not that it stopped looking.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the control group proved about our own checks
&lt;/h2&gt;

&lt;p&gt;Here is the finding that changed how we weight things. Two of our six Tier 1 checks contributed &lt;strong&gt;no separation at all&lt;/strong&gt; between the three real protocols and the suspect:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;check&lt;/th&gt;
&lt;th&gt;nlo.finance (24)&lt;/th&gt;
&lt;th&gt;Aave (94)&lt;/th&gt;
&lt;th&gt;Uniswap (99)&lt;/th&gt;
&lt;th&gt;Pendle (87)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TLS certificate&lt;/td&gt;
&lt;td&gt;6/10&lt;/td&gt;
&lt;td&gt;6/10&lt;/td&gt;
&lt;td&gt;10/10&lt;/td&gt;
&lt;td&gt;6/10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yield-claim plausibility&lt;/td&gt;
&lt;td&gt;10/10&lt;/td&gt;
&lt;td&gt;10/10&lt;/td&gt;
&lt;td&gt;10/10&lt;/td&gt;
&lt;td&gt;10/10&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Read the TLS row, then read it again against the same row from our first run three weeks earlier — on 2026-07-16 it was nlo &lt;strong&gt;10/10&lt;/strong&gt;, Aave 6/10, Uniswap 6/10, Pendle 10/10. &lt;strong&gt;The suspect outscored two blue chips on that date.&lt;/strong&gt; Today the suspect ties Aave and Pendle at 6/10 and Uniswap leads at 10/10.&lt;/p&gt;

&lt;p&gt;Nothing about anyone's legitimacy changed in those three weeks. What changed is where each certificate happened to sit in its automated 90-day renewal cycle: nlo's Let's Encrypt cert rotated (79 days old then, 15 days old now), Uniswap's is 53 days into its cycle, Aave's is 9 days into a fresh one. That is the entire content of the signal — &lt;strong&gt;a cert-age check is a random number generator with respect to fraud.&lt;/strong&gt; It ranked the scammer first in July and third in August, on the basis of nothing.&lt;/p&gt;

&lt;p&gt;We are leaving the check in at 10 points and telling you it's noise, rather than deleting it, because "this site has valid TLS" is still worth reporting as an observation. What it is not is evidence.&lt;/p&gt;

&lt;p&gt;The yield row is worse. Our yield-claim regex looks for implausible APY figures in rendered text. It found &lt;strong&gt;none anywhere&lt;/strong&gt; — including on the protocol claiming to autonomously route capital across 170 DEXs. Modern yield scams don't print "4,000% APY" on the homepage any more. They print "AI-orchestrated, non-custodial, cross-chain" and let you assume.&lt;/p&gt;

&lt;p&gt;So the two checks a normal person would build first — &lt;em&gt;is the padlock green, does the APY look silly&lt;/em&gt; — contributed &lt;strong&gt;zero separation&lt;/strong&gt; across this set. All 63 points of gap came from somewhere else.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the separation actually came from
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;check&lt;/th&gt;
&lt;th&gt;weight&lt;/th&gt;
&lt;th&gt;nlo.finance&lt;/th&gt;
&lt;th&gt;Aave&lt;/th&gt;
&lt;th&gt;Uniswap&lt;/th&gt;
&lt;th&gt;Pendle&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;DeFiLlama presence&lt;/td&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;0/25&lt;/strong&gt; — 0 protocols, $0 TVL&lt;/td&gt;
&lt;td&gt;25/25 — 8 protocols, $14.89B&lt;/td&gt;
&lt;td&gt;25/25 — 6 protocols, $3.00B&lt;/td&gt;
&lt;td&gt;25/25 — 2 protocols, $1.18B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domain age&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;4/20&lt;/strong&gt; — 165d&lt;/td&gt;
&lt;td&gt;20/20 — 10,518d&lt;/td&gt;
&lt;td&gt;20/20 — 2,812d&lt;/td&gt;
&lt;td&gt;20/20 — 2,068d&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transparency (docs/audits/github)&lt;/td&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;4/25&lt;/strong&gt; — docs:0 audits:0 github:0&lt;/td&gt;
&lt;td&gt;25/25 — docs:1 audits:1 github:1&lt;/td&gt;
&lt;td&gt;25/25 — docs:1 audits:1 github:2&lt;/td&gt;
&lt;td&gt;16/25 — docs:5 audits:0 github:1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Canonical URL hygiene&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;0/10&lt;/strong&gt; — &lt;code&gt;http://158.220.112.195/&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;10/10&lt;/td&gt;
&lt;td&gt;10/10&lt;/td&gt;
&lt;td&gt;10/10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contract source verification&lt;/td&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;td&gt;&lt;em&gt;no published contracts to check&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;40/40 — 3-source consensus&lt;/td&gt;
&lt;td&gt;40/40 — 3-source consensus&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Every discriminating check has the same shape: &lt;strong&gt;it costs sustained time or money to fake.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You cannot backdate a domain registration. You cannot fake a billion dollars of TVL that third-party analytics independently track. You cannot get three independent block explorers to agree your source matches deployed bytecode without publishing source that matches deployed bytecode. You cannot retroactively have had a public GitHub for two years.&lt;/p&gt;

&lt;p&gt;You &lt;em&gt;can&lt;/em&gt; get a TLS cert in ninety seconds, hire a designer, and write "non-custodial" on a dark background for free. Surface trust is a commodity. Economic footprint is not. The control group is what let us say that with numbers instead of vibes — the checks that separated a 24 from a 99 are, without exception, the registry-grade ones.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Every figure above is from a full four-target re-scan run on 2026-08-08, immediately before publishing; the original calibration run was 2026-07-16. TVL, cert ages and domain ages all drift, and the composites moved with them — nlo 28→24, Uniswap 96→99, Pendle 91→87, Aave 94 unchanged. No target changed band.)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The uncomfortable corollary
&lt;/h2&gt;

&lt;p&gt;If the separating signals are all &lt;em&gt;accumulated history&lt;/em&gt;, then a new, honest protocol scores like a scam.&lt;/p&gt;

&lt;p&gt;That's true, and we're not going to paper over it. A legitimate two-month-old project with no TVL yet, no DeFiLlama listing, and a fresh domain will score in nlo's neighbourhood on Tier 1. The score is &lt;strong&gt;not&lt;/strong&gt; a fraud verdict — it is a measure of how much verifiable economic footprint exists to back the claims being made.&lt;/p&gt;

&lt;p&gt;Which is why the claim side matters as much as the footprint side. A new protocol saying "we're new, here's our verified contract, here's our audit, here's our GitHub" is a legible risk. A protocol with a 142-day-old domain claiming to orchestrate 25,000 pools across 170 DEXs is an &lt;em&gt;incoherence&lt;/em&gt; — and incoherence between claimed scale and observable footprint is the thing that actually predicted trouble here.&lt;/p&gt;

&lt;p&gt;Tier 2 exists for exactly this reason. A young protocol that publishes contracts can earn 40/40 on three-source verification on day one. History it can't fake; transparency it can choose.&lt;/p&gt;

&lt;h2&gt;
  
  
  The five-minute manual version (control-group edition)
&lt;/h2&gt;

&lt;p&gt;Teardown #001 gave you five checks to run on a suspect. Run these three on anything that passes them:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Check whether the audit link goes to the auditor's own domain.&lt;/strong&gt; Pendle's audits are real but a landing-page crawl misses them; a scam's "audit" is a PDF that lives only on the project's own server. The location tells you more than the existence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If it's a proxy, find out who can upgrade it and how fast.&lt;/strong&gt; "Upgradeable" is normal. "Upgradeable by one address with no timelock" is a different asset class. The proxy pattern is public; the governance around it is a five-minute read.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compare claimed scale against third-party trackers, not the project's own dashboard.&lt;/strong&gt; DeFiLlama tracked $14.89B across Aave's entries and $0 across nlo's. Self-reported TVL is marketing copy.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And carry the negative result from this teardown: &lt;strong&gt;stop treating a valid TLS certificate as evidence of anything.&lt;/strong&gt; On this set it ranked the suspect above two blue chips in July and mid-pack in August, purely on renewal timing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The disclaimers that matter
&lt;/h2&gt;

&lt;p&gt;These are automated observations from a specific date, not audits, not endorsements, and not financial advice. Aave, Uniswap and Pendle appear here as controls — protocols whose legitimacy is not in dispute, used to test whether our instrument can tell the difference. A high score is not a safety guarantee: our checks measure verifiable footprint and contract hygiene, and neither of those catches an economic exploit, an oracle failure, or a governance attack.&lt;/p&gt;

&lt;p&gt;The two deductions above are the honest output of the scanner, including the one that is our own limitation rather than Pendle's shortcoming. We'd rather publish our false positive than hide it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scan it yourself
&lt;/h2&gt;

&lt;p&gt;Proof-of-Yield's composite scan — ops forensics plus three-source contract verification — is live. Run any protocol through it before you approve anything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start here:&lt;/strong&gt; &lt;a href="https://poy.donnyautomation.com/v1/land?src=teardown-002" rel="noopener noreferrer"&gt;https://poy.donnyautomation.com/v1/land?src=teardown-002&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free, no signup:&lt;/strong&gt; one POST, straight at the API —&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://poy.donnyautomation.com/v1/scan &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"url": "https://protocol-you-are-checking.xyz"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Rate-limited per IP; add &lt;code&gt;chain&lt;/code&gt; and &lt;code&gt;address&lt;/code&gt; to include contract forensics. Higher-volume access is coming via pay-per-call — watch this space.&lt;/p&gt;

&lt;p&gt;More teardowns coming. If there's a protocol whose yield claims you want put under the lens, send it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built by the team behind the Uniswap v4 Hook Risk &amp;amp; Reality API. Same principle: three sources or it didn't happen.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>defi</category>
      <category>security</category>
      <category>blockchain</category>
      <category>api</category>
    </item>
    <item>
      <title>We Built a Yield-Claim Scanner. The First Protocol We Tested Scored 28/100.</title>
      <dc:creator>Donny Nguyen (Donny Diamond Hands)</dc:creator>
      <pubDate>Sat, 08 Aug 2026 22:23:07 +0000</pubDate>
      <link>https://dev.to/donnywin85/we-built-a-yield-claim-scanner-the-first-protocol-we-tested-scored-28100-52hd</link>
      <guid>https://dev.to/donnywin85/we-built-a-yield-claim-scanner-the-first-protocol-we-tested-scored-28100-52hd</guid>
      <description>&lt;p&gt;&lt;em&gt;Proof-of-Yield Teardown #001 — nlo.finance. Findings as of 2026-08-08 (first scanned 2026-07-16).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;There is a class of DeFi site that security scanners can't catch. The contract checkers look for honeypots and mint functions. The token sniffers look for rug mechanics. But nobody checks the thing that actually matters before you deposit: &lt;strong&gt;is the yield economically real?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We built a scanner that asks that question. This is what it found on its first live target.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pitch vs. the plumbing
&lt;/h2&gt;

&lt;p&gt;NLO.finance describes itself as "an autonomous AI agent that orchestrates your capital across 25,000+ liquidity pools on 170+ DEXs. Non-custodial, cross-chain, continuously rebalanced."&lt;/p&gt;

&lt;p&gt;That is a serious infrastructure claim. Routing capital across 170 venues implies indexers, keepers, cross-chain messaging, and an operations footprint you can see from orbit.&lt;/p&gt;

&lt;p&gt;Here is the site's own canonical tag, taken from its rendered HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"canonical"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"http://158.220.112.195/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A bare VPS IP address. Over plain HTTP. The &lt;code&gt;og:url&lt;/code&gt; tag points to the same place. The site claiming to orchestrate capital across 170 exchanges canonicalizes itself to an unencrypted budget-host IP.&lt;/p&gt;

&lt;p&gt;That single line is not proof of bad intent. It is proof that the operational reality and the marketing claim live in different universes — and that gap is the most reliable risk signal we know of.&lt;/p&gt;

&lt;h2&gt;
  
  
  Methodology: what the scanner checks
&lt;/h2&gt;

&lt;p&gt;Proof-of-Yield runs two tiers of forensics and produces a 0–100 composite score:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tier 1 — Operational forensics.&lt;/strong&gt; Rendered-page canonical and metadata extraction, TLS certificate details, domain age via registry RDAP, DeFiLlama listing and TVL presence, and discovery of documentation, audit, GitHub, and social links.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tier 2 — Contract forensics.&lt;/strong&gt; Source verification checked against three independent sources (Etherscan-family, Sourcify, Blockscout) with consensus required, proxy pattern detection with implementation resolution, and privilege flags — owner, mint, upgrade, pause, blacklist — scanned across both proxy and implementation bytecode.&lt;/p&gt;

&lt;p&gt;To calibrate, we ran the same scan against three protocols nobody disputes: Aave, Uniswap, and Pendle.&lt;/p&gt;

&lt;h2&gt;
  
  
  The findings
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Check&lt;/th&gt;
&lt;th&gt;NLO.finance&lt;/th&gt;
&lt;th&gt;Aave / Uniswap / Pendle&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Composite score&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;24 — HIGH RISK SIGNALS&lt;/strong&gt; (28 on our first scan, 2026-07-16)&lt;/td&gt;
&lt;td&gt;94 / 99 / 87&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Canonical URL&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;http://&lt;/code&gt; + bare VPS IP&lt;/td&gt;
&lt;td&gt;Proper HTTPS domains&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeFiLlama presence&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;None&lt;/strong&gt; — 0 protocols, $0 tracked (vs. "25,000+ pools" claim)&lt;/td&gt;
&lt;td&gt;$14.89B / $3.00B / $1.18B tracked&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domain age&lt;/td&gt;
&lt;td&gt;165 days&lt;/td&gt;
&lt;td&gt;2,068–10,518 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docs / GitHub / audit links&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;None discovered&lt;/strong&gt; — 0 docs, 0 github, 0 audits&lt;/td&gt;
&lt;td&gt;Present on all three&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TLS certificate&lt;/td&gt;
&lt;td&gt;Valid&lt;/td&gt;
&lt;td&gt;Valid&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;(The title says 28 because that is what our first run scored it on 2026-07-16. We re-ran every check on 2026-08-08 before publishing and it came back &lt;strong&gt;24&lt;/strong&gt; — the drop is its TLS certificate rotating, which we explain in teardown #002. Nothing about the site improved; one of our noisier checks simply stopped flattering it.)&lt;/p&gt;

&lt;p&gt;Read the TLS row again, because it's the most important finding in this teardown.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NLO's TLS certificate is fine.&lt;/strong&gt; The site looks trustworthy at the level most people check — the padlock is there, the design is dark and slick, the copy says "non-custodial." Every cheap trust signal passes.&lt;/p&gt;

&lt;p&gt;What fails are the signals that cost real money and time to fake: a registry-verifiable domain history, presence in the analytics ecosystem that tracks every protocol with actual TVL, public code, public audits, a public team. Surface trust is a commodity. Economic footprint is not. Our calibration run showed the separation between a 24 and a 94 comes almost entirely from the registry-grade checks — not from certificates, not from copy analysis.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "non-custodial" actually means here
&lt;/h2&gt;

&lt;p&gt;One more thing worth saying plainly. An "agent" that "continuously rebalances" your capital requires you to grant token approvals or session keys to its contracts. If those contracts are malicious or compromised, an approval drains you exactly as thoroughly as handing over your keys. "Non-custodial" is a marketing word, not a security property, unless the contracts are verified, audited, and behaviorally constrained — none of which we could establish here, because we found no published contracts to check.&lt;/p&gt;

&lt;h2&gt;
  
  
  The five-minute manual version
&lt;/h2&gt;

&lt;p&gt;You don't need our scanner to run the basics. Before any deposit, check:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;View source, find the canonical tag.&lt;/strong&gt; A raw IP or a mismatched domain is disqualifying.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search the protocol on DeFiLlama.&lt;/strong&gt; Big-number claims with zero tracked TVL is disqualifying.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Find the audit, then verify it on the auditor's own site.&lt;/strong&gt; A PDF hosted only on the project's domain doesn't count.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Find the contracts and check verification on a block explorer.&lt;/strong&gt; No published contract addresses is disqualifying.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check domain age.&lt;/strong&gt; Under a year plus "established infrastructure" claims is a contradiction.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Five checks, five minutes, and NLO.finance fails four of them. (The fifth — TLS — it passes, which is exactly why the padlock alone should never be your basis for trust.)&lt;/p&gt;

&lt;h2&gt;
  
  
  The disclaimers that matter
&lt;/h2&gt;

&lt;p&gt;We cannot see intent. It is possible NLO is a sincere early project with catastrophically sloppy operations, and if the team publishes verifiable contracts, audits, and an economic footprint, we will run the scan again and publish the updated score. This post describes what automated checks observed on a specific date. It is not financial advice, and the absence of evidence we describe is exactly that — observed absence, documented.&lt;/p&gt;

&lt;p&gt;But the burden of proof in DeFi sits with whoever is asking for your approvals. We first scanned this site on 2026-07-16 and re-ran every check on 2026-08-08 before publishing. Three weeks apart, nothing moved: still no docs, still no GitHub, still no audits, still zero DeFiLlama presence, still canonicalising to a bare VPS IP over plain HTTP. On both dates, nlo.finance offered nothing that carries that burden.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scan it yourself
&lt;/h2&gt;

&lt;p&gt;Proof-of-Yield's composite scan — ops forensics plus three-source contract verification — is live. Run any protocol through it before you approve anything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start here:&lt;/strong&gt; &lt;a href="https://poy.donnyautomation.com/v1/land?src=teardown-001" rel="noopener noreferrer"&gt;https://poy.donnyautomation.com/v1/land?src=teardown-001&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free, no signup:&lt;/strong&gt; one POST, straight at the API —&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://poy.donnyautomation.com/v1/scan &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"url": "https://protocol-you-are-checking.xyz"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Rate-limited per IP; add &lt;code&gt;chain&lt;/code&gt; and &lt;code&gt;address&lt;/code&gt; to include contract forensics. Higher-volume access is coming via pay-per-call — watch this space.&lt;/p&gt;

&lt;p&gt;More teardowns coming. If there's a protocol whose yield claims you want put under the lens, send it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built by the team behind the Uniswap v4 Hook Risk &amp;amp; Reality API. Same principle: three sources or it didn't happen.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>defi</category>
      <category>security</category>
      <category>blockchain</category>
      <category>api</category>
    </item>
    <item>
      <title>Your x402 API settled on mainnet but never showed up in Coinbase's Bazaar? Check one character.</title>
      <dc:creator>Donny Nguyen (Donny Diamond Hands)</dc:creator>
      <pubDate>Thu, 30 Jul 2026 01:19:31 +0000</pubDate>
      <link>https://dev.to/donnywin85/your-x402-api-settled-on-mainnet-but-never-showed-up-in-coinbases-bazaar-check-one-character-3l20</link>
      <guid>https://dev.to/donnywin85/your-x402-api-settled-on-mainnet-but-never-showed-up-in-coinbases-bazaar-check-one-character-3l20</guid>
      <description>&lt;p&gt;We run two pay-per-call x402 endpoints (cross-DEX market data, Uniswap v4 hook risk scans). We settled &lt;strong&gt;four real mainnet payments&lt;/strong&gt; through the CDP facilitator over four weeks — and the Bazaar merchant endpoint kept returning:&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="nl"&gt;"pagination"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"limit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"offset"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"total"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"resources"&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;p&gt;We blamed "async index lag" for a month. It wasn't lag. It was one character — well, five: &lt;code&gt;http://&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The diagnostic that costs nothing
&lt;/h2&gt;

&lt;p&gt;Before you pay for another settle hoping the index "catches up", decode your own 402 challenge:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sI&lt;/span&gt; https://your-api.example.com/paid-route | &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; payment-required | &lt;span class="nb"&gt;cut&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt;&lt;span class="s1"&gt;' '&lt;/span&gt; &lt;span class="nt"&gt;-f2&lt;/span&gt; | &lt;span class="nb"&gt;base64&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; | jq .resource.url
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If that prints &lt;code&gt;http://your-api...&lt;/code&gt; instead of &lt;code&gt;https://&lt;/code&gt;, &lt;strong&gt;you have found your problem.&lt;/strong&gt; CDP silently declines to index a resource whose &lt;code&gt;resource.url&lt;/code&gt; isn't HTTPS. No error, no rejected status — the settle succeeds, your money moves, and the listing never appears.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it happens to almost everyone
&lt;/h2&gt;

&lt;p&gt;You're behind a TLS-terminating proxy — Railway, Cloudflare, Render, Fly, a load balancer. TLS ends at the edge, so your Express app sees plain HTTP and &lt;code&gt;req.protocol === 'http'&lt;/code&gt;. The x402 middleware bakes that protocol into &lt;code&gt;resource.url&lt;/code&gt; in every 402 challenge &lt;em&gt;and every settle payload&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The fix is one line, &lt;strong&gt;before&lt;/strong&gt; you mount &lt;code&gt;paymentMiddleware&lt;/code&gt;:&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="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;trust proxy&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use &lt;code&gt;1&lt;/code&gt;, not &lt;code&gt;true&lt;/code&gt;. With &lt;code&gt;true&lt;/code&gt;, Express takes the &lt;em&gt;leftmost&lt;/em&gt; &lt;code&gt;X-Forwarded-For&lt;/code&gt; entry — which any client can forge to dodge your rate limiter. With &lt;code&gt;1&lt;/code&gt; it takes the proxy-observed entry, which can't be spoofed. We verified: 16 parallel requests with 16 forged &lt;code&gt;X-Forwarded-For&lt;/code&gt; values still rate-limited correctly.&lt;/p&gt;

&lt;p&gt;After deploying that one line, our very next settle indexed in &lt;strong&gt;under a minute&lt;/strong&gt;. Four weeks of "lag", solved by one character of scheme.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three more traps on the way to a listing
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. The 500-character description cap.&lt;/strong&gt; The CDP facilitator hard-rejects any settle whose &lt;code&gt;resource.description&lt;/code&gt; exceeds 500 chars — with a misleading schema-union error your buyer only ever sees as a silent second 402. We now assert the length at boot so it can't regress silently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. A price floor may exist.&lt;/strong&gt; Our $0.001 route settled successfully and did not index in 30+ minutes. The same route at $0.01 indexed within four minutes of the next settle. Not conclusive (time passed too), but if your cheap route won't list, try a settle at ≥$0.01 before debugging anything else.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Probe traffic will impersonate demand.&lt;/strong&gt; Within hours of listing, something started hitting our paid route at a machine-steady ~240 requests/hour — &lt;strong&gt;replaying the exact example input from our own discovery metadata&lt;/strong&gt;. One User-Agent hash accounted for 94% of it. If you're counting 402 challenges as "interest", tag and exclude requests that replay your declared example, or your demand number is fiction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Working examples
&lt;/h2&gt;

&lt;p&gt;Both endpoints are live if you want a reference implementation to poke at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;https://x402.donnyautomation.com/call?pair=WBNB/USDC&lt;/code&gt; — cross-DEX prices, liquidity &amp;amp; arbitrage spread on BSC, $0.01&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;https://x402.donnyautomation.com/v4hooks?address=0x...&lt;/code&gt; — Uniswap v4 hook custody-risk decode on Base, $0.01&lt;/li&gt;
&lt;li&gt;Free, no-payment demo: &lt;code&gt;https://x402.donnyautomation.com/demo/v4hooks/0x000052423c1dB6B7ff8641b85A7eEfc7B2791888&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Or install the MCP wrapper and let your agent pay for itself: &lt;code&gt;npx bsc-dex-spread-mcp&lt;/code&gt; (npm: &lt;code&gt;bsc-dex-spread-mcp&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hit the 402, decode the header, and check that &lt;code&gt;resource.url&lt;/code&gt; says &lt;code&gt;https&lt;/code&gt;. Ours does now.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>api</category>
      <category>ai</category>
      <category>defi</category>
    </item>
    <item>
      <title>Give your AI agent a cross-DEX spread tool it pays for itself (x402 + MCP, no account, no key)</title>
      <dc:creator>Donny Nguyen (Donny Diamond Hands)</dc:creator>
      <pubDate>Fri, 03 Jul 2026 23:52:48 +0000</pubDate>
      <link>https://dev.to/donnywin85/give-your-ai-agent-a-cross-dex-spread-tool-it-pays-for-itself-x402-mcp-no-account-no-key-1jo5</link>
      <guid>https://dev.to/donnywin85/give-your-ai-agent-a-cross-dex-spread-tool-it-pays-for-itself-x402-mcp-no-account-no-key-1jo5</guid>
      <description>&lt;p&gt;AI agents are starting to pay for data directly. The x402 protocol lets an HTTP&lt;br&gt;
endpoint answer a request with &lt;code&gt;402 Payment Required&lt;/code&gt;, the client signs a small&lt;br&gt;
USDC payment, and the same request is retried and served. No signup, no API key&lt;br&gt;
to request, no invoice — the agent just pays a cent and gets the data.&lt;/p&gt;

&lt;p&gt;I put a real endpoint behind that protocol and wrapped it as an MCP tool. This&lt;br&gt;
post covers what it returns, why an agent would want it, and how to plug it in.&lt;/p&gt;
&lt;h2&gt;
  
  
  What the endpoint does
&lt;/h2&gt;

&lt;p&gt;The endpoint sells one thing: &lt;strong&gt;real-time cross-DEX price and spread data for&lt;br&gt;
PancakeSwap v2 and v3 on BNB Smart Chain (BSC).&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET https://x402.donnyautomation.com/call?pair=WBNB/USDC
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Given a token pair (&lt;code&gt;SYM/SYM&lt;/code&gt;, first symbol is the USD-priceable side) and an&lt;br&gt;
optional PancakeSwap v3 fee tier, it returns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;per-venue mid prices across PancakeSwap v2 and v3 pools,&lt;/li&gt;
&lt;li&gt;the best buy and best sell venue,&lt;/li&gt;
&lt;li&gt;the gross cross-DEX spread in basis points,&lt;/li&gt;
&lt;li&gt;per-venue and total liquidity (TVL), and&lt;/li&gt;
&lt;li&gt;the source block number.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A trimmed response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json-doc"&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;"pair"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"WBNB/USDC"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"network"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bsc"&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;56&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"blockNumber"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;107562007&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"nativeUsd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;546.6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"pricesByVenue"&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;"venue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"pancake"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"surface"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"v2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;546.6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"tvlUsd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1234567&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="c1"&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;"bestBuy"&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;"venue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"pancakeV3:500"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&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;"bestSell"&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;"venue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"biswap"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&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;"midSpreadBps"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;27.4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"crossDex"&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;"grossSpreadBps"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;14.05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"buyVenue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&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;"sellVenue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&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;"surface"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"v2v3"&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;"liquidity"&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;"venues"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"totalTvlUsd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&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;"ts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-07-01T..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"rpc"&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;p&gt;It costs &lt;strong&gt;$0.01 USDC per call on Base mainnet&lt;/strong&gt;. The seller holds no private&lt;br&gt;
key — payment settlement is handled by a facilitator, and the endpoint only&lt;br&gt;
proxies to its BSC reader once payment is verified.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why an agent needs cross-DEX spread data
&lt;/h2&gt;

&lt;p&gt;Cross-DEX spread is the raw signal behind several agent tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Arbitrage detection&lt;/strong&gt; — a positive gross spread across venues, net of fees,
is the entry condition for a two-leg trade.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best-execution routing&lt;/strong&gt; — which venue to buy from and which to sell to,
right now, at this block.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slippage and liquidity checks&lt;/strong&gt; — per-venue TVL tells an agent whether a
given size will move the price.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The alternative is for every agent to run BSC RPC infrastructure, maintain pool&lt;br&gt;
addresses across v2 and v3 fee tiers, and re-derive constant-product and&lt;br&gt;
concentrated-liquidity math. Most agents should not. One tool call, one cent, a&lt;br&gt;
fresh block-stamped answer.&lt;/p&gt;
&lt;h2&gt;
  
  
  Using it from an MCP client
&lt;/h2&gt;

&lt;p&gt;The endpoint is wrapped as a Model Context Protocol server so any MCP-capable&lt;br&gt;
agent (Claude Desktop, Claude Code, and others) can call it as a tool. Install:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; bsc-dex-spread-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It is also available via &lt;a href="https://smithery.ai/servers/donnywin85/bsc-dex-spread-mcp" rel="noopener noreferrer"&gt;Smithery&lt;/a&gt;&lt;br&gt;
and the official MCP registry (&lt;code&gt;io.github.donnywin85/bsc-dex-spread&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Then add it to your MCP client config, supplying your own buyer wallet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json-doc"&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;"mcpServers"&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;"bsc-dex-spread"&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;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&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="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bsc-dex-spread-mcp"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&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;"EVM_PRIVATE_KEY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0xYOUR_BASE_MAINNET_BUYER_KEY"&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;p&gt;A note on the wallet model, because it matters: &lt;strong&gt;you supply the key; the package&lt;br&gt;
ships none.&lt;/strong&gt; The server signs each payment with the key in &lt;code&gt;EVM_PRIVATE_KEY&lt;/code&gt;,&lt;br&gt;
which you set in your own config. Fund that wallet with a few dollars of USDC on&lt;br&gt;
Base and nothing else — the x402 &lt;code&gt;exact&lt;/code&gt; scheme uses EIP-3009&lt;br&gt;
&lt;code&gt;transferWithAuthorization&lt;/code&gt;, so the facilitator broadcasts the transfer and pays&lt;br&gt;
the gas. A zero-ETH wallet settles fine. Treat it as a disposable, low-balance&lt;br&gt;
spending wallet.&lt;/p&gt;

&lt;p&gt;Once configured, the agent has a &lt;code&gt;get_dex_spread(pair, fee?)&lt;/code&gt; tool and pays&lt;br&gt;
$0.01 USDC each time it calls it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Proof it is live
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Live usage/telemetry page: &lt;a href="https://x402.donnyautomation.com/stats" rel="noopener noreferrer"&gt;https://x402.donnyautomation.com/stats&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;First real mainnet settlement (self-payment, to prove the path end to end):
&lt;a href="https://basescan.org/tx/0x0c3ceda02f8aa36d48da392330e5bdcc9f34632a5dba2366a1663d6e7a301733" rel="noopener noreferrer"&gt;&lt;code&gt;0x0c3ceda02f8aa36d48da392330e5bdcc9f34632a5dba2366a1663d6e7a301733&lt;/code&gt;&lt;/a&gt;
— Base mainnet, receipt status success. The transaction was submitted by the
facilitator, confirming the buyer paid zero gas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;code&gt;/stats&lt;/code&gt; page shows challenge-versus-paid counts and recent settlements, so&lt;br&gt;
you can watch real demand accrue rather than take my word for it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;If you are building agents that touch on-chain markets, this is a small, honest&lt;br&gt;
example of the pattern worth copying: a narrow, useful data endpoint, priced per&lt;br&gt;
call, discoverable and payable by machines without a human in the loop. The&lt;br&gt;
protocol is x402; the packaging is MCP; the price is a cent.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>mcp</category>
      <category>ai</category>
      <category>defi</category>
    </item>
  </channel>
</rss>
